性能架构是一种帮助DBA通过实际测量而不是实际测量来调整性能调整的工具“狂野的猜测。“本节演示了为此目的使用性能模式的某些方法。这里讨论依赖于使用事件过滤,这将描述第27.4.2节“性能架构事件过滤”。
以下示例提供了一种方法,您可以用来分析可重复的问题,例如调查性能瓶颈。首先,您应该具有可重复使用的情况,其中表现被视为“太慢了“并需要优化,您应该启用所有仪器(根本没有预滤波)。
运行用例。
使用性能模式表,分析性能问题的根本原因。这种分析严重依赖于过滤后。
对于排除的问题区域,禁用相应的仪器。例如,如果分析表明该问题与特定存储引擎中的文件I / O无关,则禁用该引擎的文件I / O仪器。然后截断历史记录和摘要表以删除先前收集的事件。
在步骤1重复该过程。
每次迭代,性能模式输出,尤其是
Events_waits_history_long.
表,包含越来越少“噪音“由非显着仪器引起的,并且鉴于该表具有固定大小,包含与手头问题的分析相关的越来越多的数据。随着每次迭代,调查应更接近和更接近问题的根本原因,为“信号/噪声“比率提高,进行分析更容易。
一旦确定了性能瓶颈的根本原因,就采取适当的纠正措施,例如:
调整服务器参数(缓存大小,内存等)。
通过不同的方式调整查询,
调整数据库架构(表,索引等)。
调整代码(仅适用于存储引擎或服务器开发人员)。
在步骤1开始再次开始,以查看性能变化的影响。
这mutex_instances.locked_by_thread_id.
和rwlock_instances.write_locked_by_thread_id.
列对于调查性能瓶颈或死锁非常重要。这是通过性能模式仪器实现的,如下所示:
假设螺纹1卡在等待互斥锁。
您可以确定线程正在等待的内容:
选择* from performence_schema.events_waits_current,其中thread_id =thread_1.;
假设查询结果标识线程正在等待互斥锁A,发现
events_waits_current.object_instance_begin
。您可以确定哪个线程持有互斥锁A:
选择* from performence_schema.mutex_instances,其中object_instance_begin =mutex_a.;
假设查询结果标识它是线程2持有互斥锁A,如上所找到的
mutex_instances.locked_by_thread_id.
。你可以看到什么主题2正在做什么:
选择* from performence_schema.events_waits_current,其中thread_id =Thread_2.;