近几年学得比较迷茫,好像什么都学,一直想好好剖析一个好产品, 好好提升一下自我,好像进展蛮慢,博客也少写了。 人的精力是有限的,还是得在某一行深入。
近来对mysql有些兴趣,专门学习了一下。
我们都知道,数据库事务隔离级别下和普通sql加锁和释放锁的时机是不同的,
mysql是如何实现的呢。(以mysql-6.0.11-alpha为例)
mysql锁释放的代码在 lock_release_off_kernel。
下面在红帽下跟踪:
首先设置断点:
break lock_release_off_kernel
在mysql客户端,连接上面,在事务和非事务下执行,看看堆栈的不同
非事务状态下面执行
select * from test1 ;
堆栈显示如下:
#0 lock_release_off_kernel (trx=0xb512ac68) at lock/lock0lock.c:3853
#1 0xb5dca803 in trx_commit_off_kernel (trx=0xb512ac68) at trx/trx0trx.c:853
#2 0xb5dcad19 in trx_commit_for_mysql (trx=0xb512ac68) at trx/trx0trx.c:1582
#3 0xb5dd2838 in innobase_commit_low (trx=0x0) at handler/ha_innodb.cc:1878
#4 0xb5dd5f42 in innobase_commit (hton=0x8f6c2e8, thd=0x982fec0,