一、大纲图
【Mysql调优.xmind】
二、Mysql调优简写
2.1 性能监控
2.1.1 使用show profile查询剖析工具,可以指定具体的type
此工具默认是禁用的,可以通过服务器变量在会话级别动态的修改:
set profiling=1;
当设置完成之后,在服务器上执行的所有语句,都会测量其耗费的时间和其他一些查询执行状态变更相关的数据。
select * from emp;
在mysql的命令行模式下只能显示两位小数的时间,可以使用如下命令查看具体的执行时间:
show profiles;
执行如下命令可以查看详细的每个步骤的时间:
show profile for query 1;
- type
- all:显示所有性能信息
show profile all for query n
- block io:显示块io操作的次数
show profile block io for query n
- context switches:显示上下文切换次数,被动和主动
show profile context switches for query n
- cpu:显示用户cpu时间、系统cpu时间
show profile cpu for query n
- IPC:显示发送和接受的消息数量
show profile ipc for query n
- Memory:暂未实现
- page faults:显示页错误数量
show profile page faults for query n
- source:显示源码中的函数名称与位置
show profile source for query n
- swaps:显示swap的次数
show profile swaps for query n
show profile 5.x版本可用,高版本已经被performance schema替代。
2.1.2 使用performance schema来更加容易的监控mysql(后续补充)
- MYSQL performance schema详解.md(附件)
2.1.3 使用show processlist查看连接的线程个数,来观察是否有大量线程处于不正常的状态或者其他不正常的特征
- 属性说明
- id表示session id
- user表示操作的用户
- host表示操作的主机
- db表示操作的数据库
- command表示当前状态
- sleep:线程正在等待客户端发送新的请求
- query:线程正在执行查询或正在将结果发送给客户端
- locked:在mysql的服务层,该线程正在等待表锁
- analyzing and statistics:线程正在收集存储引擎的统计信息,并生成查询的执行计划
- Copying to tmp table:线程正在执行查询,并且将其结果集都复制到一个临时表中
- sorting result:线程正在对结果集进行排序
- sending data:线程可能在多个状态之间传送数据,或者在生成结果集或者向客户端返回数据
- info表示详细的sql语句
- time表示相应命令执行时间
- state表示命令执行状态