1、整理查询缓冲区里的碎片
>flush query cache;
2、查询mysql当前执行的sql语句
show processlist;
3、显示排序的统计的信息
show status like ' sort% ';
如果 sort_merge_passes
很大,就表示需要注意 sort_buffer_size
。例如, sort_buffer_size = 4M
将排序缓冲区设置为 4MB。
4、显示打开表的活动
show status like ' open%tables' ;
variable_name Valus
Open_tables 5000
Opened_tables 195
清单 4 说明目前有 5,000 个表是打开的,有 195 个表需要打开,因为现在缓存中已经没有可用文件描述符了(由于统计信息在前面已经清除了,因此可能会存在 5,000 个打开表中只有 195 个打开记录的情况)。如果 Opened_tables
随着重新运行 SHOW STATUS
命令快速增加,就说明缓存命中率不够。如果 Open_tables
比 table_cache
设置小很多,就说明该值太大了(不过有空间可以增长总不是什么坏事)。例如,使用 table_cache = 5000
可以调整表的缓存。
5、显示线程的统计信息
show status like ' threads%' ;
显示:
variable_name Valus
Threads_cached 4
Threads_connected 88
Threads_created 345
Threads_running 1
此处重要的值是 Threads_created
,每次 mysqld
需要创建一个新线程时,这个值都会增加。如果这个数字在连续执行 SHOW STATUS
命令时快速增加,就应该尝试增大线程缓存。例如,可以在 my.cnf 中使用 thread_cache = 40
来实现此目的。
6 、显示关键字的效率的问题
show status like ' %key_read % ' ;
显示:
variable_name Valus
Key_reads
代表命中磁盘的请求个数, Key_read_requests
是总数。命中磁盘的读请求数除以读请求总数就是不中比率 —— 在本例中每 1,000 个请求,大约有 0.6 个没有命中内存。如果每 1,000 个请求中命中磁盘的数目超过 1 个,就应该考虑增大关键字缓冲区了。例如,key_buffer = 384M
会将缓冲区设置为 384MB。
7、确认临时表的使用
show status like ' created_tem% ';
显示:
variable_name Valus
每次使用临时表都会增大 Created_tmp_tables
;基于磁盘的表也会增大 Created_tmp_disk_tables
。对于这个比率,并没有什么严格的规则,因为这依赖于所涉及的查询。长时间观察 Created_tmp_disk_tables
会显示所创建的磁盘表的比率,您可以确定设置的效率。 tmp_table_size
和 max_heap_table_size
都可以控制临时表的最大大小,因此请确保在 my.cnf 中对这两个值都进行了设置。
8、确认表的扫描比率
show status like ' com_selete ';
显示:
variable_name Valus
Handler_read_rnd_next
/ Com_select
得出了表扫描比率 —— 在本例中是 521:1。如果该值超过 4000,就应该查看 read_buffer_size
,例如 read_buffer_size = 4M
。如果这个数字超过了 8M,就应该与开发人员讨论一下对这些查询进行调优了!