mysql慢查询Slow Query Log和未使用索引(Not Using Indexes)查询配置和使用
mysql的“慢查询”指的是超过了允许的最大查询时间(long_query_time
)的sql语句,而“未使用索引”查询顾名思义就是查询语句没有使用到索引的sql语句。
慢查询配置和使用
在msyqld的启动配置文件或命令行参数中增加以下参数
long_query_time=1
log-slow-queries=/var/mysql/logs/slow.log
long_query_time参数表示的是慢查询的度量时间,单位是秒,最小是1,缺省值是10,凡是执行时间超过long_query_time的sql语句都会记录到慢查询日志中。
--log-slow-queries[=
的file_name参数可选,缺省值是file_name
]
,如果指定了file_name参数的话,mysql就会把慢查询的日志记录到file_name所设定的文件中,如果file_name提供的是一个相对路径,mysql会把日志记录到mysql的data目录中。host_name
-slow.log
未使用索引查询配置和使用
在mysql的启动配置文件或命令行参数中增加--log-queries-not-using-indexes
参数就可以启用未使用索引查询语句了,日志记录的文件就是log-slow-queries对应的文件。
//mysql.conf
log-queries-not-using-indexes
使用案例
mysql的配置如下
[mysqld]
#Slow Query log
long_query_time=3log-slow-queries
# Log queries that is not using indexes
log-queries-not-using-indexes
执行以下命令
select sleep(1);
select sleep(3);
select * from t1;
日志内容如下
D:\MySQL\MySQL Server 5.1\bin\mysqld, Version: 5.1.31-community-log (MySQL Community Server (GPL)). started with:
TCP Port: 3306, Named Pipe: (null)
Time Id Command Argument
# Time: 090625 12:58:09
# User@Host: root[root] @ localhost [127.0.0.1]
# Query_time: 3.000077 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
SET timestamp=1245905889;
select sleep(3);
# Time: 090625 12:58:42
# User@Host: root[root] @ localhost [127.0.0.1]
# Query_time: 0.046876 Lock_time: 0.031251 Rows_sent: 0 Rows_examined: 0
SET timestamp=1245905922;
select * from t1;
其他
除此之外还有一些专门的慢查询日志分析、查询工具,大家可以google以下相关的内容。