mysqllocate效率低_Mysql效率优化定位较低sql的两种⽅式关于mysql效率优化⼀般通过以下两种⽅式定位执⾏效率较低的sql语句。
通过慢查询⽇志定位那些执⾏效率较低的 SQL 语句,⽤ --log-slow-queries[=file_name] 选项启动时, mysqld 会 写⼀个包含所有执⾏时间超过 long_query_time 秒的 SQL 语句的⽇志⽂件,通过查看这个⽇志⽂件定位效率较低的 SQL 。
慢查询⽇志在查询结束以后才纪录,所以在应⽤反映执⾏效率出现问题的时候查询慢查询⽇志并不能定位问题,可以使⽤ show processlist 命令查看当前 MySQL 在进⾏的线程,包括线程的状态、是否锁表等,可以实时地查看 SQL 的 执⾏情况,同时对⼀些锁表操作进⾏优化。
下⾯我们举例说明⼀下,如何通过慢查询⽇志定位执⾏效率底的 SQL 语句:
开启慢查询⽇志 , 配置样例:
log-slow-queries
在 myf 配置⽂件中增加上述配置项并重启 mysql 服务,这时 mysql 慢查询功能⽣效。慢查询 ⽇志将写⼊参数 DATADIR (数据⽬录)指定的路径下,默认⽂件名是 host_name-slow.log 。
和错误⽇志、查询⽇志⼀样,慢查询⽇志记录的格式也是纯⽂本,可以被直接读取。下例中演⽰了慢查询⽇志的设置和读取过程。
( 1 )⾸先查询⼀下 long_query_time 的值 。
1234567mysql> show variableslike 'long%';+-----------------+-------+| Variable_name | Value |+-----------------+-------+|
long_query_time | 10 |+-----------------+-------+1 rowin set (0.00 sec)
( 2 )为了⽅便测试,将修改慢查询时间为 5 秒。
mysql> set long_query_time=5;
Query OK, 0 rows affected (0.02 sec)
( 3 )依次执⾏下⾯两个查询语句。
第⼀个查询因为查询时间低于 5 秒⽽不会出现在慢查询⽇志中:
mysql>select count(*)from order2008;+----------+|count(*) |+----------+| 208 |+----------+1 rowin set (0.00
sec)
第⼆个查询因为查询时间⼤于 5 秒⽽应该出现在慢查询⽇志中:
mysql>select count(*)from t_user;+----------+|count(*) |+----------+| 6552961 |+----------+1 rowin set (11.07 sec)
( 4 )查看慢查询⽇志。
[root@localhost mysql]# more localhost-slow.log#Time: 081026 19:46:34#User@Host: root[root] @ localhost []#
Query_time: 11 Lock_time: 0 Rows_sent: 1 Rows_examined: 6552961select count(*)from t_user;
从上⾯⽇志中,可以发现查询时间超过 5 秒的 SQL ,⽽⼩于 5 秒的则没有出现在此⽇志中。
如果慢查询⽇志中记录内容很多,可以使⽤ mysqldumpslow ⼯具( MySQL 客户端安装⾃带)来对慢查询⽇志进⾏分类汇总。下例中对⽇志⽂件 mysql_master-slow.log 进⾏了分类汇总,只显⽰汇总后摘要结果:
[root@mysql_master mysql_data]# mysqldumpslow mysql_master-slow.logReading mysql slow query logfrom
mysql_master-slow.logCount: 2Time=11.00s (22s) Lock=0.00s (0s)Rows=1.0 (2), root[root]@mysql_masterselect
count(N)from t_user;
数据库优化sql语句对于 SQL ⽂本完全⼀致,只是变量不同的语句, mysqldumpslow 将会⾃动视为同⼀个语句进⾏统计,变量值⽤ N 来代替。这个统计结果将⼤⼤增加⽤户阅读慢查询⽇志的效率,并迅速定位系统的 SQL 瓶颈。
注意:慢查询⽇志对于我们发现应⽤中有性能问题的 SQL 很有帮助,建议正常情况下,打开此⽇志并经常查看分析。
以上是给⼤家介绍的Mysql效率优化定位较低sql的两种⽅式 ,希望以上所述对⼤家有所帮助。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。