您当前的位置:首页 > 电脑百科 > 数据库 > MYSQL

详解mysql数据库一键查看锁信息(开启InnoDB监控)

时间:2019-09-27 09:43:51  来源:  作者:

概述

很多时候在MySQL处理死锁问题时,由于show engine innodb status输出来的死锁日志无任务事务上下文,并不能很好地诊断相关事务所持有的所有锁信息,包括:锁个数、锁类型等。

下面介绍如何开启锁监控来查看到更详细的事务锁占用情况。

详解mysql数据库一键查看锁信息(开启InnoDB监控)

 


1、INNODB监控机制(InnoDB Monitors)

mysql提供一套INNODB监控机制,用于周期性(每15钞)输出INNODB运行相关状态(INNODB运行状态、表空间状态、表状态等)到mysqld服务标准错误输出。另外,INNODB标准监控和锁监控,也可以通过命令:show engine innodb status输出到控制台。

此部分内容一般输出到mysql error log里。

官方说明:

When you enable InnoDB monitors for periodic output, InnoDB writes their output to the mysqld server standard error output (stderr). In this case, no output is sent to clients. When switched on, InnoDB monitors print data about every 15 seconds. Server output usually is directed to the error log (see Section 5.4.2, “The Error Log”). This data is useful in performance tuning. On windows, start the server from a command prompt in a console window with the --console option if you want to direct the output to the window rather than to the error log.

该类监控机制默认是关闭状态,分析问题需要查看监控日志时再开启。

建议分析问题后,将监控关闭;否则,每15秒输出一次INNODB运行状态信息到错误日志,会使用日志变得特别大。


2、开启状态监控

INNODB监控机制目前主要提供如下四类监控:

标准监控(Standard InnoDB Monitor):监视活动事务持有的表锁、行锁;事务锁等待;线程信号量等待;文件IO请求;buffer pool统计信息;InnoDB主线程purge和change buffer merge活动。

锁监控(InnoDB Lock Monitor):提供额外的锁信息。

表空间监控(InnoDB Tablespace Monitor):显示共享表空间中的文件段以及表空间数据结构配置验证。

表监控(InnoDB Table Monitor):显示内部数据字典的内容。

关于四类监控开启与关闭方法,主要是通过创建系统可识读的特殊表名来完成。特别地,除表空间(InnoDB Tablespace Monitor)监控和表监控(InnoDB Table Monitor)外,其他二类监控还可能通过修改系统参数来完成。

基于系统表的方式和基于系统参数的方式,只要使用二者其中一种方式开启监控即可。


2.1. 标准监控(Standard InnoDB Monitor)

2.1.1、基于系统表:innodb_monitor

mysql会通过检查是否存在名为innodb_monitor的数据表,来判断是否开启标准监控,并打印日志。

需要开启,则创建表;需要关闭,则删除表。

CREATE TABLE innodb_monitor (a INT) ENGINE=INNODB;
DROP TABLE innodb_monitor;

2.1.2、基于系统参数:innodb_status_output

详解mysql数据库一键查看锁信息(开启InnoDB监控)

 

自mysql 5.6.16版本之后,可以通过设置系统参数(innodb_status_output)的方式开启或者关闭标准监控。

set GLOBAL innodb_status_output=ON;
set GLOBAL innodb_status_output=OFF;

2.2. 开启锁监控(InnoDB Lock Monitor)

2.2.1、基于系统表:innodb_lock_monitor

mysql会通过检查是否存在名为innodb_lock_monitor的数据表,来判断是否开启锁监控,并打印日志。

需要开启,则创建表;需要关闭,则删除表。

CREATE TABLE innodb_lock_monitor (a INT) ENGINE=INNODB;
DROP TABLE innodb_lock_monitor;
详解mysql数据库一键查看锁信息(开启InnoDB监控)

 

2.2.2、基于系统参数:innodb_status_output_locks

自mysql 5.6.16版本之后,可以通过设置系统参数(innodb_status_output_locks)的方式开启或者关闭标准监控。

--前提需要开启 innodb_status_output
set GLOBAL innodb_status_output=ON;
set GLOBAL innodb_status_output_locks=ON;
set GLOBAL innodb_status_output_locks=OFF;

2.3. 开启表空间监控(InnoDB Tablespace Monitor)

基于系统表:innodb_tablespace_monitor

mysql会通过检查是否存在名为innodb_tablespace_monitor的数据表,来判断是否开启表空间监控,并打印日志。

需要开启,则创建表;需要关闭,则删除表。

CREATE TABLE innodb_tablespace_monitor (a INT) ENGINE=INNODB;
DROP TABLE innodb_tablespace_monitor;

注:表空间监控暂不支持通过参数方式配置,并且未来会被废弃。

