回覆列表
  • 1 # 愛可生雲資料庫

    1. 程式中非資料庫互動操作導致事務掛起

    將介面呼叫或者檔案操作等這一類非資料庫互動操作嵌入在 SQL 事務程式碼之中,那麼整個事務很有可能因此掛起(介面不通等待超時或是上傳下載大附件)。

    2. 事務中包含效能較差的查詢 SQL

    事務中存在慢查詢,導致同一個事務中的其他 DML 無法及時釋放佔用的行鎖,引起行鎖等待。

    3. 單個事務中包含大量 SQL

    通常是由於在事務程式碼中加入 for 迴圈導致,雖然單個 SQL 執行很快,但是 SQL 數量一大,事務就會很慢。

    4. 級聯更新 SQL 執行時間較久

    這類 SQL 容易讓人產生錯覺,例如:update A set ... where ...in (select B) 這類級聯更新,不僅會佔用 A 表上的行鎖,也會佔用 B 表上的行鎖,當 SQL 執行較久時,很容易引起 B 表上的行鎖等待。

    5. 磁碟問題導致的事務掛起

    極少出現的情形,比如儲存突然離線,SQL 執行會卡在核心呼叫磁碟的步驟上,一直等待,事務無法提交。

    綜上可以看出,如果事務長時間未提交,且事務中包含了 DML 操作,那麼就有可能產生行鎖等待,引起報錯。

  • 中秋節和大豐收的關聯?
  • 為什麼我越過越迷茫?