MySQL慢日志最佳实践

使用场景

慢SQL报表:历史慢SQL趋势分析,对系统进行整体的性能优化

慢SQL实时诊断:实时慢SQL诊断分析,快速定位系统正在进行的性能问题

操作步骤

  1. 登录云数据库 RDS 管理控制台
  2. 在左侧导航栏找到“产品服务”-“数据库”-“云数据库 RDS”
  3. 在页面左上角,选择实例所在地域
  4. 找到目标实例,单击实例ID
  5. 在实例ID下面的导航栏中单击“日志管理”
  6. 在“日志管理”页面可看到“慢SQL报表”和“慢SQL实时诊断”

功能介绍

“慢SQL报表”和“慢SQL实时诊断”,这两个功能均按实例维度展示,且主实例和只读实例分别展示。

慢SQL报表

“慢SQL报表”,展示的是当天零点之前,按天粒度统计的慢SQL。可选“近一周”或“近一月”,时间窗口最长可选择最近3个月,默认显示“近一周”。

趋势图:横轴为天粒度的时间,纵轴为慢SQL个数。

如下图所示:

当点击每天对应的慢SQL圆点时,默认显示当天的“慢SQL统计”信息,也可以“下载明细”来获取当天的慢SQL明细。

其中,“慢SQL统计”,按执行次数倒叙排序;“下载明细”,按执行时间排序。

慢SQL实时诊断

“慢SQL实时诊断”,展示的是当天零点之后,按分钟粒度统计的慢SQL。为了展示效果,时间窗口最长可选择3个小时,默认为最近3小时。

趋势图:横轴为分钟粒度的时间,左侧纵轴为慢SQL个数,右侧纵轴为CPU使用率。其中,CPU使用率为曲线,慢SQL个数为5分钟一个的柱图。

如下图所示:

当点击慢SQL柱图时,下方默认显示这5分钟内的“慢SQL统计”,也可以切换查看“慢SQL明细”。分别点击“慢SQL统计”的SQL模板和“慢SQL明细”的SQL语句,查看完整的SQL。

其中,“慢SQL统计”,按执行次数倒叙排序;“慢SQL明细”,按执行时间排序。

慢SQL统计:

慢SQL明细:

最佳实践

举例:当前系统响应比较慢,如何利用慢SQL功能进行定位?

  1. 系统响应慢是进行时,需要用“慢SQL实时诊断”功能进行分析
  2. 慢SQL统计信息里,排在Top的SQL需要重点关注。一般情况下,SQL不会无故变慢,需要根据执行次数、平均/最大执行时间、平均/最大返回行数、平均/最大扫描行数进行分析,常见情况:

    (1) SQL扫描行数比返回行数多得多:很可能是SQL没有合理使用索引导致。
    (2) SQL执行次数比较多,而扫描行数和返回行数都比较少:一般是并发太大导致SQL堆积,而使整个系统响应变慢。
    (3) SQL扫描行数和返回行数都比较多:一般SQL本身没有太大优化空间,需要业务层面进行优化。
    (4) 业务流量太大导致系统响应变慢:写流量比较大,可考虑百度智能云 云数据库 DRDS ,利用DRDS的分片扩展特性,提升整个集群的写能力和存储容量;读流量比较大,可考虑百度智能云只读实例和代理号实例,利用代理实例的读写分离和负载均衡特性,分摊主库的读流量压力。另外,客户也可在BCM设置慢查询和系统资源方面的监控报警,当感知到系统存在性能压力时,可以通过“慢SQL实时诊断”及时分析。

  3. 可以从慢SQL明细中查看具体SQL