MySQL 系列 查询日志

MySQL 技术内幕:InnoDB存储引擎

Posted by lichao modified on October 15, 2019

错误日志

  • 记录 MySQL 的启动、运行、关闭过程。
  • 记录所有的错误信息,也记录一些警告信息或正确的信息。
  • 记录有关数据库优化的警告信息

慢查询日志

慢查询会导致 CPU,IOPS,内存消耗过高。当数据库遇到性能瓶颈时,大部分时间都是由于慢查询导致的。 开启慢查询日志,可以让 MySQL 记录下查询超过指定时间的语句,之后运维人员通过定位分析,能够很好的优化数据库性能。

慢查询日志记录的慢查询不仅仅是执行比较慢的 SELECT 语句,还有 INSERT,DELETE,UPDATE,CALL 等 DML 操作,只要超过了指定时间,都可以称为”慢查询”,被记录到慢查询日志中。

默认情况下,慢查询日志是不开启的,只有手动开启了,慢查询才会被记录到慢查询日志中。

开启慢查询日志后,MySQL 数据库会记录运行时间超过 long_query_time 阈值的所有 sql 语句。 打开log_queries_not_using_indexes后,如果执行 SQL 没有使用索引,MySQL 同样会将 SQL 语句记录到慢查询日志文件中。

查询日志

记录了所有对 MySQL 数据库请求的信息,无论这些请求是否得到了正确的执行,默认文件名为:“主机名.log”,记录包括访问拒绝的请求。

查询日志在 MySQL 中被称为 general log(通用日志),查询日志里的内容不要被“查询日志”误导,认为里面只存储 select 语句,其实不然,查询日志里面记录了数据库执行的所有命令,不管语句是否正确,都会被记录,默认文件名为:“主机名.log”,记录包括访问拒绝的请求。具体原因如下:

  • insert 为了避免数据冲突需要首先查询。如果此前插入过数据,当前插入的数据如果跟主键或唯一键的数据重复那肯定会报错
  • update 时也会查询因为更新的时候很可能会更新某一块数据
  • delete 查询,只删除符合条件的数据

因此都会产生日志,在并发操作非常多的场景下,查询信息会非常多,那么如果都记录下来会导致 IO 非常大,影响 MySQL性能,因此如果不是在调试环境下,是不建议开启查询日志功能的。

查询日志的开启有助于帮助我们分析哪些语句执行密集,执行密集的 Select 语句对应的数据是否能够被缓存,同时也可以帮助我们分析问题,所以,我们可以根据自己的实际情况来决定是否开启查询日志。

参考文献

知乎 知乎

MySQL 中Redo与Binlog顺序一致性问题