Mysql 從庫如果有未提交的事務主庫ddl操作導致主從延遲

kakaxi9521發表於2022-01-24

情況描述:

  1. 從庫出現延遲,使用select * from information_schema.innodb_trx order by trx_started desc\G;  檢視當前從庫中的事務, 發現有一條1周前的事務未提交記錄。

  2. 有waiting for table metadata lock 的等待事件,且session 中有一條表結構變更的ddl操作,也是處於waiting for table metadata lock。

  3. 主從有延遲。


處理過程:

     1.  1周前的那條事務記錄時間太長, 覺得有問題, kill 掉,waiting for table metadata lock 等待事件消失,主從延遲追平。


事情處理過後回顧,猜測,未驗證:

    從庫如果有未提交的事務,如果主庫中有對未提交事務中的表做ddl 的操作在備庫會有waiting for table metadata lock 等事件,會導致主從延遲。 要麼kill 未提交的事務,要麼kill ddl 操作。


1月26日實驗驗證上面猜測:

主庫,建立表t1:

備庫, 表t1:

備庫4個執行緒:

備庫開啟事務:

主庫對錶t1加一個欄位:

檢視備庫狀態,在生產上一般會話會非常多,此處的12執行緒是從庫的sql_thread ,處於waiting for table metadata lock:

備庫延遲:

備庫上檢視未提交的transaction, 未提交的transaction 執行緒18,kill 掉執行緒18備庫延遲恢復正常。





來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21374452/viewspace-2853831/,如需轉載,請註明出處,否則將追究法律責任。

相關文章