MySQL Debug sync功能使用簡介
阿新 • • 發佈:2020-02-19
debug sync是MySQL提供的一種程式碼除錯,問題分析工具, 它整合在MySQL的內部。具體作用是:
- 讓程式碼執行到某個特殊的位置(同步點)時觸發暫停,等待指定的某個或者多個signal
- 在啟用同步點,並且被觸發時,可以向別的執行緒傳送signal,喚醒其他執行緒
- 在啟用同步點,並且被觸發時,可以被別的執行緒通過signal喚醒繼續執行
- 可以設定同步點的等待超時時間
要求:只能在debug版本中使用。
特殊的位置指的是,程式碼放置的同步點,通過巨集定義DEBUG_SYNC來放置。
DEBUG_SYNC(thd,"alter_table_inplace_after_lock_downgrade");
語法規則如下:
- 觸發某個同步點時暫停,並且等待signal dml_done.
SET DEBUG_SYNC= 'alter_table_inplace_after_lock_downgrade WAIT_FOR dml_done';
signal可以隨意命名
- 觸發某個同步點時暫停,並且傳送一個signal,等待另外一個signal觸發
SET DEBUG_SYNC= 'alter_table_inplace_after_lock_downgrade SIGNAL downgraded WAIT_FOR dml_done';
如上所示就是讓當前執行緒執行到程式碼DEBUG_SYNC(thd,"alter_table_inplace_after_lock_downgrade");
- 通過另外一個執行緒傳送signal dml_done,來喚醒在同步點等待的執行緒。
SET DEBUG_SYNC= 'now SIGNAL dml_done';
- 等待超時是通過mysqld啟動引數–debug-sync-timeout 來設定。超時的示例如下:
mysql> SET DEBUG_SYNC= 'alter_table_inplace_after_lock_downgrade WAIT_FOR dml_done'; Query OK,0 rows affected (0.00 sec) mysql> alter table t1 add name_5 varchar(10); Query OK,0 rows affected,1 warning (10.05 sec) Records: 0 Duplicates: 0 Warnings: 1 mysql> show warnings; +---------+------+---------------------------------+ | Level | Code | Message | +---------+------+---------------------------------+ | Warning | 1639 | debug sync point wait timed out | +---------+------+---------------------------------+ 1 row in set (0.00 sec)
被signal喚醒後,則沒有warning資訊,如下: