观察innodb的锁时间,需要关注:

mysqladmin extended-status -r -i 1 -uroot | grep "Innodb_row_lock_time"

Innodb_row_lock_current_waits:当前正在等待锁定的数量;

Innodb_row_lock_time :从系统启动到现在锁定的总时间长度,单位ms;

Innodb_row_lock_time_avg :每次等待所花平均时间;

Innodb_row_lock_time_max:从系统启动到现在等待最长的一次所花的时间;

Innodb_row_lock_waits :从系统启动到现在总共等待的次数。

如我的压测语句:

insert into i0( id, type, num, iid, uid, iid, sid,bid, cid, q, gmt_create, gmt_modified, status, version, time_out, time_number, o_gmt_create,aid, ff, flag, code, cache, sq, rq) values( :v_id, '1',:v_opt_num, '1352', 1640350003, 16441266176, 0, '1370761289618','19101339145067259', '2', now(), now(), '1', '0', null, '0', now(), '0', null, '2', 'C', 1, null, null);update q0 set q=q-0, v=v+1, gmt_modified=now(), rq = CASE WHEN ((rq + 2 ) >= 0 ) then rq + 2 ELSE 0 END where id =6060 and iid = 16441266176 and sid = 0 and (q - rq - 2) >= 0 and q-0>=0;

压测结果:

Summary: SQL01 exec=11756, rows=11756=100/e, avg=518 us
Summary: SQL02 exec=12800, rows=12800=100/e, avg=14483 us
Summary: exec=8488/s, qtps=16343/s

观察到的锁情况:

| Innodb_row_lock_time                     | 868           |
| Innodb_row_lock_time_avg                 | 0             |
| Innodb_row_lock_time_max                 | 0             |
| Innodb_row_lock_time                     | 114932        |
| Innodb_row_lock_time_avg                 | 0             |
| Innodb_row_lock_time_max                 | 0             |
| Innodb_row_lock_time                     | 61775         |
| Innodb_row_lock_time_avg                 | 0             |
| Innodb_row_lock_time_max                 | 0             |
| Innodb_row_lock_time                     | 0             |

从占有锁到释放锁一共消耗:114932ms,不可能是一条记录的时间,再根据实时状态:

-------- -----load-avg---- ---cpu-usage--- ---swap---                     -QPS- -TPS-         -Hit%- ---innodb rows status--- time  |  1m    5m   15m |usr sys idl iow|   si   so|  ins   upd   del    sel   iud|     lor    hit|  ins   upd   del   read|
19:47:20| 1.26  1.21  1.20|  5   1  93   0|    0    0|    0     0     0      0     0|       0 100.00|    0     0     0      0|
19:47:21| 1.26  1.21  1.20|  1   1  98   0|    0    0|    0     1     0      5     1|       9 100.00|    0     1     0      1|
19:47:22| 1.24  1.21  1.20|  0   0 100   0|    0    0|    0     0     0      6     0|       1 100.00|    0     0     0      0|
19:47:23| 1.24  1.21  1.20|  7   3  90   0|    0    0| 2932  2930     0      6  5862|  100502  99.91| 2712  2809     0   2809|
19:47:24| 1.24  1.21  1.20| 16   4  79   0|    0    0| 7939  7940     0      6 15879|  293693  99.91| 7257  7954     0   7954|
19:47:25| 1.24  1.21  1.20|  5   2  93   0|    0    0| 1929  1932     0      6  3861|  101527  99.94| 1762  2039     0   2039|

实际每秒update 7940条,平均每条消耗:

root@(none) 07:47:33>select 114932/7940ms;
+-------------+
| 114932/7940 |
+-------------+
|     14.4751 |
+-------------+

平均每条消耗14.4751ms和压测结果avg=14483 us吻合,对于单条语句的更新来说这个锁占用的时间还是挺长的。

转载于:https://www.cnblogs.com/sunss/p/3170132.html

