3.1 性能分析简介
何为性能,所谓性能指的是在一定的负载压力下,在尽量短的时间完成了尽可能多的任务,即为性能。需要纠正以前的一个错误观点,服务器资源利用率不是越低越好。
性能剖析主要包含测量任务所花费的时间;然后对结果进行排序,找到最重要的任务,找出时间花费的原因;针对有问题的地方进行优化。这里一般会遇到两种情况,基于执行时间的分析和基于等待的分析。
3.2 对应用程序进行整体性能剖析
熟悉两款工具,pinpoint和New Relic
3.3 剖析MySQL查询
3.3.1 捕获MySQL查询到日志文件中
慢日志是开销最低,精度最高的测量工具,通过设置long_query_time=0来捕获所有的查询,通过指定—explain输出结果会增加执行计划。而使用pt-query-digest 慢日志文件 是最高效的剖析方式。针对没有服务器的权限无法获取慢日志情况的,可以通过pt-query-digest —proceslist,或者—type=tcpdump来解析并分析查询
3.3.2 剖析单条查询
通过前面的步骤我们已经获取到了较为恶劣的SQL查询,接下来的就是找到这个SQL花费时间长的原因。
方法一:
explain,通过查看索引的使用,表连接顺序,使用临时表或者文件排序等
方法二:
profiling, 通过打开后台开关set profiling=1。show profiles for query 1,查看查询花费的时间点。
下面这段SQL通过时间倒序排列
set @query_id=1;
select state, sum(duration) as total_r,
round(100 * sum(duration)/(select sum(duration) from information_schema.profiling where query_id=@query_id),2) as pct_r,
count(*) as calls
sum(duration)/count(*) as 'r/call'
from information_schema.profiling
where query_id=@query_id
group by state
order by total_r desc;
方法三:
show status,通过查看计数器的变化,实际感知查询产生的变化,特别是句柄计数器,临时文件使用和表计数等
flush status;
select * from ta
show status where variable_name like '%handler%' or variable_name like '%created%'
方式四:
trace,通过trace,能够进一步了解为什么优化器选择A执行计划而不是选择B执行计划,或者知道某个排序使用的排序模式,帮助我们更好地理解优化器行为
set session optimizer_trace="enabled=on";
select * from test_table where a=90000 and b=90000 order by a;
SELECT * FROM information_schema.OPTIMIZER_TRACE\G
TRACE 字段中整个文本大致分为三个过程
准备阶段:对应文本中的 join_preparation
优化阶段:对应文本中的 join_optimization
执行阶段:对应文本中的 join_execution
使用时,重点关注优化阶段和执行阶段。
方法五:
使用peformance schema, 开启该功能,通过直接查询表的方式获得对应的信息。
3.4 常用剖析SQL的手段
1.查看慢日志
pt-query-digest slowl.log
2.使用tcpdum进行监控
针对无服务器慢日志权限的情况下,
获取tcp数据
tcpdump -i eth3 -s 65535 -x -nn -q -tttt port 3306 -c 20000 > 1.dmp
通过pt-query-digest进行分析
pt-query-digest —type tcpdump 1.dmp —limit 10 > report.log
3.通过show processlist查看信息
mysql -uroot -p111111 -e ‘show processlist\G’ | grep State: | sort | uniq -c | sort -rn
4.通过查看MySQL服务器的状态
mysqladmin -uroot -p111111 ext -i1 | awk '
/Queries/{q=$4-qp;qp=$4}
/Threads_connected/{tc=$4}
/Threads_running/{printf "%5d %5d %5d\n", q, tc ,$4}'
5.使用第三方的工具
pt-summary:方便地汇总服务器的状态和配置
pt-mysql-summary:方便地汇总MySQL服务器的状态和配置