1. 程式人生 > 資料庫 >MySQL Debug sync功能使用簡介

MySQL Debug sync功能使用簡介

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");

時,傳送downgraded,並且等待dml_done

  • 通過另外一個執行緒傳送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資訊,如下:
在這裡插入圖片描述