MySQL运维系列 之 如何监控大事务

long transaction

背景

大家有没有遇到这样的情况

  1. 某个SQL执行特别慢,导致整个transaction一直处于running阶段
  2. 某个Session的SQL已经执行完了,但是迟迟没有commit,一直处于sleep阶段
  3. 某个Session处于lock wait阶段,迟迟没有结束

以上,大部分原因都是大事务导致的,接下来我们好好聊聊相关话题

关键字

  • 环境
1. MySQL5.7.22低版本MySQL这边不再考虑,就像还有使用SAS盘的公司一样,费时费力,MySQL5.7+ 标配2. InnoDB存储引擎3. CentOS 6
  • 大事务的相关特征
1. transaction开启到结束的时间非常长,我们这边举例为10s
2. 正在执行的事务
3. 未提交的事务

实战

  • 如何监控那些正在执行的事务
1. select * from sys.processlist
2. show processlist
3. select * from information_schema.processlist
4. select * from sys.session
5. select * from information_schema.innodb_trx;
6. select * from performance_schema.events_statements_current
  • 如何监控那些未提交的事务
select * from information_schema.innodb_trx
  • 如何两者结合
select trx_id,INNODB_TRX.trx_state,INNODB_TRX.trx_started,se.conn_id as processlist_id,trx_lock_memory_bytes,se.user,se.command,se.state,se.current_statement,se.last_statement from information_schema.INNODB_TRX,sys.session as se where trx_mysql_thread_id=conn_id;+---------+-----------+---------------------+----------------+-----------------------+------+---------+----------+-----------------------------------+-----------------------------------+
| trx_id  | trx_state | trx_started         | processlist_id | trx_lock_memory_bytes | user | command | state    | current_statement                 | last_statement                    |
+---------+-----------+---------------------+----------------+-----------------------+------+---------+----------+-----------------------------------+-----------------------------------+
| 1592104 | LOCK WAIT | 2018-06-26 11:51:17 |              3 |                  1136 | NULL | Query   | updating | update lc_1 set id=4 where id = 1 | NULL                              |
| 1592100 | RUNNING   | 2018-06-26 11:49:08 |              2 |                  1136 | NULL | Sleep   | NULL     | NULL                              | update lc_1 set id=3 where id = 1 |
+---------+-----------+---------------------+----------------+-----------------------+------+---------+----------+-----------------------------------+-----------------------------------+

大家可以看到,通过这个可以立马发现事务语句处于running阶段 , 哪些事务处于lock wait阶段 , 如果遇到这种情况,我们应该如何处理呢?
聪明的你,一定会去根据trx_started去寻找蛛丝马迹,可是如果再生产环境中,这是一件非常复杂和繁忙的事情
不过没关系,我们还有神器可以使用

  • 如何快速解决锁等待问题
dba:sys> select * from sys.innodb_lock_waits\G
*************************** 1. row ***************************wait_started: 2018-06-26 11:49:58wait_age: 00:00:03wait_age_secs: 3locked_table: `lc`.`lc_1`locked_index: GEN_CLUST_INDEXlocked_type: RECORDwaiting_trx_id: 1592102waiting_trx_started: 2018-06-26 11:49:58waiting_trx_age: 00:00:03waiting_trx_rows_locked: 2waiting_trx_rows_modified: 0waiting_pid: 3waiting_query: update lc_1 set id=4 where id = 1waiting_lock_id: 1592102:32:3:4waiting_lock_mode: Xblocking_trx_id: 1592100blocking_pid: 2blocking_query: NULLblocking_lock_id: 1592100:32:3:4blocking_lock_mode: Xblocking_trx_started: 2018-06-26 11:49:08blocking_trx_age: 00:00:53blocking_trx_rows_locked: 1blocking_trx_rows_modified: 1sql_kill_blocking_query: KILL QUERY 2
sql_kill_blocking_connection: KILL 2

MySQL最终非常贴心都连kill SQL 语句都生产了,你只需要复制、粘贴即可

细心的你会发现,通过innodb_lock_waits你只能看到被lock的语句,但是看不到是哪个query语句拥有的锁,这又是为什么呢?

不卖关子,因为拥有锁的事务中可能拥有多条query语句,也可能已经执行完,但是没有commit,所以无法给出所有query语句。

那怎么办呢?哈哈,如果幸运的话,你可以根据我上述的案例 current_statement,last_statement 得到答案。

再换句话说,即便没有找到那条query,也不妨碍你解决当前的问题哈

总结

  1. MySQL5.7 默默的提供了非常多的实用工具和新特性,需要DBA们去挖掘和探索。将看似平淡无奇的特性挖掘成黑武器,你才能成为那闪着光芒的Top5 MySQLer
  2. 工欲善其事必先利其器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

再见腾讯,创业我来了!!!

发现好久没有更新博客了,确实自从进了腾讯以后博客写的寥寥无几,一来是忙,而来是写博客没以前那么有成就感了。但是今天在半夜我又鬼使神差的想写了,因为尼玛欧冠巴萨 VS AC米兰还有将近一个小时,哥实在是等的蛋疼。有…

“docker-app”实用工具分享,大大提高 Compose 文件复用率

本文首发自“Docker公司”公众号(ID:docker-cn)编译丨小东每周一、三、五 与您不见不散! Docker Compose 在开发人员中非常流行,它用来描述应用程序。目前,GitHub 上有超过30万个 Docker Compose 文件。通过…

9.11学习笔记

备注&#xff1a; <span class"kp"> <a href""></a></san>a 是特殊的 要改变a里面的颜色&#xff0c;必须直接给a设置&#xff0c;给a的父级设置不行 属性继承&#xff1a;明明是父级上设置样式&#xff0c;结果后代标签也跟着发生…

