在日常的应用系统使用过程种,我们会发现有各种各样的因素会影响应用系统的性能,其中数据库的问题尤为居多。在大多数的数据库因素种,有大部分是和开发人员编写的SQL语句有关的,也就是说因为开发人员编写的SQL语句导致查询数据返回结果不能达到预期的要求。一般情况下这种问题的定位是相对比较难的。试想一下,一个应用系统种,那么多的查询语句,我们如何精准的定位到有问题的SQL语句呢,这时候就可以使用MySQL慢查询来解决这个问题。MySQL 中的慢查询日志功能使您能够记录超过预定义时间限制的查询。这极大地简化了查找低效或耗时查询的任务。

​MySQL慢查询日志是用来记录MySQL在执行命令种,响应时间查过预设阈值的SQL语句。一般情况下当我们遇到数据库返回查询结果慢的时候可以使用慢查询日志来定位到具体的查询语句问题。因为慢查询会影响数据库性能和整体服务器性能,所以一般情况下我们不建议长期启用慢查询,只需要有针对性的配置就可以。

配置启用慢查询日志

默认情况下,慢查询日志处于被禁用的状态,如果要启用它则需要将slow_query_log设置为ON,我们可以通过Azure Portal在特定的MySQL实例上进行启用:


配置Azure Database for MySQL 慢查询监控_Azure Database MySQL


配置启用后,还可以调整其他的配置参数来更精细化的控制慢查询的监控,具体配置参数如下:

  • long_query_time:如果某个查询花费的时间超过了 long_query_time(以秒为单位),则会记录该查询。 默认为 10 秒。
  • log_slow_admin_statements:如果为 ON,则会在写入到 slow_query_log 的语句中包括管理性语句,例如 ALTER_TABLE 和 ANALYZE_TABLE。
  • log_queries_not_using_indexes:确定是否将未使用索引的查询记录到 slow_query_log 中
  • log_throttle_queries_not_using_indexes:此参数限制可以写入到慢查询日志的非索引查询的数目。 当 log_queries_not_using_indexes 设置为 ON 时,此参数生效。
  • log_output:如果设置为“文件”,则允许将慢查询日志写入本地服务器存储和 Azure Monitor 诊断日志。 如果设置为“无”,则仅将慢查询日志写入 Azure Monitor 诊断日志。

访问慢查询日志

可以通过两种方式访问Azure Database for MySQL的慢查询日志:

  • 本地服务器存储
  • 使用Azure Monitor诊断日志

具体要根据log_output所配置的参数来进行设置:

配置Azure Database for MySQL 慢查询监控_MySQL_02

方式一:


对于本地服务器存储,可以使用Azure Portal或者CLI列出并下载慢查询日志,接下来我们看下如何通过Azure Portal查看。在 Azure 门户中导航到对应服务器, 在“监视”标题下,选择“服务器日志”页面,可以看到当前的慢查询日志:


配置Azure Database for MySQL 慢查询监控_MySQL慢查询_03



方式二:


使用 Azure Monitor 诊断日志可以通过管道将慢查询日志传输到 Azure Monitor 日志 (Log Analytics)、Azure 存储或事件中心,然后使用Kusto语句进行查找,具体可参考如下链接:


https://docs.microsoft.com/zh-cn/azure/mysql/concepts-server-logs