innodb的锁时间相关推荐

  1. MySQL · 引擎分析 · InnoDB行锁分析

    前言 理解InnoDB行锁,分析一条SQL语句会加什么样的行锁,会锁住哪些数据范围对业务SQL设计和分析线上死锁问题都会有很大帮助.对于InnoDB的行锁,已经有多篇月报进行了介绍,这里笔者借鉴前面月 ...

  2. 秒懂INNODB的锁

    今天我们来聊聊MySQL中InnoDB存储引擎的锁. 锁是数据库系统系统区别于文件系统的一个关键特性. lock和 latch latch latch在MySQL中是用来保证并发多线程操作操作临界资源 ...

  3. 9、 InnoDB行锁

    在 MySQL 中,InnoDB 行锁通过给索引上的索引项加锁来实现,如果没有索引,InnoDB 将通过隐藏的聚簇索引来对记录加锁. InnoDB 支持 3 种行锁定方式: 行锁(Record Loc ...

  4. MySQL高级 - 锁 - InnoDB行锁 - 争用情况查看

    InnoDB 行锁争用情况 show status like 'innodb_row_lock%'; Innodb_row_lock_current_waits: 当前正在等待锁定的数量Innodb_ ...

  5. InnoDB 事务/锁/多版本分析?你了解多少?

    目录 • InnoDB事务 – 事务结构/功能 – XA事务/Group Commit – mini-transaction• InnoDB锁 – 锁结构/类型/功能 – 锁等待/死锁检测 – 自增序 ...

  6. mysql innodb 间隙锁_Mysql innodb 间隙锁

    前段时间系统老是出现insert死锁,很是纠结.经过排查发现是间隙锁!间隙锁是innodb中行锁的一种, 但是这种锁锁住的却不止一行数据,他锁住的是多行,是一个数据范围.间隙锁的主要作用是为了防止出现 ...

  7. MySQL数据库锁机制之MyISAM引擎表锁和InnoDB行锁详解

    MySQL中的锁概念 Mysql中不同的存储引擎支持不同的锁机制.比如MyISAM和MEMORY存储引擎采用的表级锁,BDB采用的是页面锁,也支持表级锁,InnoDB存储引擎既支持行级锁,也支持表级锁 ...

  8. Mysql innodb 间隙锁

    前段时间系统老是出现insert死锁,很是纠结.经过排查发现是间隙锁!间隙锁是innodb中行锁的一种, 但是这种锁锁住的却不止一行数据,他锁住的是多行,是一个数据范围.间隙锁的主要作用是为了防止出现 ...

  9. MySQL探秘(七):InnoDB行锁算法

     在上一篇<InnoDB一致性非锁定读>中,我们了解到InnoDB使用一致性非锁定读来避免在一般的查询操作(SELECT FOR UPDATE等除外)时使用锁.然而锁这个事情是无法避免的, ...

最新文章

  1. android 手写字体识别,一种基于Android系统的手写数学公式识别及生成MathML的方法...
  2. 【必读】文案都写不好,还谈什么互联网思维
  3. ajax 设置Access-Control-Allow-Origin实现跨域访问
  4. centos 6.5 rpm mysql_Linux平台(CentOS 6.5) RPM包方式安装 Mysql 5.7
  5. 【机器学习实战】第2章 k-近邻算法(kNN)
  6. HDU1394(权值线段树)
  7. 打卡小程序源码修复登录接口
  8. 收获,不止SQL优化——抓住SQL的本质--第六章
  9. 《CLR via C#》笔记——运行时序列化(2)
  10. C# 人民币大小写转换正则表达式
  11. scratch课程案例——漫天飞雪
  12. SI24R1可以替代NRF24L01P软件硬件DIY兼容成功
  13. 错误 LNK1104 无法打开文件“C:\Users\Administrator\Desktop\新建文件夹\ConsoleApplication1\x64\Debug\ConsoleApplicat
  14. 批量/去掉office 2010 Word中标题前的黑点
  15. SpringBoot 检索篇 - 整合 Elasticsearch7.6.2
  16. 【HarmonyOS】鸿蒙3.0使用WebView进行链接跳转,告警“hwbr_engine_AwContentsClient: Denied starting an intent without a
  17. Scala学习小计 - 什么是模式匹配(pattern-matchin)?
  18. openresty中应用murmurHash
  19. 画图软件visio安装
  20. 【Android组件化】javaPoet的使用

热门文章

  1. perl 如何判断变量为空
  2. 虚函数(动态绑定)对于 OO/C++的重要性
  3. java 存储过程简单例子
  4. 揭开OpenStack 统计资源和资源调度的面纱
  5. Android系列之Fragment(三)----Fragment和Activity之间的通信(含接口回调)
  6. LNMP - nginx代理详解
  7. Juniper防火墙透明模式
  8. (推荐)(提供下载)ORACLE常见问题一千问(不怕学不成、就怕心不诚!)
  9. FLASH与ASP.NET通讯[Flash | CS3 | ActionScript | ASP.NET | FluorineFx ]
  10. 简单servlet和jdbc回顾