[英]PostgreSQL locks after 6th execution of the same query
PostgreSQL版本:Postgres Plus Advanced Server 9.2
作業系統:Windows 7/8
我有一個存儲過程,其行為如下:
1.清除table1
2.根據在WHERE子句中傳遞的幾個參數( 在示例中,始終為相同的參數 )從一個視圖中選擇( 始終為同一視圖 )
3.將上面選擇的結果插入表1中 。
該過程的主體如下所示:
BEGIN
PERFORM clear_table1(p_session_id);
INSERT INTO table1 (session_id, id1, adress, x, y)
SELECT p_session_id, id1, adress, x, y
FROM myview
WHERE (CONDITION)
AND (CONDITION)
AND (CONDITION)
AND (lower(adress) LIKE lower(p_adress) OR p_adress IS NULL)
LIMIT 6000;
END;
前5次(總是5次),我使用完全相同的參數運行完全相同的查詢,它按預期運行。 下次(第6次)運行了很長時間,例如..數十分鍾。
select * from myfunction('session_id',NULL,NULL,'%adress%')
在PostgreSQL管理器的“ 服務器狀態”視圖中,我觀察到為插入的表以及從中填充視圖的表添加了許多鎖。
任何人都可以使用PostgreSQL的經驗告訴我,如果有某種的設置來解決此問題的還是沒這種或類似的事情發生他人使用PG?
謝謝!!!
以后的編輯 :- 僅當在同一會話中進行6次調用時, 才會始終出現此問題-在存儲過程結束時,我們不會明確提交
大膽猜測:您正在使用具有默認准備閾值的JDBC。
查看禁用服務器端准備是否可以使問題消失。 請參閱PgJDBC文檔 。
如果該函數內有慢速調用,則失敗:嘗試啟用auto_explain
並啟用對函數體的處理。 然后在第六次調用中查看計划是否由於某種原因而更改。
我知道這是一個非常老的問題,但是昨天我遇到了完全相同的問題。
意識到它很棘手,因為它總是在第六次之后才出現。
我無法解釋原因,但是我能夠解決它。
在我的情況下,我必須更改它所在的部分
SELECT (sum(coalesce(debito.vl_conta,0)) ) ...
至
execute 'SELECT (sum(coalesce(debito.vl_conta,0)) ) ...
就是這樣。 但是在這里回答,以防萬一其他人也遭受了它,或者也許解釋了它為什么會發生。
謝謝,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.