[笔记] mysql优化前的诊断

不能盲目的做优化,要先找准问题所在,是cpu,内存,io?还是峰值,语句?

一、mysql优化套路

《[笔记] mysql优化前的诊断》

二、相关命令

观察服务器状态

mysql> show status; 或 mysqladmin exts;

观察连接的工作状态

mysql> show processlist;

状态说明:

  • converting HRAP to MyIsAM 把查询结果放在磁盘(取得数据太多)

  • create tmp table 创建临时表(索引需要优化)

  • copying to tmp table to disk 把内存临时表复制到磁盘(索引需要优化,索引字段)

  • locked 被其他查询锁住(事务)

  • logging slow query 记录慢查询

观察具体语句执行

准备:

  1. 检查是否开启profiling

show variables like ‘profiling’;

  1. 开启profiling

set profiling=on;

show profiles;    //显示执行语句的执行信息(含语句query_id)
show profile for query 1; //获取 query_id 为1的语句的执行信息
explain (sql语句) \G;  //解析sql执行计划

三、慢查询日志

mysql> show variables like 'show_query%';  //可以看到是否开启,和日志路径 
mysql> show variables like '%long_query%'; //慢查询临界值,超过该值则记入慢查询

//开启
mysql> set global slow_query_log=1;

四、awk脚本 简便的文本处理工具

mysqladmin -uroot ext|awk 'Queries/{q=$4}/Threads_connected/{c=$4}/Threads_running/{r=$4}END{printf("%d %d %d\n",q,c,r)}'

五、sysbench 测试CPU性能

待续……

    原文作者:waterandair
    原文地址: https://segmentfault.com/a/1190000009724124
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