MySQL常用性能突发事件分析命令
-
SHOW PROCESSLIST
当前MySQL数据库的运行的所有线程 -
INNODB_TRX
当前运行的所有事务 -
INNODB_LOCKS
当前出现的锁
select * from information_schema.innodb_locks\G; -
INNODB_LOCK_WAITS
锁等待的对应关系
select * from information_schema.innodb_lock_waits; -
SHOW OPEN TABLES where In_use >0;
当前打开表
查看哪些表在使用中,In_use列表示有多少线程正在使用某张表,Name_locked表示表名是否被锁,这一般发生在Drop或Rename命令操作这张表时。所以这条命令不能帮助解答我们常见的问题:当前某张表是否有死锁,谁拥有表上的这个锁等。
show open tables where in_use > 0; -
SHOW ENGINE INNODB STATUS \G;
Innodb状态具体分析如下:
①.Header
这部分简单的打印,输出的时间,以及自从上次输出的间隔时间。
②.BACKGROUND THREAD
srv_master_thread loops:master线程的循环次数,master线程在每次loop过程中都会sleep,sleep的时间为1秒。而在每次loop的过程中会选择active,shutdown,idle中一种状态执行。master在不停的循环,所以其值是随时间递增的。
srv_master_thread log flush and writes:master线程在后台会定期刷新日志,日志刷新是由参数innodb_flush_log_at_timeout参数控制前后刷新时间差。
③. SEMAPHORES 信号量
OS WAIT ARRAY INFO 操作系统等待数组的信息,它是一个插槽数组,innodb使用了多少次操作系统的等待
保留统计(reservation count)显示了innodb分配插槽的频度
信号计数(signal count) 衡量的是线程通过数组得到信号的频度
RW-shared spins:#这行显示读写的共享锁的计数器
RW-excl spins:#这行显示读写的排他锁的计数器
④. TRANSACTIONS
包含Innodb 事务(transactions)的统计信息,还有当前活动的事务列表。transaction id: 这个ID是一个系统变量随时每次新的transaction产生而增加。
Purge done:正在进行清空(purge)操作的transaction ID。
History list length:记录了undo spaces内unpurged的事务的个数。
⑤. FILE I/O
显示了I/O Helper thread的状态,包括一些统计信息144030 OS file reads:显示了reads, writes, and fsync()调用次数。
0.00 reads/s…… : 显示了每秒的统计信息
备注:“aio”表示“ 异步I/O(asynchronous I/O).”
⑥. INSERT BUFFER AND ADAPTIVE HASH INDEX
Ibuf:insertbuffer的一些信息,包括free list, segment size
Hash table:显示了hash table的一些信息
最后一行显示了每秒进行了多少次hash搜索,以及非hash搜索
⑦. LOG
Log sequence number表示的是redo log buffer中的lsn
Log flushed up to表示的是redo log file中的lsn
Pages flushed up to表示的缓冲池最旧脏页的lsn
Last checkpoint at 指的就是最近一个物理页刷新到磁盘时,它的fil_page_lsn的变量值
⑧. BUFFER POOL AND MEMORY
当前内存使用状态Pages read ahead:显示了每秒线性预读跟随机预读的次数
备注:InnoDB 提供了两种预读的方式,一种是 Linear read ahead,由参数innodb_read_ahead_threshold控制,当你连续读取一个 extent 的 threshold 个 page 的时候,会触发下一个 extent 64个page的预读。另外一种是Random read-ahead,由参数innodb_random_read_ahead控制,当你连续读取设定的数量的page后,会触发读取这个extent的剩余page。InnoDB 的预读功能是使用后台线程异步完成。
⑨. ROW OPERATIONS
0 queries inside InnoDB, 0 queries in queue:显示了有多少线程在Innodb内核
read views open inside InnoDB:显示了有多少read view被打开了,一个read view是一致性保证的MVCC “snapshot”
备注:innodb多版本并发(MVCC)通过read view来确定一致性读时的数据库snapshot, innodb的read view确定一条记录能否看到,在RC隔离级别下,是每个SELECT都会获取的read view;在RR隔离级别下,则是当事务中的第一个SELECT请求才创建read view; -
SHOW STATUS LIKE ‘innodb_row_lock_%’;
查看当前锁性能状态Innodb_row_lock_current_waits:当前等待锁的数量
Innodb_row_lock_time:系统启动到现在、锁定的总时间长度
Innodb_row_lock_time_avg:每次平均锁定的时间
Innodb_row_lock_time_max:最长一次锁定时间
Innodb_row_lock_waits:系统启动到现在、总共锁定次数