此文已由作者温正湖授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验。
MySQL慢日志(slow log)是MySQL DBA及其他开发、运维人员需经常关注的一类信息。使用慢日志可找出执行时间较长或未走索引等SQL语句,为进行系统调优提供依据。本文结合线上案例分析如何正确设置MySQL慢日志参数和使用慢日志功能,并介绍网易云RDS对MySQL慢日志功能增强。
MySQL参数组功能
网易云RDS实例提供了参数组管理功能,可通过参数管理界面查看绝大部分常用的MySQL系统参数,用户可以了解当前运行值和建议值,如下所示:
用户还可通过参数管理页面对所列的参数进行修改,点击“修改参数”按钮在线设置,点击“保存修改”即可一键完成MySQL主从节点的参数修改,如下图:
查看参数管理界面不难发现,与慢查询相关的参数较多,这些参数是如何起作用的呢,相互关系又是如何,满足什么条件的SQL语句才会记录到慢日志中?只有了解了这些才能更好地利用慢日志进行系统调优和问题定位。我们以一个线上案例为依托来介绍如何正确配置慢日志参数:用户报告他们使用的多个RDS 5.7版本实例慢日志异常,明明执行了一分多钟的SQL语句,却没有记录到慢日志中。还提供了用于复现的SQL语句。
慢日志参数正确配置姿势
首先,我们需确认该实例是否开启了慢日志功能,默认情况下,MySQL慢日志功能是关闭的。慢日志开关参数为slow_query_log,可在mysqld启动命令行或配置文件中显式指定,若指定slow_query_log=1或不指定值,则表示开启慢日志,赋值为0表示关闭。用户可以在运行时动态开启和关闭。网易云RDS实例默认开启慢日志功能,我们确认了该用户未关闭实例的慢日志开关。
接下来,需确认慢日志记录位置,MySQL使用log_output参数指定以文件(FILE)还是表(TABLE)的方式来保存慢日志,需要强调的是,仅指定log_output而将slow_query_log置为0并不会记录慢日志ÿ