[MySQL 调试]DBUG_EXECUTE_IF简介

转载请署名:印风

———————————————–

DEBUG_EXECUTE_IF主要用于当设置了某个关键字key时,执行后面的代码,

可以简单的表示为:

DEBUG_EXECUTE_IF(key,  code)
例如在open_and_lock_tables函数中.

5527 if (open_tables(thd, &tables, &counter, flags, prelocking_strategy))
5528 goto err;
5529
5530 DBUG_EXECUTE_IF("sleep_open_and_lock_after_open", {
5531 const char *old_proc_info= thd->proc_info;
5532 thd->proc_info= "DBUG sleep";
5533 my_sleep(6000000);
5534 thd->proc_info= old_proc_info;});
5535
5536 if (lock_tables(thd, tables, counter, flags))
5537 goto err;

 

那么如何让其生效呢,执行如下语句即可:
set session debug=”+d, sleep_open_and_lock_after_open”

 

这时候当进入这个函数时,在执行完open_tables语句后,就会设置thd的状态为DBUG sleep,再sleep 6秒钟,然后再调用lock_tables函数

 

—————-
另外我们在写test case时,也可能用到用户层的锁,使用SQL FUNCTION的方法实现:
GET_LOCK(str, timeout)
—尝试获取一个名为str的锁,等待timeout,返回1表示获取锁成功
IS_FREE_LOCK(str)
—检查名为str的锁是否已经被释放
IS_USED_LOCK(str)
—检查名为str的锁是否已经被占用,如果是,返回占有该锁的线程ID,否则返回NULL
RELEASE_LOCK(str)
—释放名为str的锁

原创文章,转载请注明: 转载自Simple Life

本文链接地址: [MySQL 调试]DBUG_EXECUTE_IF简介

Post Footer automatically generated by wp-posturl plugin for wordpress.


Comments

Leave a Reply

Your email address will not be published. Name and email are required


Current month ye@r day *