我有一個由 Java Spring 應用程式進行的操作,它會生成一個類似下面的日志,日志前的數字是:是事務 ID (%x) https://www.postgresql.org/docs/13/runtime-config-logging。 html
2021-11-08 06:55:26.834 UTC [134] 0 LOG: execute S_4: BEGIN
2021-11-08 06:55:26.836 UTC [134] 0 LOG: execute <unnamed>: /* insert ENTITY1 */
RETURNING *
2021-11-08 06:55:26.881 UTC [134] 19573 LOG: execute <unnamed>: /* insert ENTITY2 */
RETURNING *
2021-11-08 06:55:28.165 UTC [134] 19573 LOG: execute <unnamed>: /* update ENTITY1 */
--Some more things--
2021-11-08 06:55:30.357 UTC [155] 0 LOG: execute <unnamed>: BEGIN
2021-11-08 06:55:30.357 UTC [155] 0 LOG: execute <unnamed>:
RETURNING *
2021-11-08 06:55:30.400 UTC [155] 19576 LOG: execute S_1: COMMIT
2021-11-08 06:55:30.452 UTC [134] 19573 LOG: execute <unnamed>: /* update ENTITY1 */ update ...
2021-11-08 06:55:32.395 UTC [155] 0 LOG: execute <unnamed>: BEGIN READ ONLY
2021-11-08 06:55:32.396 UTC [155] 0 LOG: execute <unnamed>: select ...
2021-11-08 06:55:32.438 UTC [155] 0 LOG: execute S_1: COMMIT
2021-11-08 06:55:32.564 UTC [155] 0 LOG: execute S_2: BEGIN READ ONLY
2021-11-08 06:55:32.565 UTC [155] 0 LOG: execute S_3: select ...
2021-11-08 06:55:32.606 UTC [155] 0 LOG: execute S_1: COMMIT
2021-11-08 06:55:32.648 UTC [155] 0 LOG: execute <unnamed>: select
2021-11-08 06:55:32.864 UTC [134] 19573 LOG: execute S_1: COMMIT
我看到由于某種原因事務運行了很長時間(幾秒鐘)
我的問題:
- 鑒于我只插入單個物體并始終使用 WHERE 進行更新,這會導致表級鎖定嗎?
- 有沒有一種方法可以讓我從 Postgres 端或 Java 端注銷此操作何時以及獲取哪種型別的鎖 - 以及多長時間?
uj5u.com熱心網友回復:
鑒于我只插入單個物體并始終使用 WHERE 進行更新,這會導致表級鎖定嗎?
如果 where 列中使用的列上沒有索引,則具有 where 原因的查詢或更新可能需要一些時間。你也可以試著解釋一下。
有沒有一種方法可以讓我從 Postgres 端或 Java 端注銷此操作何時以及獲取哪種型別的鎖 - 以及多長時間?
由于您的代碼看起來不像顯式獲取任何資料庫鎖 - 資料庫引擎將在 SQL 執行期間隱式獲取鎖。Postgres 提供了不同的視圖來查詢鎖級別資訊。對于不同的查詢,您可以參考此檔案和官方檔案以從 Postgres 端獲取鎖定資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/358248.html
標籤:春天 PostgreSQL的 jpa 弹簧数据-jpa
上一篇:沒有CascadeType.REMOVE的CascadeType.ALL更改持久化行為
下一篇:物件中的最大值
