如果你和我一样是一位资深的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)慢查询日志
但正如我常说的,旧习惯很难改掉……有时人们还是想处理慢查询日志。
例如,要生成这样的东西:

或者使用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/




