专栏首页AustinDatabasesMYSQL show engine innodb status 这么多年,你真的都懂?

MYSQL show engine innodb status 这么多年,你真的都懂?

Show engine innodb status 这个命令估计搞MYSQL的听见这个,第一个反应就是烂大街了。这个命令不会你就快回家吧?

OK 那show engine innodb status 展示了多少信息,这些信息对系统的状态的展示你有什么见解? 什么值能证明什么? 说到这里,估计快回家的就不少了。

作为一个不想回家的人,我这边的赶紧捋一捋这个 ,烂大街的命令。

1 show engine innodb status 到底展示了多少信息

background thread

semaphores

Latest detected Deadlock

transactions

file i/o

insert buffer and adaptive hash index

log

buffer pool and memory

individual buffer pool info

Row operations

本着学习一个东西,的深入的态度,一般的带着问题来学习

问题 1 当看到下面的信息后,第一个反应应该是什么

这条 show engine innodb stauts 是无用的信息,为什么? 因为统计一个信息是需要一部分数据来进行计算和统计的,而 last 0 seconds 说明这样的操作数据不是有效的。这样的情况多见于,操作人员不停的执行命令造成的。

下面的信息是从信号量来说的

这里面涉及了数据库与系统交互的一些信息,例如如果看到 os waits 比较大的情况,并且一直在增长的情况,说明 latch 锁征用的情况比较严重.

latch 锁是内存锁,是在一个小型的内存中保护list 的锁的内存结构。

其中他有几个特点 1 不进行排队的操作 2 一个thread 要获得一个latch,则如果这个latch 被占用则空转CPU 来等待这个锁的释放,如果释放后在下一次空转后,如果能获得latch 则进行下一步操作,如果不能则继续自旋。

os waits ,到底目前自旋了多少次。从这个角度可以看到的信息或推测的信息,是否有异常的SQL 造成latch 加重的情况。

下面的transactions 中,是根据当前的数据库的当前值和历史值来判断当前数据库的 purge 状态 以及 undo 等状态是否有异常。另外例如 history list lenght 中显示的UNDO 中未清理的事务数。

同时他也显示的相关事务的连接的信息,如果连接太多,他可能会清除部分的信息,显示部分的最近的信息。

显示文件IO辅助线程的状态——插入缓冲区线程、日志线程、读线程和写线程。它们分别负责插入缓冲区合并、异步日志刷新、预读和脏缓冲区的刷新。

这一片最主要的信息显示读取请求的平均大小。对于随机IO,这些应该是16K页大小,对于全表扫描或索引扫描提前读取,可以执行这些操作,这可以显著增加平均读取大小,通过avg bytes/read fsyncs/s 等你可以了解到目前的系统的状态,以及数据库与系统之间的交互情况。

显示插入缓冲区和自适应哈希状态。第一行显示插入缓冲区的状态——段大小和空闲列表,以及是否有插入缓冲区的记录。接下来,它将显示在插入缓冲区中执行了多少插入、合并了多少recs以及合并了多少次。合并数与插入数之比在很大程度上是插入缓冲区效率。

其实插入缓存(现在应该叫change buffer),的使用率越高,则越正你添加change buffer 的必要性。change buffer 可以有效利用buffer 将一些与I/O可能频繁交互的操作,在buffer 中进行。

上面这一段是比较重要的信息 ,LOG 信息。

其中通过 log sequence number log flushed up to pages fulushed up to last checkpoint at 等四个参数的信息对比就可以了解到目前系统可能存在的瓶颈或可能的问题。

例如如果未刷新的日志的数量已经占整体的数量的 20% - 30% 以上,你就要考虑你的innodb_log_buffer_size 到底是否需要调整。

从这些信息看,可以了解到总的innodb buffer pool 获得的内存有多少,字典信息的buffer 多少, 以及到底目前innodb buffer pool 中使用了多少内存,以及一个重要的师表buffer hit (其他的数据库也有这样的信息,体现到底目前的内存状态)

最后的 row operations 展示了,一些关键的系统信息,例如从系统启动到现在到底插入了多少行 ,更新了多少行,等 并且以每秒的形式来显示,这些都是可以通过信息提取到监控系统中的。

有的时候知识可能需要一遍遍的进行刷新,每一次的刷新都如果都能获得新的启发或建立更多的关联性,那刷新的时间必然是没有浪费的。

本文分享自微信公众号 - AustinDatabases(AustinDatabases),作者:carol11

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Insert 的性能为什么那么差

    最近发现单位某些系统的的插入性能不是很好,诚然知道物理存储的性能不是很好,在关键系统都在使用SSD 的时代,我们还没有进入SSD的怀抱。但另一个点,为什么有的地...

    AustinDatabases
  • MYSQL 的 程序设计中的 “坑” 一例

    最近ORACLE 12C 的某个BUG 霸占了微信公众号,仔细看了看,其实也还好。每种数据库在上了新版本后都会有问题,其实不光是数据库,每个软件都包含着BUG,...

    AustinDatabases
  • MYSQL 小内存, 大问题

    每种数据库都有自己的管理内存的方法,MYSQL 管理内存(仅仅讨论 INNODB 数据库引擎)的方法大部分都关注在 innodb_buffer_pool_siz...

    AustinDatabases
  • 其实,设计这份工作你能做一辈子吗?

    最初的梦想,会不会消磨殆尽,每日触摸着骨感的现实,会不会连热情也逐渐远去。转行——会不会不时跃上心头,挥之不去。或者这是任何一个行业迷茫从业者的困扰,而对于设计...

    宇相
  • 干货|一次MySQL两千万数据大表的优化过程,三种解决方案

    使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速...

    猿哥
  • HTTP与HTTPS的区别及HTTPS的优缺点

    HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Tran...

    武汉肥猫网络科技有限公司
  • SQL Server 新建 数据库关系图 时弹出警告:此数据库没有有效所有者,因此无法安装数据库关系图支持对象。

    qubianzhong
  • 安卓第一夜 第一个应用

    承接“Java快速教程”,我将开始写安卓相关的文章。 安卓(Android)开发主要使用Java语言。Java语言基础,是安卓开发的第一道门槛。再者,一个好的安...

    Vamei
  • Strider VR推新跑步机解决方案:万向行动平台+Kinect 2传感器

    VRPinea
  • 洛谷P2178 [NOI2015]品酒大会(后缀自动机 线段树)

    显然一个串能更新答案的区间是\([len_{fa_{x}} + 1, len_x]\),方案数就相当于是从\(siz_x\)里面选两个,也就是\(\frac{s...

    attack

扫码关注云+社区

领取腾讯云代金券