MySql优化执行语句

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_tablestable_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_sizemax_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,就应该与开发人员讨论一下对这些查询进行调优了!




你可能感兴趣的:(MySql优化执行语句)