性能测试监控数据库,我们可以使用官方提供的MySQL客户端进行监控,也可以通过命令或者SQL来完成监控任务。
MySQL数据库监控工具,可以使用商业工具SQLyog的MySQL客户端,通过GUI方式来管理MySQL。也可以使用另外款商业工具Navicat作为UI来管理MySQL数据库,Navicat Monitor 提供慢查询分析,top线程分析,思索分析等功能。
不管使用商业工具还是直接使用SQL及其它监控命令来监控MySQL,最重要的是需要知道监控哪些指标?这些指标代表什么意思?
MySQL常见的监控项目
SQL:show variables like '%Query_cache%'';
如果Qcache_free_blocks大致等于Qcache_total_blocks/2,则说明碎片非常严重。
如果Qcache_lowmem_prunes的值正在增加,并且有大量的自由块,这意味着碎片导致查询正在被从缓存中永久删除。
缓存碎片率=Qcache_free_blocks/Qcache_total_blocks*100%
如果查询缓存碎片率超过20%,可以用FLUSH QUERY CACHE整理缓存碎片。
缓存利用率=(query_cache_size-Qcachefree_memory)/query_cache size*100%。
如果缓存利用率在 25%以下,说明query_cache_size 设置值过大,可适当减小如果缓存利用率在80%以上而且Qcache_lowmem_prunes>50,说明query_cache_size 可能有点小,要不就是碎片太多。
SQL:show variables like 'thread%';
缓存在 Cache 中的线程数量
SOL:show status like "Connectioas';
SQL:show status like "%thread%%';
SQL:show variables like "key_bufer _ size';
Threads_Cache_Hit=(Connections-Threads_created)/Connections"100%
建议 90%左右甚至更高
key_cache_miss_rate= Key _reads / Key_reed_requests * 100%
1%即每100个索引中有1个在缓存中找不到,要直接从硬盘读取
SQL:show global status like 'key_read%';
建议<0.1%
key_bufier_read_hits=(1-Key_reads/Key_read_requests)*100%
key_buffer_write_hits=(1-Key_wites/Key_write_reguests)*100%
当然是越大越好。SQL:show global status like'key_%'d;
Key_blocks_umused 表示未使用的缓存簇(blocks)数,Key_blocks_used 表示曾经用到的最大的 blocks数,如果缓存都用到了,要么增加key_buffer_size、要么就是过度索引了,把缓存占满了。
比较理想的设置:
Key_blocks_used/(Key_blocks_unused+Key_blocks_used)*100%
≈80%
SQL:show global status like "key_blocks_u%'
max_connections:允许的最大连接数,一般来说值在500~800是比较合适的,SQL:show variables like 'max _connections’;
Max_used_connections:服务器响应的最大连接数
SQL:show global status like "Max_used_connections’;
Max_used_connections/max_connections<=85%
Connections:当前连接数
SQL:show global stafus like *Connections';
max_user_connections:每个用户允许的最大连接数;
是针对单个用户的连接限制,不常用。
badklog:类似于线程队列,当无法响应请求时,就让线程排队,这个值就是队列长度。
SQL:show variables like "back_log'越小越好。
max_connect_error:默认值为10,如果受信账号错误连接次数达到10,则自动堵塞,需要 fush hosts 来解除。
SQL:show global status like 'created_tmp%',临时表比较大无法在内存中完成时就不得不使用磁盘文件。如果Createdtmp_tables非常大,则可能是系统中排序操作过多,或者是表连接方式不是很优化。如果 Created_tmp_disk_tables与Created_tmp_tables 的占比过高,如超过10%,则需要考虑 tmp_table_size这个系统参数是否设置得足够大。当然,如果系统内存有限,也就没有太好的解决办法了。
SQL:show variables where Variable_name in ('tmp_table_size','max_heap _tablesize');
当临时表空间小于 max_heap_table_size时,才能全放入内存。
SQL:show global status like "handler_read%';
show global status like 'com select';
表扫描率=Handler_read_rnd_next/Com_select
如果表扫描率超过4000,说明进行了太多表扫描,很有可能索引没有建好增加read_bufer_size值会有一些好处,但最好不要超过 8MB。
阅读后若有收获,不吝关注,分享,在看等操作!!!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。