您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 通过showstatus来优化MySQL数据库
1,查看MySQL服务器配置信息Java代码1.mysqlshowvariables;2,查看MySQL服务器运行的各种状态值Java代码1.mysqlshowglobalstatus;3,慢查询Java代码1.mysqlshowvariableslike'%slow%';2.+------------------+-------+3.|Variable_name|Value|4.+------------------+-------+5.|log_slow_queries|OFF|6.|slow_launch_time|2|7.+------------------+-------+8.mysqlshowglobalstatuslike'%slow%';9.+---------------------+-------+10.|Variable_name|Value|11.+---------------------+-------+12.|Slow_launch_threads|0|13.|Slow_queries|279|14.+---------------------+-------+配置中关闭了记录慢查询(最好是打开,方便优化),超过2秒即为慢查询,一共有279条慢查询4,连接数Java代码1.mysqlshowvariableslike'max_connections';2.+-----------------+-------+3.|Variable_name|Value|4.+-----------------+-------+5.|max_connections|500|6.+-----------------+-------+7.8.mysqlshowglobalstatuslike'max_used_connections';9.+----------------------+-------+10.|Variable_name|Value|11.+----------------------+-------+12.|Max_used_connections|498|13.+----------------------+-------+设置的最大连接数是500,而响应的连接数是498max_used_connections/max_connections*100%=99.6%(理想值≈85%)5,key_buffer_sizekey_buffer_size是对MyISAM表性能影响最大的一个参数,不过数据库中多为InnodbJava代码1.mysqlshowvariableslike'key_buffer_size';2.+-----------------+----------+3.|Variable_name|Value|4.+-----------------+----------+5.|key_buffer_size|67108864|6.+-----------------+----------+7.8.mysqlshowglobalstatuslike'key_read%';9.+-------------------+----------+10.|Variable_name|Value|11.+-------------------+----------+12.|Key_read_requests|25629497|13.|Key_reads|66071|14.+-------------------+----------+一共有25629497个索引读取请求,有66071个请求在内存中没有找到直接从硬盘读取索引,计算索引未命中缓存的概率:key_cache_miss_rate=Key_reads/Key_read_requests*100%=0.27%需要适当加大key_buffer_sizeJava代码1.mysqlshowglobalstatuslike'key_blocks_u%';2.+-------------------+-------+3.|Variable_name|Value|4.+-------------------+-------+5.|Key_blocks_unused|10285|6.|Key_blocks_used|47705|7.+-------------------+-------+Key_blocks_unused表示未使用的缓存簇(blocks)数,Key_blocks_used表示曾经用到的最大的blocks数Key_blocks_used/(Key_blocks_unused+Key_blocks_used)*100%≈18%(理想值≈80%)6,临时表Java代码1.mysqlshowglobalstatuslike'created_tmp%';2.+-------------------------+---------+3.|Variable_name|Value|4.+-------------------------+---------+5.|Created_tmp_disk_tables|4184337|6.|Created_tmp_files|4124|7.|Created_tmp_tables|4215028|8.+-------------------------+---------+每次创建临时表,Created_tmp_tables增加,如果是在磁盘上创建临时表,Created_tmp_disk_tables也增加,Created_tmp_files表示MySQL服务创建的临时文件文件数:Created_tmp_disk_tables/Created_tmp_tables*100%=99%(理想值=25%)Java代码1.mysqlshowvariableswhereVariable_namein('tmp_table_size','max_heap_table_size');2.+---------------------+-----------+3.|Variable_name|Value|4.+---------------------+-----------+5.|max_heap_table_size|134217728|6.|tmp_table_size|134217728|7.+---------------------+-----------+需要增加tmp_table_size7,opentable的情况Java代码1.mysqlshowglobalstatuslike'open%tables%';2.+---------------+-------+3.|Variable_name|Value|4.+---------------+-------+5.|Open_tables|1024|6.|Opened_tables|1465|7.+---------------+-------+Open_tables表示打开表的数量,Opened_tables表示打开过的表数量,如果Opened_tables数量过大,说明配置中table_cache(5.1.3之后这个值叫做table_open_cache)值可能太小,我们查询一下服务器table_cache值Java代码1.mysqlshowvariableslike'table_cache';2.+---------------+-------+3.|Variable_name|Value|4.+---------------+-------+5.|table_cache|1024|6.+---------------+-------+Open_tables/Opened_tables*100%=69%理想值(=85%)Open_tables/table_cache*100%=100%理想值(=95%)8,进程使用情况Java代码1.mysqlshowglobalstatuslike'Thread%';2.+-------------------+-------+3.|Variable_name|Value|4.+-------------------+-------+5.|Threads_cached|31|6.|Threads_connected|239|7.|Threads_created|2914|8.|Threads_running|4|9.+-------------------+-------+如果我们在MySQL服务器配置文件中设置了thread_cache_size,当客户端断开之后,服务器处理此客户的线程将会缓存起来以响应下一个客户而不是销毁(前提是缓存数未达上限)。Threads_created表示创建过的线程数,如果发现Threads_created值过大的话,表明MySQL服务器一直在创建线程,这也是比较耗资源,可以适当增加配置文件中thread_cache_size值,查询服务器thread_cache_size配置:Java代码1.mysqlshowvariableslike'thread_cache_size';2.+-------------------+-------+3.|Variable_name|Value|4.+-------------------+-------+5.|thread_cache_size|32|6.+-------------------+-------+9,查询缓存(querycache)Java代码1.mysqlshowglobalstatuslike'qcache%';2.+-------------------------+----------+3.|Variable_name|Value|4.+-------------------------+----------+5.|Qcache_free_blocks|2226|6.|Qcache_free_memory|10794944|7.|Qcache_hits|5385458|8.|Qcache_inserts|1806301|9.|Qcache_lowmem_prunes|433101|10.|Qcache_not_cached|4429464|11.|Qcache_queries_in_cache|7168|12.|Qcache_total_blocks|16820|13.+-------------------------+----------+Qcache_free_blocks:缓存中相邻内存块的个数。数目大说明可能有碎片。FLUSHQUERYCACHE会对缓存中的碎片进行整理,从而得到一个空闲块。Qcache_free_memory:缓存中的空闲内存。Qcache_hits:每次查询在缓存中命中时就增大Qcache_inserts:每次插入一个查询时就增大。命中次数除以插入次数就是不中比率。Qcache_lowmem_prunes:缓存出现内存不足并且必须要进行清理以便为更多查询提供空间的次数。这个数字最好长时间来看;如果这个数字在不断增长,就表示可能碎片非常严重,或者内存很少。(上面的free_blocks和free_memory可以告诉您属于哪种情况)Qcache_not_cached:不适合进行缓存的查询的数量,通常是由于这些查询不是SELECT语句或者用了now()之类的函数。Qcache_queries_in_cache:当前缓存的查询(和响应)的数量。Qcache_total_blocks:缓存中块的数量。我们再查询一下服务器关于query_cache的配置:Java代码1.mysqlshowvariableslike'query_cache%';2.+------
本文标题:通过showstatus来优化MySQL数据库
链接地址:https://www.777doc.com/doc-2007490 .html