InnoDB Monitors

InnoDB监视器提供有关InnoDB内部状态的信息。 这些信息对于性能调优非常有用。其实所谓的监视器,就是 show engine innodb status 命令。

InnoDB监视器类型

有两种类型的InnoDB监视器:

1. 标准InnoDB监视器(The standard InnoDB Monitor)显示以下类型的信息:

  • 每个活动事务持有的表和记录锁
  • 事务的锁等待
  • 线程的信号量等待
  • 待处理文件的I/O请求 (Pending file I/O requests)
  • 缓冲池统计信息 (Buffer pool statistics)
  • InnoDB 主线程的 purge buffer 和 insert buffer 归并活动(merge activity)

2. InnoDB锁定监视器(The InnoDB Lock Monitor)将额外的锁信息作为标准InnoDB监视器输出的一部分进行打印。

开启 InnoDB Monitor

开启  standard InnoDB Monitor (需要PROCESS权限)

> set GLOBAL innodb_status_output=ON;

上面的语句可定期写入到标准错误输出(stderr,即error log,大概每15s写一次),你也可以使用 SHOW ENGINE INNODB STATUS 语句直接在客户端获取innodb信息。

而开启 InnoDB Lock Monitor 需要同时打开以下2个参数,它的信息也是随 InnoDB Standard Monitor 的信息一起打印出来:

> set GLOBAL innodb_status_output=ON;
> set GLOBAL innodb_status_output_locks=ON;

InnoDB 标准监视器和锁监视器的输出信息

锁监视器与标准监视器基本相同,只是它包含了附加的锁信息(lock information)。

 

CREATE TABLE 句法只不过是为了通过 MySQL SQL 语法分析而提供给 InnoDB 引擎命令的一种方式:那个被创建的表根本与 InnoDB Monitor 无任何关系。如果你在监视器运行着的状态下关闭数据库,并且你需要再次启动监视器, 那么你不得不在发出一个新的 CREATE TABLE 来启动监视器之前先移除(drop)这个表。
 
与之相类似的,你可以启动 innodb_lock_monitor ,它在某些方面与 innodb_monitor 一致,但是它会显示更多的锁定信息。一个单独的 innodb_tablespace_monitor 将显示在现有表空间内所建立的文件段列表以及可以分配数据结构的有效表空间。从 3.23.44 开始,提供了 innodb_table_monitor ,通过它可以获得 InnoDB 内部数据字典的信息。

 

输出信息的某些注意点:
如果 TRANSACTIONS 部分报告锁定等待(lock waits),那么你的应用程序可能有锁争用(lock contention)。输出信息可以帮助跟踪事务死锁的原因。
SEMAPHORES 部分报告线程等待信号量以及统计出线程需要旋转(spin)或等待(wait)一个互斥(mutex)或 rw-lock 信号量的次数。一个较大的线程等待信号量的次数可能是由于磁盘 I/O 引起,或 InnoDB 内部的争用问题(contention problems)。争用(Contention)可能是由于比较繁重的并发性查询,或操作系统的线程调度的问题。 在这种情形下,可将 innodb_thread_concurrency 设置地小于默认的 8 。
FILE I/O 部分列出了文件 I/O 的等待请求。过大的值就意味着磁盘 I/O 瓶颈。
BUFFER POOL AND MEMORY 部分给出了页面读写的统计。通过这些值可以计算出你的查询通常所需的数据文件 I/O 量。 

 

posted @ 2019-09-30 17:35  daxing  阅读(328)  评论(0编辑  收藏  举报