[MySQL 5.6] 优化函数lock_number_of_rows_lock

lock_number_of_rows_locked是一个统计一个事务中占有多少记录锁的函数,通过执行show engine innodb status触发。

在我们的生产环境中,类似SHOW ENGINE INNODB STATUS这样的语句是被频繁执行的,而从perf top,也观察到过占用超过20%的cpu。

quoted code from lock_number_of_rows_locked:

       for (lock = UT_LIST_GET_FIRST(trx_lock->trx_locks);
            lock != NULL;
            lock = UT_LIST_GET_NEXT(trx_locks, lock)) {

               if (lock_get_type_low(lock) == LOCK_REC) {
                       ulint   n_bit;
                       ulint   n_bits = lock_rec_get_n_bits(lock);

                       for (n_bit = 0; n_bit < n_bits; n_bit++) {
                               if (lock_rec_get_nth_bit(lock, n_bit)) {
                                       n_records++;
                               }
                       }
               }
       }

 

返回上一层的函数来看,这里实际上是带着全局大锁lock_sys->mutex.仅仅为了一个计数,我们完全可以为每个事务增加一个计数器,然后在设置行锁bit/RESET 行锁bit时 增加/减少计数.

昨天提交的buglist(http://bugs.mysql.com/bug.php?id=68647) ,包含Patch


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值