常常遇到这样的问题:数据库访问量很大,想要从SQL方面进行优化。往往开发同学会问:能看到哪些SQL执行比较频繁吗?回道:不能哦,只能看到当前正在运行的SQL和慢日志里记录的SQL。
Mysql提供了两种查询日志,它们可以为我们获取以上信息提供帮助。 这两种查询日志为普通日志(general log)和慢速日志(slow log)。
普通日志(general log)
Geleral log记录了服务器接收到的每一个查询或是命令,无论这些查询或是命令是否正确甚至是否包含语法错误,general log 都会将其记录下来(Mysqld将接收到的语句按照接收的顺序(注意不是执行顺序)写到查询日志文件中。) ,记录的格式为 {Time ,Id ,Command,Argument }。也正因为mysql服务器需要不断地记录日志,开启General log会产生不小的系统开销。为了性能考虑,一般general log不会开启。slow log可以定位一些有性能问题的sql,而general log会记录所有的SQL。mysql5.0版本,如果要开启slow log、general log,需要重启,从MySQL5.1.6版开始,general query log和slow query log开始支持写到文件或者数据库表两种方式,并且日志的开启,输出方式的修改,都可以在Global级别动态修改。
root@(none) 09:40:33>select version();
+————+
| version() |
+————+
| 5.1.37-log |
+————+</