Mysql实例mysql优化之定位效率较低的SQL
《Mysql实例mysql优化之定位效率较低的SQL》要点: MYSQL实例一般通过以下两种方式定位执行效率较低的 SQL 语句. MYSQL实例通过慢查询日志定位那些执行效率较低的 SQL 语句,用 --log-slow-queries[=file_name] 选项启动时,mysqld 会 写一个包含所有执行时间超过 long_query_time 秒的 SQL 语句的日志文件,通过查看这个日志文件定位效率较低的 SQL . MYSQL实例慢查询日志在查询结束以后才纪录,所以在应用反映执行效率出现问题的时候查询慢查询日志并不能定位问题,可以使用 show processlist 命令查看当前 MySQL 在进行的线程,包括线程的状态、是否锁表等,可以实时地查看 SQL 的 执行情况,同时对一些锁表操作进行优化. MYSQL实例下面我们举例说明一下,如何通过慢查询日志定位执行效率底的 SQL 语句: log-slow-queries MYSQL实例在 my.cnf 配置文件中增加上述配置项并重启 mysql 服务,这时 mysql 慢查询功能生效.慢查询 日志将写入参数 DATADIR (数据目录)指定的路径下,默认文件名是 host_name-slow.log . MYSQL实例下例中演示了慢查询日志的设置和读取过程. +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | long_query_time | 10 | +-----------------+-------+ 1 row in set (0.00 sec) MYSQL实例2,为了方便测试,将修改慢查询时间为 5 秒. Query OK,0 rows affected (0.02 sec) MYSQL实例3,依次执行下面两个查询语句. +----------+ | count(*) | +----------+ | 208 | +----------+ 1 row in set (0.00 sec) ? MYSQL实例第二个查询因为查询时间大于 5 秒而应该出现在慢查询日志中: +----------+ | count(*) | +----------+ | 6552961 | +----------+ 1 row in set (11.07 sec) MYSQL实例4,查看慢查询日志. # Time: 081026 19:46:34 # User@Host: root[root] @ localhost [] # Query_time: 11 Lock_time: 0 Rows_sent: 1 Rows_examined: 6552961 select count(*) from t_user; ? MYSQL实例从上面日志中,可以发现查询时间超过 5 秒的 SQL,而小于 5 秒的则没有出现在此日志中. MYSQL实例如果慢查询日志中记录内容很多,可以使用 mysqldumpslow 工具( MySQL 客户端安装自带)来对慢查询日志进行分类汇总. Reading mysql slow query log from mysql_master-slow.log Count: 2 Time=11.00s (22s) Lock=0.00s (0s) Rows=1.0 (2),root[root]@mysql_master select count(N) from t_user; ? MYSQL实例对于 SQL 文本完全一致,只是变量不同的语句,mysqldumpslow 将会自动视为同一个语句进行统计,变量值用 N 来代替. MYSQL实例注意:慢查询日志对于我们发现应用中有性能问题的 SQL 很有帮助,建议正常情况下,打开此日志并经常查看分析. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |