mysql> show status like 'Binlog_cache%'; +-----------------------+----------+ | Variable_name | Value | +-----------------------+----------+ | Binlog_cache_disk_use | 15 | | Binlog_cache_use | 95978256 | +-----------------------+----------+ 2 rows in set (0.00 sec)
mysql> show variables like 'binlog_cache_size'; +-------------------+---------+ | Variable_name | Value | +-------------------+---------+
| binlog_cache_size | 1048576 | +-------------------+---------+ 1 row in set (0.00 sec)
Binlog_cache_disk_use表示因为我们binlog_cache_size设计的内存不足导致缓存二进制日志用到了临时文件的次数
Binlog_cache_use 表示用binlog_cache_size缓存的次数
当对应的Binlog_cache_disk_use 值比较大的时候我们可以考虑适当的调高 binlog_cache_size 对应的值
10 Innodb log buffer size的大小设置
mysql> show variables like '%innodb_log_buffer_size%'; +------------------------+---------+ | Variable_name | Value | +------------------------+---------+
| innodb_log_buffer_size | 8388608 | +------------------------+---------+ 1 row in set (0.00 sec)
mysql> show status like 'innodb_log_waits'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | Innodb_log_waits | 0 | +------------------+-------+ 1 row in set (0.00 sec)
innodb_log_buffer_size我设置了8M,应该足够大了;Innodb_log_waits表示因log buffer不足导致等待的次数,如果该值不为0,可以适当增大innodb_log_buffer_size的值。
11 表扫描情况判断
mysql> show global status like 'Handler_read%'; +-----------------------+--------------+ | Variable_name | Value |
+-----------------------+--------------+ | Handler_read_first | 19180695 | | Handler_read_key | 30303690598 | | Handler_read_last | 290721 |
| Handler_read_next | 51169834260 | | Handler_read_prev | 1267528402 | | Handler_read_rnd | 219230406 |
| Handler_read_rnd_next | 344713226172 | +-----------------------+--------------+ 7 rows in set (0.00 sec)
Handler_read_first:使用索引扫描的次数,该值大小说不清系统性能是好是坏 Handler_read_key:通过key进行查询的次数,该值越大证明系统性能越好 Handler_read_next:使用索引进行排序的次数
Handler_read_prev:此选项表明在进行索引扫描时,按照索引倒序从数据文件里取数据的次数,一般就是ORDER BY ... DESC
Handler_read_rnd:该值越大证明系统中有大量的没有使用索引进行排序的操作,或者join时没有使用到index
Handler_read_rnd_next:使用数据文件进行扫描的次数,该值越大证明有大量的全表扫描,或者合理地创建索引,没有很好地利用已经建立好的索引 12 Innodb_buffer_pool_wait_free
mysql> show global status like 'Innodb_buffer_pool_wait_free'; +------------------------------+-------+ | Variable_name | Value |
+------------------------------+-------+
| Innodb_buffer_pool_wait_free | 0 | +------------------------------+-------+ 1 row in set (0.00 sec)
该值不为0表示buffer pool没有空闲的空间了,可能原因是innodb_buffer_pool_size设置太大,可以适当减少该值。
13 join操作信息
mysql> show global status like 'select_full_join'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | Select_full_join | 10403 | +------------------+-------+ 1 row in set (0.00 sec)
该值表示在join操作中没有使用到索引的次数,值很大说明join语句写得很有问题
mysql> show global status like 'select_range'; +---------------+----------+ | Variable_name | Value | +---------------+----------+
| Select_range | 22450380 | +---------------+----------+ 1 row in set (0.00 sec)
该值表示第一个表使用ranges的join数量,该值很大说明join写得没有问题,通常可查看select_full_join和select_range的比值来判断系统中join语句的性能情况
mysql> show global status like 'Select_range_check'; +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | Select_range_check | 0 | +--------------------+-------+ 1 row in set (0.00 sec)
如果该值不为0需要检查表的索引是否合理
14 慢查询
mysql> show global status like 'Slow_queries'; +---------------+--------+
| Variable_name | Value | +---------------+--------+
| Slow_queries | 114111 | +---------------+--------+ 1 row in set (0.00 sec)
该值表示mysql启动以来的慢查询个数,即执行时间超过long_query_time的次数,可根据Slow_queries/uptime的比值判断单位时间内的慢查询个数,进而判断系统的性能。
15表锁信息
mysql> show global status like 'table_lock%'; +-----------------------+------------+ | Variable_name | Value | +-----------------------+------------+
| Table_locks_immediate | 1644917567 | | Table_locks_waited | 53 | +-----------------------+------------+ 2 rows in set (0.00 sec)
这两个值的比值:Table_locks_waited /Table_locks_immediate 趋向于0,如果值比较大则表示系统的锁阻塞情况比较严重