使用 show status 了解执行情况
慢查询
mysql> show status like ‘%slow%’;
±--------------------±------+
| Variable_name | Value |
±--------------------±------+
| Slow_launch_threads | 0 |
| Slow_queries | 0 |
±--------------------±------+
Slow_queries显示了当前慢查询的数量,如果慢查询很多,可以通过慢查询日志或者show processlist检查慢查询语句。
链接数
mysql> show status like ‘%max_used_connections%’;
±---------------------±------+
| Variable_name | Value |
±---------------------±------+
| Max_used_connections | 4 |
±---------------------±------+
如果显示的链接数过大,留意当前服务器的并发数,单台服务器是不是已经不堪重负了。一般的,连接数应该为最大链接数的85%左右。
MyISAM问题
mysql> show variables like ‘key_buffer_size’;
±----------------±--------+
| Variable_name | Value |
±----------------±--------+
| key_buffer_size | 8384512 |
±----------------±--------+
1 row in set (0.00 sec)
mysql> show global status like ‘key_read%’;
±------------------±------+
| Variable_name | Value |
±------------------±------+
| Key_read_requests | 436 |
| Key_reads | 6 |
±------------------±------+
2 rows in set (0.00 sec)
key_buffer_size是对myisam引擎影响很大的一个参数(目前mysql不应该再使用myisam引擎了,除了迫不得已的情况)。上面命令可以得出一共有436个索引请求,其中6个请求在内存中没有找到索引,而在硬盘中读取索引。
!PS:一般地myisam的索引是存储在内存当中的,当索引长度大于key_buffer_size的时候,myisam无法从内存中获取索引,这是应该调高key_buffer_size的值。
定位慢查询
用 --log-slow-queries=filename选项启动时 mysqld会写一个long_query_time的日志
show processlist命令可以查看当前mysql县城的状态和锁表等,对一些锁表等进行优化
通过explain分析低效sql执行计划
select_type simple表示没有子查询 表连接等
type
type all <index < range <ref < eq_ref < const,sysytem <null 越来越好
index为索引全扫描
range < <= > >= between等操作
eq_ref 唯一索引