查看锁信息(开启InnoDB监控)

当前mysql版本:5.6.21

一、背景

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

于是,需要能查看到更详细的事务锁占用情况。

二、INNODB监控机制(InnoDB Monitors)

mysql提供一套INNODB监控机制,用于周期性(每15钞)输出INNODB运行相关状态(INNODB运行状态、表空间状态、表状态等)到mysqld服务标准错误输出。另外,INNODB标准监控和锁监控,也可以通过命令:show engine innodb status输出到控制台。
此部分内容一般输出到mysql error log里(查找日志位置,参见“补充知识”)。

官方说明(详见参考文档1)如下:


1

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运行状态信息到错误日志,会使用日志变得特别大。

三、开启状态监控

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)外,其他二类监控还可能通过修改系统参数来完成。
基于系统表的方式和基于系统参数的方式,只要使用二者其中一种方式开启监控即可。

1. 标准监控(Standard InnoDB Monitor)

基于系统表:innodb_monitor

mysql会通过检查是否存在名为innodb_monitor的数据表,来判断是否开启标准监控,并打印日志。
需要开启,则创建表;需要关闭,则删除表。


1

2


CREATE TABLE innodb_monitor (a INT) ENGINE=INNODB;

DROP TABLE innodb_monitor;

基于系统参数:innodb_status_output

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


1

2


set GLOBAL innodb_status_output=ON;

set GLOBAL innodb_status_output=OFF;

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

基于系统表:innodb_lock_monitor

mysql会通过检查是否存在名为innodb_lock_monitor的数据表,来判断是否开启锁监控,并打印日志。
需要开启,则创建表;需要关闭,则删除表。


1

2


CREATE TABLE innodb_lock_monitor (a INT) ENGINE=INNODB;

DROP TABLE innodb_lock_monitor;

基于系统参数:innodb_status_output_locks

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


1

2

3

4


set GLOBAL innodb_status_output=ON;

set GLOBAL innodb_status_output_locks=ON;

set GLOBAL innodb_status_output_locks=OFF;

:前提需要开启 innodb_status_output

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

基于系统表:innodb_tablespace_monitor

mysql会通过检查是否存在名为innodb_tablespace_monitor的数据表,来判断是否开启表空间监控,并打印日志。
需要开启,则创建表;需要关闭,则删除表。


1

2


CREATE TABLE innodb_tablespace_monitor (a INT) ENGINE=INNODB;

DROP TABLE innodb_tablespace_monitor;

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

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

mysql会通过检查是否存在名为innodb_table_monitor的数据表,来判断是否开启表监控,并打印日志。
需要开启,则创建表;需要关闭,则删除表。


1

2


CREATE TABLE innodb_table_monitor (a INT) ENGINE=INNODB;

DROP TABLE innodb_table_monitor;

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

四、注意事宜

1. 监控复位

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

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

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

2. 错误日志大小

不在停机或重启情况下,mysql每15秒输出一次INNODB运行状态信息到错误日志。
这会使用日志变得越来越大。建议在需要的时候开启,不需要的时候关闭掉。

3. 基于表方式将来会被废弃

基于表方式将来会被废弃,使用基于系统参数的方式开启。

Use INFORMATION_SCHEMA or PERFORMANCE_SCHEMA tables or SET GLOBAL innodb_status_output=ON.

4. 基于表方式无关表结构及内容

基于表方式,mysql只检验表名被创建,则开启监控。
至于,表创建到哪个数据库、表具体的数据结构、表里的内容都不关心,不会对监控开启有任何影响。

5. 日志状态输出时间

虽说状态日志是每15秒周期性输出一次,但是由于状态收集与输出也会占用一些时间,特别是表空间日志(INNODB TABLE MONITOR OUTPUT)和表日志(INNODB TABLESPACE MONITOR OUTPUT)。因此,两次日志时间并不是规律的间隔15秒,而是自上次输出后15秒加上收集输出监控日志的时间。

五、补充知识

1. 查看错误日志输出位置


1

2

3

4

5

6


mysql [email protected]:test> select @@log_error;

+----------------------------------------+

| @@log_error |

|----------------------------------------|

| /usr/local/mysql/data/mysqld.local.err |

+----------------------------------------+

2. 查看历史日志开启状态与输出位置


1

2

3

4

5

6

7


mysql [email protected]:test> show VARIABLES like ‘general%‘;

+------------------+---------------------------------------+

| Variable_name | Value |

|------------------+---------------------------------------|

| general_log | ON |

| general_log_file | /usr/local/mysql/data/yerba-buena.log |

+------------------+---------------------------------------+

3. 监控日志解读

详见参考文档2及参考文档5

六、参考文档

    1. Enabling InnoDB Monitors
    2. InnoDB Standard Monitor and Lock Monitor Output
    3. How to debug InnoDB lock waits
    4. How to find out who is locking a table in MySQL
    5. InnoDB Monitor
    6. INNODB监控开关

