mysql 查看innodb版本_MySQL中查看InnoDB状态的一个小技巧

这是学习笔记的第 1742篇文章

ec8f6c726916641df8c5df9ac597726e.png

MySQL中如果要查看InnoDB的状态,如果想看到更完整的信息,毫无疑问就是命令show engine innodb status。

当然还有几类查看的方式,比如information_schema中INNODB_XX的数据字典和新版本中的sys schema,里面是可以提供一些InnoDB不同维度的信息,但是相比show engine innodb status命令的输出,这些结果明显要淡薄许多。

所以相比于命令 show engine innodb status,目前来看似乎没有专门的工具来解读这些信息,比如我希望能他能够转义成json格式,这样我可以在报告中去抓取相应的内容来组织成报告,看起来就一目了然了,如果没有的话,只能自己先做了。

而同时,sys schema是给MySQL开了一个好头,里面的等待事件虽然少而且简陋,但是等待模型是Oracle中久经考验的方法论,所以按照等待模型来做问题的分析是一种非常不错的借鉴思路,毫无疑问,在优化的路上MySQL会越来越完善。 我想不出几个版本,也会有类似awr或者statspack的这样一套工具了。

问一个问题,在没有这些报告工具之前,我们要读取InnoDB的状态毫无疑问是命令的方式来触发,很多时候我们是执行了命令,然后上下翻屏幕去找相应的信息,很显然这些内容我们没有保留下来,show engine innodb status的结果不是实时的,如果要想查看上一次的命令结果该怎么办呢,有一个小技巧。

我们是通过mysqld的进程号在系统层面来找到句柄的信息。

首先查看mysqld的进程号。

# ps -ef|grep mysqld|grep -v grep

root      2122     1  0 19:54 ?        00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/dev01.pid

mysql     2382  2122  0 19:54 ?        00:00:13 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mysqld.log --pid-file=/data/mysql/dev01.pid --socket=/tmp/mysql.sock

在这里就是找mysqld的进程号,即2382

在操作系统层面我们来看下句柄的信息,可以看到输出了一个列表。

# ll /proc/2382/fd|grep deleted

lrwx------ 1 root root 64 Sep 12 23:29 11 -> /tmp/ibq9KpG4 (deleted)

lrwx------ 1 root root 64 Sep 12 23:29 4 -> /tmp/ibuuKHaH (deleted)

lrwx------ 1 root root 64 Sep 12 23:29 5 -> /tmp/ibET4ZCa (deleted)

lrwx------ 1 root root 64 Sep 12 23:29 6 -> /tmp/ib4nyi5D (deleted)

lrwx------ 1 root root 64 Sep 12 23:29 7 -> /tmp/ib1XzG2A (deleted)

在这么多的文件里,我们看到文件都是序号,会映射到指定目录下面。

那么那个文件才是我们要找的呢?我们通过lsof来间接印证。

可以看到会根据lsof的方式来输出句柄信息。

# lsof -c mysqld|grep deleted

mysqld    2382 mysql    4u   REG              253,0      3942 1576539 /tmp/ibuuKHaH (deleted)

mysqld    2382 mysql    5u   REG              253,0         0 1576540 /tmp/ibET4ZCa (deleted)

mysqld    2382 mysql    6u   REG              253,0         0 1576541 /tmp/ib4nyi5D (deleted)

mysqld    2382 mysql    7u   REG              253,0         0 1576542 /tmp/ib1XzG2A (deleted)

mysqld    2382 mysql   11u   REG              253,0         0 1576543 /tmp/ibq9KpG4 (deleted)

需要注意第7列,这是唯一一个句柄内容非空的,在这个场景里就是show engine innodb status的输出结果,即文件/tmp/ibuuKHaH映射到的4号文件。

# ll 4

lrwx------ 1 root root 64 Sep 12 23:29 4 -> /tmp/ibuuKHaH (deleted)

如果要查看命令的完整内容,则需要查看的就是4号文件。

# cat 4

=====================================

2018-09-12 23:28:26 0x7f8e7bf74700 INNODB MONITOR OUTPUT

=====================================

Per second averages calculated from the last 22 seconds

-----------------

BACKGROUND THREAD

-----------------

srv_master_thread loops: 6 srv_active, 0 srv_shutdown, 12793 srv_idle

srv_master_thread log flush and writes: 12799

。。。。

后续需要基于这些内容来做更多的定制和解析。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值