剖析服务器负载方法
步骤:
1、捕获MySQL的查询到日志文件,建议使用慢查询日志
2、根据查询日志生产剖析报告,利用pt-query-digest可将日志生成报告。
根据上述方法可以定位到比较慢的sql,进行单条查询问题剖析
剖析单条查询
使用show profile测量语句耗费的时间
得到具体的慢查询后,再剖析单条查询的耗时情况
1.set proiling = 1; --开启query profile
2.执行你的查询
3.show proflies; --查看所有查询对应的profile
4.show profile for query queryId; --根据第三步的queryId获取profile的内容
可得到语句执行的每个步骤的耗时,再针对耗时进行优化。
使用show status查看计数器,它无法提供基于时间的统计
最有用的计数器包括句柄计数器、临时文件和表计数器等。
通过剖析服务器负载方法(本文第一点)获得“坏查询”后可以查看该查询的日志,慢查询日志信息较全。
诊断间歇性问题
判断是单条查询问题还是服务器问题
1、使用show global status,以较高的频率比如一秒一次执行SHOW GLOBAL STATUS,关注每秒查询数、Threads_connected和Threads_running。Threads_connectd是数据库总连接数,和show processlist相等,Threads_running是此时活跃的连接。
2、不停地捕获SHOW PROCESSLIST(和thread_connected相等,用来观察线程状态的,言外之意,就是一个连接有一个线程处理,因为它代表的也是连接数)的输出,来观察是否有大量线程处于不正常的状态或者有其他不正常的特征。
3、使用查询日志,看每秒查询数
建议,使用show golbal status及show processlist,这两者的性能消耗少。
4.查看是不是拿不到锁
SELECT * FROM information_schema.INNODB_TRX