暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

性能优化|分析 MySQL 数据库服务中的查询

原创 小小亮 2022-10-14
324

如果你和我一样是一位资深的MySQL DBA,分析你的 MySQL 工作负载,你肯定使用了设置0的慢查询日志。long_query_time

慢查询日志是一个文件,包含所有执行时间大于long_query_time该文件可能很大,并且会占用繁忙系统上的所有可用磁盘空间。

不断写入该文件也会增加服务器的开销。

由于这些原因,OCI 中的 MySQL 数据库服务 (HeatWave) 中不提供慢查询日志。

B计划?

作为 DBA,我有哪些选择来查找需要优化的查询?像往常一样,最耗时的查询是需要注意的查询

它可能是一个很长的查询,也可能是一个执行了太多次的短查询。

目前,MySQL DBA 用于Performance_Schema管理在其数据库上执行的查询。

我已经写了一篇关于如何使用Performance_SchemaandSys的文章,让我们指出这个新的重写查询(使用新函数)消耗了大部分执行时间(延迟)的查询:

SQL> select schema_name, format_pico_time(total_latency) tot_lat,
            exec_count, format_pico_time(total_latency/exec_count)
            latency_per_call, query_sample_text
     from sys.x$statements_with_runtimes_in_95th_percentile as t1
     join performance_schema.events_statements_summary_by_digest as t2
       on t2.digest=t1.digest 
    where schema_name not in ('performance_schema', 'sys')
 order by (total_latency/exec_count) desc limit 1\G
*************************** 1. row ***************************
      schema_name: employees
          tot_lat: 21.54 s
       exec_count: 4
 latency_per_call: 5.38 s
query_sample_text: select * from salaries where salary > 80000
1 row in set (0.0127 sec)

Sysschema 还包含一个语句分析视图,可用于包含大量信息来查找错误查询。

让我们看一个例子来说明所有可用的信息:

SQL> select * from sys.statement_analysis 
     where db not in ('performance_schema', 'sys') limit 1\G
*************************** 1. row ***************************
            query: SELECT `new_table` . `title` , ... `title` ORDER BY `salary` DESC
               db: employees
        full_scan: 
       exec_count: 11
        err_count: 0
       warn_count: 0
    total_latency: 38.96 s
      max_latency: 5.15 s
      avg_latency: 3.54 s
     lock_latency: 33.00 us
      cpu_latency:   0 ps
        rows_sent: 77
    rows_sent_avg: 7
    rows_examined: 13053117
rows_examined_avg: 1186647
    rows_affected: 0
rows_affected_avg: 0
       tmp_tables: 22
  tmp_disk_tables: 11
      rows_sorted: 77
sort_merge_passes: 0
           digest: 922701de9e5c51847f9f7de245b88fef4080b515ba8805082cd90c32830714eb
       first_seen: 2022-10-12 20:45:50.770465
        last_seen: 2022-10-13 11:49:13.140228
1 row in set (0.0022 sec)

慢查询日志

但正如我常说的,旧习惯很难改掉……有时人们还是想处理慢查询日志。

例如,要生成这样的东西:


MySQL 数据库服务器 – Grafana Loki 中的查询

或者使用pt-query-digest大多数 MySQL DBA 已经使用过的工具离线消化它们。

在下一篇文章中,我将向您展示如何使用OCI Fn 应用程序从 MySQL 数据库服务生成慢查询日志(以 JSON 或纯文本格式)并将其存储到对象存储中。

敬请关注 !


原文标题:Analyzing queries in MySQL Database Service

原文作者:LEFRED

原文链接:https://lefred.be/content/analyzing-queries-in-mysql-database-service/



「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论