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信息,如下:
在这里插入图片描述

发布了166 篇原创文章 · 获赞 77 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/sun_ashe/article/details/104206105
今日推荐