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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值