10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册 本手册摘录

MySQL 8.0参考手册/MySQL性能模式/使用性能模式来诊断问题

27.19使用性能模式来诊断问题

Performance Schema是一种帮助DBA进行性能调优的工具,它通过进行实际的度量而不是野生的猜测。本节演示了为此目的使用性能模式的某些方法。这里讨论依赖于使用事件过滤,这将描述第27.4.2节,“性能模式事件过滤”

下面的示例提供了一种方法,可以用于分析可重复的问题,例如调查性能瓶颈。首先,您应该有一个可重复的用例,其中考虑了性能太慢了并需要优化,您应该启用所有仪器(根本没有预滤波)。

  1. 运行用例。

  2. 使用性能模式表,分析性能问题的根本原因。这种分析严重依赖于过滤后。

  3. 对于排除的问题区域,禁用相应的仪器。例如,如果分析显示该问题与特定存储引擎中的文件I/O无关,则禁用该引擎的文件I/O工具。然后截断历史和汇总表以删除以前收集的事件。

  4. 重复第1步的过程。

    每次迭代,性能模式输出,尤其是events_waits_history_long表中,包含的东西越来越少噪音由于仪器不重要造成的,并且鉴于这个表有一个固定的大小,包含了越来越多的与分析手头问题相关的数据。

    在每一次迭代中,调查应该越来越接近问题的根本原因,如信号/噪声比率提高,进行分析更容易。

  5. 一旦确定了性能瓶颈的根本原因,就采取适当的纠正措施,例如:

    • 调优服务器参数(缓存大小、内存等)。

    • 通过不同的方式调整查询,

    • 调优数据库模式(表、索引等)。

    • 调优代码(仅适用于存储引擎或服务器开发人员)。

  6. 在步骤1开始再次开始,以查看性能变化的影响。

mutex_instances.locked_by_thread_id.rwlock_instances.write_locked_by_thread_id.列对于研究性能瓶颈或死锁非常重要。这是通过Performance Schema工具实现的,如下所示:

  1. 假设线程1正在等待互斥锁。

  2. 你可以确定线程在等待什么:

    选择* from performence_schema.events_waits_current,其中thread_id =thread_1.;

    假设查询结果确定了线程正在等待互斥锁Aevents_waits_current。OBJECT_INSTANCE_BEGIN

  3. 你可以确定哪个线程持有互斥锁A:

    SELECT * FROM performance_schema。mutex_instances WHERE OBJECT_INSTANCE_BEGIN =mutex_A;

    假设查询结果确定它是线程2,持有互斥锁A,如中所示mutex_instances.locked_by_thread_id.

  4. 你可以看到线程2正在做什么:

    选择* from performence_schema.events_waits_current,其中thread_id =Thread_2.;