2013-11-02 31 views
1

我有一個鎖定的查詢。因此我的Web應用程序被鎖定,我不明白爲什麼。閒置事務並使用PostgreSQL鎖定

望着pgAdmin的我有這樣的:

Activities

如果我理解正確的,橙色的查詢已被封鎖由查詢正上方(這是在「在交易閒置」狀態)。

這是否意味着「閒置交易」交易未提交? 這是因爲它沒有承諾其他交易被鎖定?

如果我提交「閒置交易」交易,它會解鎖鎖定的交易嗎?

說實話,我真的不明白我應該如何解釋這一點。你可以幫我嗎 ?

回答

1

你的假設是正確的。 「在事務中空閒」意味着會話(在這種情況下,PID = 16686)啓動了一個事務,並在goodscontract表上持有一些鎖。

請注意,您看到的PID = 16686的選擇很可能不是阻止更新的語句(作者不會被Postgres中的讀者阻止)。很有可能PID = 16686之前運行了一個不同的聲明,該聲明獲取了鎖(或者該選擇包含一個for update子句 - 因爲您的屏幕截圖沒有顯示完整的聲明,這是無法說明的)。

一般強烈建議儘快結束交易(使用commitrollback) - 其中包括只有select s的只讀交易。

+0

謝謝你的回答。其實我正在使用Play Framwork(使用Hibernate)。據我所知,播放框架在HTTP請求開始時打開一個事務,並在最後提交它。但在我的情況下,被阻止的事務是我手動打開的無狀態事務。另外,您在閒置交易中的權利是在商品合同表上有更新請求。所有這些意味着我應該在打開無狀態事務之前手動處理事務以提交它們? –