如何从一个大项目中,迅速的定位执行速度慢的语句.
首先我们了解mysql数据库的一些运行状态如何查询(比如想知道当前mysql运行的时间/一共执行了多少次select/update/delete.. / 当前连接)
show status
常用的:
show status like ‘uptime’; 启用了多长时间
show stauts like ‘com_select’ show stauts like ‘com_insert’ ...类推 update delete
show [session|global] status like .... 如果你不写 [session|global] 默认是session 会话,指取出当前窗口的执行,如果你想看所有(从mysql 启动到现在,则应该global)
show status like ‘connections’;
//显示慢查询次数
show status like ‘slow_queries’;
2.1如何去定位慢查询
默认情况下,mysql认为10秒才是一个慢查询,
show variables like ‘long_query_time’ ; //可以显示当前慢查询时间
setlong_query_time=1 ;//可以修改慢查询时间
这时我们如果出现一条语句执行时间超过1秒中,就会统计到.
如果把慢查询的sql记录到我们的一个日志中
在默认情况下,我们的mysql不会记录慢查询,需要在启动mysql时候,指定记录慢查询才可以
bin\mysqld.exe --safe-mode - -slow-query-log [mysql5.5 可以在my.ini指定]
bin\mysqld.exe –log-slow-queries=d:/abc.log [低版本mysql5.0可以在my.ini指定]
先关闭mysql,再启动, 如果启用了慢查询日志,默认把这个文件放在
my.ini 文件中记录的位置
#Path to the database root
datadir="C:/Documents and Settings/AllUsers/Application Data/MySQL/MySQL Server 5.5/Data/"