千金良方:MySQL性能优化金字塔法则
第4章 performance_schema初相识
第5章 performance_schema配置详解
第6章 performance_schema应用示例荟萃
简介
1、实时监控Server性能监控和诊断的工具
2、它提供了丰富的性能指标和事件,可以帮助你深入了解 MySQL 的性能状况
3、通过 performance_schema,你可以监视数据库的查询、锁定、IO 等方面的性能数据,并进行性能优化和瓶颈排查
4、只记录本地,不会同步到备库
5、数据保存在内存,重启丢失
常见表介绍
表名 | 描述 |
---|---|
accounts | 存储MySQL帐户信息和密码哈希值的表 |
cond_instances | 存储条件对象实例的表 |
events_waits_current | 提供当前等待事件的信息 |
events_waits_history | 提供历史等待事件的信息 |
events_waits_history_long | 提供长期历史等待事件的信息 |
events_waits_summary_by_instance | 提供按实例汇总的等待事件信息 |
events_waits_summary_by_thread | 提供按线程汇总的等待事件信息 |
events_stages_current | 提供当前阶段事件的信息 |
events_stages_history | 提供历史阶段事件的信息 |
events_stages_history_long | 提供长期历史阶段事件的信息 |
events_stages_summary_by_host_by_event_name | 提供按主机和事件名称汇总的阶段事件信息 |
events_stages_summary_by_host_by_event_name | 提供按主机和事件名称汇总的阶段事件信息 |
events_statements_current | 提供当前语句事件的信息 |
events_statements_history | 提供历史语句事件的信息 |
events_statements_history_long | 提供长期历史语句事件的信息 |
events_statements_summary_by_account_by_event_name | 提供按帐户和事件名称汇总的语句事件信息 |
events_statements_summary_by_host_by_event_name | 提供按主机和事件名称汇总的语句事件信息 |
events_statements_summary_by_thread_by_event_name | 提供按线程和事件名称汇总的语句事件信息 |
events_statements_summary_by_user_by_event_name | 提供按用户和事件名称汇总的语句事件信息 |
events_transactions_current | 提供当前事务事件的信息 |
events_transactions_history | 提供历史事务事件的信息 |
events_transactions_history_long | 提供长期历史事务事件的信息 |
events_transactions_summary_by_host_by_event_name | 提供按主机和事件名称汇总的事务事件信息 |
events_transactions_summary_by_thread_by_event_name | 提供按线程和事件名称汇总的事务事件信息 |
events_transactions_summary_by_user_by_event_name | 提供按用户和事件名称汇总的事务事件信息 |
events_waits_summary_global_by_event_name | 提供按事件名称全局汇总的等待事件信息 |
file_instances | 存储文件实例的表 |
file_summary_by_event_name | 提供按事件名称汇总的文件摘要信息 |
file_summary_by_instance | 提供按实例汇总的文件摘要信息 |
hosts | 存储已连接到MySQL服务器的主机信息 |
mutex_instances | 存储互斥锁实例的表 |
performance_timers | 存储性能计时器的信息 |
rwlock_instances | 存储读写锁实例的表 |
session_connect_attrs | 存 |
储会话连接属性的表 |
| setup_consumers | 存储事件消费者信息的表 |
| setup_instruments | 存储事件仪表信息的表 |
| setup_timers | 存储计时器信息的表 |
| threads | 存储线程信息的表 |
| users | 存储MySQL用户信息的表 |
以上是MySQL 8中performance_schema表的一些常见表和它们的作用。performance_schema表提供了关于MySQL服务器性能、资源利用和各种事件的详细信息。通过查询这些表,您可以获得关于MySQL服务器运行状态的有用统计信息,以便进行性能分析和调优。
配置详解
1、介绍编译时的配置选项,只对源码编译安装适用
2、详细介绍启动时配置,即在启动之前如何通过配置文件来持久化performance_schema的配置,主要介绍performance_schema的system variables(系统变量)、status variables(状态变量)和启动选项
show variables like '%performance_schema%';
3、详细介绍运行时配置,即在运行过程中如何动态配置performance_schema,主要介绍如何通过performance_schema中的配置表进行动态配置,以及这些配置表的字段含义、配置表中的配置项之间有什么关联等。
应用
利用等待事件排查MySQL性能问题
events_waits_current
使用 events_waits_current
视图可以查看当前正在等待的事件。这个视图提供了关于当前等待事件的详细信息,包括等待事件的类型、持续时间、等待线程的状态等。
以下是使用 events_waits_current
视图的一般步骤:
-
确保
performance_schema
已经启用:- 在 MySQL 的配置文件中,检查
performance_schema
是否被设置为ON
。如果没有设置,需要修改配置文件并重启 MySQL。
- 在 MySQL 的配置文件中,检查
-
查询
events_waits_current
视图:- 使用 SELECT 语句查询
events_waits_current
视图,可以获取当前正在等待的事件信息。 - 例如,可以执行以下查询来获取当前等待事件的信息:
SELECT * FROM performance_schema.events_waits_current;
- 使用 SELECT 语句查询
-
分析等待事件:
- 分析查询结果,查看不同等待事件的类型和持续时间。
- 根据事件类型和持续时间,判断是否存在性能瓶颈,并确定需要采取的优化措施。
-
结合其他视图和表进行进一步分析:
- 可以结合其他的 performance_schema 视图和表,如
events_statements_summary_by_digest
、events_statements_current
等,来获取更全面的性能数据和查询执行信息。
- 可以结合其他的 performance_schema 视图和表,如
请注意,events_waits_current
视图只提供了当前正在等待的事件信息,如果需要查看历史等待事件,可以使用 events_waits_history
视图。
使用 events_waits_current
视图可以实时监控当前等待事件,对于实时性能问题的排查和分析很有帮助。结合其他性能监控工具和技术,可以更全面地了解 MySQL 的性能状况,并进行相应的优化和调整。
events_waits_summary_global_by_event_name
和 events_waits_history_long
使用 performance_schema 可以利用等待事件来排查 MySQL 的性能问题。等待事件是指在执行过程中,MySQL 进程因等待某种资源而暂时挂起的情况。通过分析等待事件,可以找出导致性能瓶颈的原因,并进行相应的优化。
下面是使用 performance_schema 排查 MySQL 性能问题的一般步骤:
-
确保 performance_schema 已经启用:
- 在 MySQL 的配置文件中,检查
performance_schema
是否被设置为ON
。如果没有设置,需要修改配置文件并重启 MySQL。
- 在 MySQL 的配置文件中,检查
-
查询等待事件:
- 使用 performance_schema 提供的视图和表来查询等待事件。常用的视图包括
events_waits_summary_global_by_event_name
和events_waits_history_long
。 - 例如,可以执行以下查询来获取全局等待事件的摘要信息:
SELECT * FROM performance_schema.events_waits_summary_global_by_event_name;
- 使用 performance_schema 提供的视图和表来查询等待事件。常用的视图包括
-
分析等待事件:
- 分析查询结果,查看哪些等待事件的计数较高,表示这些事件可能是性能瓶颈的原因。
- 根据不同的等待事件,采取相应的优化措施。例如,如果发现等待事件是与磁盘IO相关的,可能需要优化磁盘性能或优化查询的索引。
-
进一步细化分析:
- 使用 performance_schema 提供的更详细的视图和表,进一步细化分析性能问题。例如,
events_statements_summary_by_digest
表提供了查询摘要的性能数据,可以根据查询的执行时间、扫描行数等指标进行优化。
- 使用 performance_schema 提供的更详细的视图和表,进一步细化分析性能问题。例如,
-
监控和持续优化:
- 定期监控 performance_schema 的数据,并与系统负载和性能指标进行对比。根据数据的变化,进一步优化数据库的配置和查询语句,以达到更好的性能。
使用 performance_schema 来排查性能问题需要对 MySQL 的内部工作原理和各个等待事件有一定的了解。可以参考 MySQL 官方文档中关于 performance_schema 的详细说明,以及一些性能优化的经验和案例来指导实际操作。
锁问题排查
1、全局读锁
2、MDL锁
3、表级锁
4、行级锁
从MySQL 5.7版本开始提供了performance_schema.metadata_locks表,该表记录了各种Server层的锁信息(包括全局读锁和MDL锁等信息)
information_schema下的三个关于InnoDB引擎的锁和事务信息表(INNODB_LOCK_WAITS、INNODB_LOCKS、INNODB_TRX)
performance_schema.table_handles表
performance_schema.events_statements_current表
sys.innodb_lock_waits视图