不能盲目的做优化,要先找准问题所在,是cpu,内存,io?还是峰值,语句?
一、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 记录慢查询
观察具体语句执行
准备:
检查是否开启profiling
show variables like ‘profiling’;
开启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性能
待续……