2.4. 开启表监控(InnoDB Table Monitor)

mysql会通过检查是否存在名为innodb_table_monitor的数据表,来判断是否开启表监控,并打印日志。

需要开启,则创建表;需要关闭,则删除表。

CREATE TABLE innodb_table_monitor (a INT) ENGINE=INNODB;
DROP TABLE innodb_table_monitor;

注:表监控暂不支持通过参数方式配置,并且未来会被废弃。


3、注意事宜

3.1. 监控复位

需要特别注意的一点是:mysql服务重启后,需要重启开启相应监控,才会生效。换句话说,服务重启后,之前配置的所有监控都被复位,处于关闭状态。

基于系统表方式开启的监控,在mysql服务重启后,即使表存在,监控也不会生效。需要重启drop表,再create表,才能使监控生效。

基于系统参数方式开启的监控,在mysql服务重启后,相关系统参数值都是OFF。需要重启设置对应的参数,才能使用监控生效。

3.2. 错误日志大小

不在停机或重启情况下,mysql每15秒输出一次INNODB运行状态信息到错误日志。

这会使用日志变得越来越大。建议在需要的时候开启,不需要的时候关闭掉。



Tags:mysql 锁信息   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
概述很多时候在mysql处理死锁问题时,由于show engine innodb status输出来的死锁日志无任务事务上下文,并不能很好地诊断相关事务所持有的所有锁信息,包括:锁个数、锁类型等。下...【详细内容】
2019-09-27  Tags: mysql 锁信息  点击:(318)  评论:(0)  加入收藏
▌简易百科推荐
作者:雷文霆 爱可生华东交付服务部 DBA 成员,主要负责Mysql故障处理及相关技术支持。爱好看书,电影。座右铭,每一个不曾起舞的日子,都是对生命的辜负。 本文来源:原创投稿 *爱可生...【详细内容】
2021-12-24  爱可生    Tags:MySQL   点击:(7)  评论:(0)  加入收藏
生成间隙(gap)锁、临键(next-key)锁的前提条件 是在 RR 隔离级别下。有关Mysql记录锁、间隙(gap)锁、临键锁(next-key)锁的一些理论知识之前有写过,详细内容可以看这篇文章...【详细内容】
2021-12-14  python数据分析    Tags:MySQL记录锁   点击:(18)  评论:(0)  加入收藏
binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二...【详细内容】
2021-12-14  linux上的码农    Tags:mysql   点击:(13)  评论:(0)  加入收藏
为查询优化你的查询 大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查...【详细内容】
2021-12-09  元宇宙iwemeta    Tags:mysql   点击:(15)  评论:(0)  加入收藏
测试的目的和原因,公司有很多程序员,每个程序员对数据库和表结构都有自己的理解。而且每个程序员的理解往往是以效率考虑。既然都是为了效率考虑,那么我就来测试一下究竟哪种使...【详细内容】
2021-12-08  吴彬的分享    Tags:Mysql数据库   点击:(14)  评论:(0)  加入收藏
当你们考虑项目并发的时候,我在部署环境,当你们在纠结使用ArrayList还是LinkedArrayList的时候,我还是在部署环境。所以啊,技术不止境,我在部环境。今天这篇文章缕一下在同一台服...【详细内容】
2021-12-08  秃头码哥    Tags:MySQL数据库   点击:(17)  评论:(0)  加入收藏
对于数据分析来说,MySQL使用最多的是查询,比如对数据进行排序、分组、去重、汇总及字符串匹配等,如果查询的数据涉及多个表,还需要要对表进行连接,本文就来说说MySQL中常用的查询...【详细内容】
2021-12-06  笨鸟学数据分析    Tags:MySQL   点击:(21)  评论:(0)  加入收藏
在学习SQL语句之前,首先需要区分几个概念,我们常说的数据库是指数据库软件,例如MySQL、Oracle、SQL Server等,而本文提到的数据库是指数据库软件中的一个个用于存储数据的容器。...【详细内容】
2021-11-24  笨鸟学数据分析    Tags:SQL语句   点击:(23)  评论:(0)  加入收藏
概述以前参加过一个库存系统,由于其业务复杂性,搞了很多个应用来支撑。这样的话一份库存数据就有可能同时有多个应用来修改库存数据。比如说,有定时任务域xx.cron,和SystemA域...【详细内容】
2021-11-05  Java云海    Tags:分布式锁   点击:(31)  评论:(0)  加入收藏
MySQL的进阶查询 一、 按关键字排序 使用ORDERBY语句来实现排序排序可针对一个或多个字段ASC:升序,默认排序方式 【升序是从小到大】DESC:降序 【降序是从大到小】ORDER BY的...【详细内容】
2021-11-05  Java热点    Tags:SQL语句   点击:(28)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条