Mysql性能调优 ----》1

当用户报告说你的应用程序太慢。在确定不存在物理系统资源瓶颈之后,就应该把注意力转向MySQL数据库(当用MySQL作为数据库)。优化的顺序:查看慢查询日志,日志里查询超过10秒的说明查询出问题-------->通过explain定位这条语句哪里有问题-------->通过方案对问题点进行优化,如加索引

一、寻找运行缓慢的SQL语句

cmd运行登录mysql,并输入命令:show full processlist;,如下图,显示当前所有数据库线程的运行结果,其中Time是以秒来算的,state代表线程运行的一个状态,info代表正在执行的操作,通过state可以得出当前线程正处于哪个阶段,这里做一个耗时很久的测试,这里对employee表循环50000次插入数据,并观察此时这个线程的状态:

Mysql性能调优 ----》1_第1张图片

在插入过程中执行命令: show full processlist;看出当前线程正处于query end状态,说明此线程正处于一个“异常状态”,实际上此时还在插入中;当出现大量不正常状态的线程,说明这些线程的操作需要优化了。

附上mysql线程状态的说明:http://blog.itpub.net/22664653/viewspace-754715/

Mysql性能调优 ----》1_第2张图片

 二、确认低效查询

1、生成一个查询执行计划(QEP),在执行SQL前,在语句前添加 EXPLAN ,在末尾添加 \G,让结果垂直显示,如图,其中key列显示查询时使用的索引,如果为null,证明该语句需要调优;rows是受影响的行数,这个与查询所需的执行时间是直接相关的;由于这是单表查询,这个语句会被理解为对整个表进行扫描,并返回结果

Mysql性能调优 ----》1_第3张图片

如果指定了主键,在查询的时候索引就是主键了,当前employee表的主键是id,以下是搜索出来的结果:

Mysql性能调优 ----》1_第4张图片

2、常用命令

查看但前表的索引:show index from 表名

查看但前表的结构:show table status like '表名',这里需要注意:不同的引擎,出来的结果是不一样的,例如,如果使用MyISAM、MEMORY、ARCHIVE或者BLACKHOLE存储引擎,那么行的长度和行数都是精确值。如果是InnoDB存储引擎,结果都是估计值,会存在误差,如图:

Mysql性能调优 ----》1_第5张图片

查看当前服务器的内部状态信息,了解各种sql的执行频率:show global/session status,global表示自数据库启用至今,session:(默认)表示当前链接,

如:                             mysql>show status;

          mysql>show global status;

          mysql>show status like "Com_%";

          mysql>show global status like "Com_%";

参数说明:

          Com_select 执行select操作的次数,一次查询值累计加1

          Com_update 执行update操作的次数

          Com_insert 执行insert操作的次数

          Com_delete 执行delete操作的次数

只针对Innodb引擎的:

          InnoDB_rows_read执行select操作的次数

          InnoDB_rows_update执行update操作的次数

          InnoDB_rows_insert执行insert操作的次数

          InnoDB_rows_delete执行delete操作的次数

其他:

          connections链接mysql的数量

          Uptime服务器已经工作的秒数

          Slow_queries慢查询的次数

查看MySql系统变量的当前值:show  global/session variables

 

 

你可能感兴趣的:(MYsql)