bootstrap-validator 验证一个标签同时验证另一个指定标签

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 如图 验证 str_atBeginDate 同时把 str_atTermDate 也作一次验证&#xff1a; 注意 红框中 " value “ 不能少&#xff0c;我之…

solr基本查询和高级查询

查询参数常用&#xff1a; q - 查询字符串&#xff0c;必须的。fl - 指定返回那些字段内容&#xff0c;用逗号或空格分隔多个。start - 返回第一条记录在完整找到结果中的偏移位置&#xff0c;0开始&#xff0c;一般分页用。rows - 指定返回结果最多有多少条记录&#xff0c;配…

送给“苦逼”的IT人系列

送给“苦逼”的IT人系列1&#xff1a;IT人的“钱”景以及收入的两道坎 虽然IT工作五花八门&#xff0c;而且年纪有老有少&#xff0c;但IT人的收入总体还是比较有规律的&#xff0c;很明显的可以看出有两道坎&#xff0c;分别是10W&#xff0c;和30W&#xff0c;当然&#xff…

锐动SDK应用于行车记录仪

方案架构手机端直播与录播功能忠实记录旅途中各种突发事件&#xff0c;还原事实真相&#xff0c;与家人和朋友分享沿途美景&#xff0c;一同感受美妙之旅。强大的视频编辑功能&#xff0c;像编辑图片一样给视频添加各种滤镜&#xff0c;配音&#xff0c;配乐&#xff0c;标题文…

Angular4 存储访问路由栈信息

一、实现方法1.可以通过路由守卫&#xff0c;可以给父级路由添加&#xff0c;若无父级路由&#xff0c;则需要每个路由都需要添加守卫&#xff0c;即每个页面都需要调该方法例如&#xff1a;jdb-app端上的tool.service.ts是每个页面都会调取的方法&#xff0c;可以将监听路由函…

python基本语法:字典

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、数据类型和对应符号&#xff1a; 元组 ( ) 列表 [ ] 字典 { } 二、字典是python中唯一的映射类型&#xff08;哈希表&#xf…

网址URL中特殊字符转义编码

字符 - URL编码值 空格 - %20" - %22# - %23% - %25& - %26( - %28) - %29 - %2B, - %2C/ - %2F: - %3A; - %3B< - %3C - %3D> - %3E? - %3F - %40\ - %5C| - %7C…

无病呻吟系列

无病呻吟1&#xff1a;给应届生的话 讲到第一份工作&#xff0c;自然要给应届毕业生一点建议。 其实这不是我的初衷&#xff0c;写这篇文章的主要目的&#xff0c;是给那些工作了3,5年&#xff0c;正进入迷茫期或已经进入迷茫期的人看的。至于应届毕业生&#xff0c;我想&…

JavaScript实现向OL列表内动态添加LI元素的方法

2019独角兽企业重金招聘Python工程师标准>>> <script type"text/javascript"> function addItem() {var myitem document.getElementById("ItemToAdd").value;var mylistItems document.getElementById("mylist");var newP …

【blockly教程】第五章 循环结构

在这里&#xff0c;我们将介绍一个新游戏--Pond Tutor 在Pond Tutor(https://blockly-games.appspot.com/pond-tutor)这个游戏中&#xff0c;我们将扮演黄色的鸭子&#xff0c;通过不断的发炮弹去攻击红色的鸭子&#xff0c;当红色的鸭子血条减为0时则玩家获胜。在这个游戏中为…

数据的PB级别是什么?

PB是数据存储容量的单位&#xff0c;它等于2的50次方个字节&#xff0c;或者在数值上大约等于1000个TB。”一提到数据量级&#xff0c;人们通常会联想到美国国会图书馆&#xff0c;德勤、麦肯锡、IBM、Gartner和移动广告公司。Adfonic的数据专家向TechTarget记者介绍了PB级数据…

js 获取字符串最后一位的4种方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 方法一&#xff1a;运用String对象下的charAt方法 charAt() 方法可返回指定位置的字符。 复制代码代码如下:str.charAt(str.length – …

360董事长周鸿祎跨足手机市场是福还是祸?

编者按&#xff1a;奇虎360董事长周鸿祎做的这个“思考了半年”的决定&#xff1a;进军智能手机&#xff0c;是于5月4日夜10时45分。他所发布新浪微博称&#xff1a;“现在每个人都想拥有高性能的智能手机&#xff0c;高富帅白富美人手一iPhone&#xff0c;难道吊丝只能买便宜低…

3 .6 .5 优化Ad-Hoc工作负载

执行计划生成后会存储在plan cache中&#xff0c;以便重用&#xff0c;如果计划缓存从来都没有被重用 过&#xff0c;将会造成内存资源的浪费&#xff0c;这有可能是由于非参数化的Ad-hoc (即席查询&#xff09;引起的。 当执行代码时&#xff0c;会产生一个hash值&#xff0c;…

LightOJ - 1422 (区间DP)

题意&#xff1a;有t组数据&#xff0c;对于每组&#xff0c;有n个聚会需要参加&#xff0c;下面依次是参加各个聚会需要的衣服编号&#xff0c;要求所需要的衣服一定穿在外面&#xff0c;在操作的时候&#xff0c;可以选择穿上一件衣服或脱下一件衣服&#xff0c;脱下的衣服不…

python判断字典,列表,元组为空的方法。

m1 []m2 ()m3 {}判断他们为空的方法是什么&#xff1f; if m1:非空else:空if not m2: 空 else:非空False,0,,[],{},()都可以视为假

解决 JSP 页面报错 equal symbol expected

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.报错&#xff1a;org.apache.jasper.JasperException: /WEB-INF/jsp/op/settlement/spRateModify.jsp(368,110) equal symbol expecte…