InnoDB监视器提供有关InnoDB内部状态的信息。 这些信息对于性能调优很是有用。其实所谓的监视器,就是 show engine innodb status 命令。数据库
有两种类型的InnoDB监视器:数据结构
1. 标准InnoDB监视器(The standard InnoDB Monitor)显示如下类型的信息:并发
2. InnoDB锁定监视器(The InnoDB Lock Monitor)将额外的锁信息做为标准InnoDB监视器输出的一部分进行打印。性能
开启 standard InnoDB Monitor (须要PROCESS权限)spa
> 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;
锁监视器与标准监视器基本相同,只是它包含了附加的锁信息(lock information)。code
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 内部数据字典的信息。orm
输出信息的某些注意点:
若是 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 量。 blog