原文地址:https://www.cnblogs.com/wangdong/p/9235249.html

时间: 2024-11-02 22:12:37

查看锁信息(开启InnoDB监控)的相关文章

sqlserver检测死锁;杀死锁和进程;查看锁信息

http://blog.sina.com.cn/s/blog_9dcdd2020101nf4v.html sqlserver检测死锁;杀死锁和进程;查看锁信息 (2013-06-09 16:43:03)转载▼ 标签: sql 检测死锁 杀死锁和进程 查看锁信息 it 分类: mssql --检测死锁 --如果发生死锁了,我们怎么去检测具体发生死锁的是哪条SQL语句或存储过程? --这时我们可以使用以下存储过程来检测,就可以查出引起死锁的进程和SQL语句.SQL Server自带的系统存储过程sp

SQL Server 2008中查看锁信息

;with tran_locks as(select resource_type,db_name(resource_database_id) as db_name,resource_description   ,object_name(resource_associated_entity_id,resource_database_id) as object_name,request_mode,request_type,request_status,request_session_id   fro

sqlserver锁机制详解(sqlserver查看锁)

简介 在SQL Server中,每一个查询都会找到最短路径实现自己的目标.如果数据库只接受一个连接一次只执行一个查询.那么查询当然是要多快好省的完成工作.但对于 大多数数据库来说是需要同时处理多个查询的.这些查询并不会像绅士那样排队等待执行,而是会找最短的路径执行.因此,就像十字路口需要一个红绿灯那 样,SQL Server也需要一个红绿灯来告诉查询:什么时候走,什么时候不可以走.这个红绿灯就是锁. 图1.查询可不会像绅士们那样按照次序进行排队 为什么需要锁 在开始谈锁之前,首先要简单了解一下事

insert buffer/change buffer double write buffer,双写 adaptive hash index(AHI) innodb的crash recovery innodb重要参数 innodb监控

https://yq.aliyun.com/articles/41000 http://blog.itpub.net/22664653/viewspace-1163838/ http://www.cnblogs.com/MYSQLZOUQI/p/5602206.html https://yq.aliyun.com/articles/222 主从不一致性的3种可能原因1.binlog format是不是row2.session级关闭binlog3.人工在slave修改数据 set sql_log_

人人都是 DBA(XV)锁信息收集脚本汇编

什么?有个 SQL 执行了 8 秒! 哪里出了问题?臣妾不知道啊,得找 DBA 啊. DBA 人呢?离职了!!擦!!! 程序员在无处寻求帮助时,就得想办法自救,努力让自己变成 "伪 DBA". 索引 查看 Session 对应的 Thread 和当前 Command 侦测 Deadlocking 或阻塞问题 查看 Task 执行中哪个 Wait Type 最慢 查看当前 Task 的运行情况 查看 Lock Waits 状态 查看 Latch 等待情况 将所有 wait_type 按照

【mysql】Mysql 5.1.46开启InnoDB引擎

众所周知Mysql5.1.46默认引擎为Myisam,那如何开启InnoDB引擎呢?本人在安装数据库并开启InnoDB引擎时出现不少错误,先一一列举仅供大家参考. 1. 系统环境 系统: CentOS release 5.4 (Final) 软件: MySQL-server-community-5.1.46-1.rhel5 MySQL-shared-compat-5.1.37-0.rhel5 MySQL-client-community-5.1.46-1.rhel5 2. 开启InnoDB报错

linux基础之查看硬件信息

一:快速查看 1,查看CPU信息:cat /proc/cpuinfo 或lscpu 或 2,查看板卡信息:cat /proc/pci 3,查看USB设备:cat /proc/bus/usb/devices 4,查看PCI信息:lspci (相比cat /proc/pci更直观) 5,查看内存信息:cat /proc/meminfo  或free -m 6,查看键盘和鼠标:cat /proc/bus/input/devices 7,查看系统硬盘信息和使用情况:fdisk & disk – l &am

Centos查看系统是否开启ipv6,ipv6关闭方法

查看系统是否开启ipv6 a)通过网卡属性查看 命令:ifconfig 注释:有 "inet6 addr:......." 的表示开启了ipv6功能 b)通过内核模块加载信息查看 命令:lsmod | grep ipv6 ipv6关闭方法 在/etc/modprobe.d/dist.conf结尾添加 alias net-pf-10 offalias ipv6 off

查看cpu信息

1概念 物理cpu: 实际Server中插槽上的CPU个数 物理cpu数量,可以数不重复的 physical id 有几个 cpu核心数: 一块CPU上面能处理数据的芯片组的数量 ,就是可以把一个cpu分层几块独立的核心,来处理任务 逻辑cpu 逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 (前提该cpu支持超线程) 逻辑cpu个数的用途就是服务器,可以同时处理任务的数量 2查看cpu信息 liunx的cpu信息在文件/proc/cpuinfo中 vendor id