注:本文由大模型生成
1. performance_schema 数据库说明
在MySQL 5.7中,performance_schema
是一个内置的系统数据库,主要用于收集和存储与数据库性能相关的统计信息和指标。这个数据库从MySQL 5.5版本开始引入,并在MySQL 5.7中默认启用(但可以在MySQL配置参数中关闭以节约性能消耗)。以下是关于performance_schema
数据库的详细说明:
一、主要功能
- 性能监控:
performance_schema
提供了丰富的表和视图,用于收集和分析MySQL服务器的性能数据,如CPU使用率、内存使用率、I/O操作、查询执行时间等。 - 内部运行状态监控:通过监控MySQL的内部运行状态,如函数调用、操作系统等待、SQL语句执行阶段等,帮助运维人员了解数据库的运行情况。
- 性能调优和故障排查:基于收集的性能数据,运维人员可以进行性能调优和故障排查,提高数据库的运行效率和稳定性。
二、数据库结构
- 存储引擎:
performance_schema
数据库使用PERFORMANCE_SCHEMA
存储引擎管理,这是MySQL特有的一个存储引擎,专门用于性能数据的收集。 - 表类型:
performance_schema
中的表主要是内存表,不使用磁盘存储。在MySQL服务重启时,这些表的数据会被清空。 - 数据收集:
performance_schema
通过修改MySQL服务器源代码中的“检测点”来实现事件数据的收集,这些数据被存储在performance_schema
数据库的表中。
三、常用表和功能
- 配置表:如
setup_actors
、setup_consumers
、setup_instruments
等,用于配置performance_schema
的监控范围和数据输出方式。 - 事件表:记录了MySQL服务器执行的各种事件的信息,如
events_stages_current
、events_stages_history
等,用于分析SQL语句执行的各个阶段和性能瓶颈。 - 内存使用表:如
memory_summary_by_thread_by_event_name
等,用于监视MySQL服务器中内存的使用情况。
四、使用注意事项
- 性能影响:开启
performance_schema
可能会对MySQL服务器的性能产生一定的影响,因此在生产环境中使用时需要谨慎。 - 配置调整:在使用
performance_schema
时,可能需要根据实际需求调整配置,如启用或禁用某些监控项、调整数据输出方式等。 - 权限要求:查询
performance_schema
中的表需要相应的权限,否则可能会报错。
五、如何启用和验证
- 启用:在MySQL 5.7中,
performance_schema
默认启用。如果需要手动启用或关闭,可以在MySQL配置文件(如my.cnf
或my.ini
)中设置performance_schema=ON
或performance_schema=OFF
。 - 验证:可以通过执行
SHOW VARIABLES LIKE 'performance_schema';
查询来验证performance_schema
是否已启用。
综上所述,performance_schema
是MySQL 5.7中一个强大的性能监控工具,通过收集和分析MySQL服务器的性能数据,帮助运维人员进行性能调优和故障排查。然而,在使用时需要注意其对性能的影响,并根据实际需求进行配置调整。
2. performance_schema 中的视图说明
MySQL 5.7 中共有 88 个视图,说明如下:
accounts
- 功能描述:提供MySQL服务器上的账户信息,包括用户名、主机名等。
- 使用场景:用于审计和监控哪些用户账户正在访问MySQL服务器,以及这些账户的活动情况。
cond_instances
- 功能描述:显示条件变量的实例信息,条件变量是MySQL内部用于线程间同步的机制。
- 使用场景:主要用于开发者或高级DBA调试MySQL的内部线程同步问题,了解条件变量的使用情况和等待情况。
events_stages_current
- 功能描述:显示当前正在执行的SQL语句的各个执行阶段(如解析、优化、执行等)。
- 使用场景:实时监控SQL语句的执行阶段,帮助诊断当前正在进行的操作是否遇到性能瓶颈。
events_stages_history / events_stages_history_long
- 功能描述:记录过去一段时间内SQL语句执行阶段的历史信息,
history_long
保留的时间更长。 - 使用场景:用于分析过去一段时间内的SQL执行阶段,找出频繁出现的性能瓶颈或异常。
- 功能描述:记录过去一段时间内SQL语句执行阶段的历史信息,
events_stages_summary_by_account_by_event_name
- 功能描述:按账户和事件名称汇总SQL执行阶段的信息。
- 使用场景:分析不同账户下SQL语句各阶段的执行性能,识别特定账户的潜在性能问题。
events_stages_summary_by_host_by_event_name
- 功能描述:按主机和事件名称汇总SQL执行阶段的信息。
- 使用场景:了解来自不同主机的SQL执行阶段性能,评估网络或远程连接对性能的影响。
events_stages_summary_by_thread_by_event_name
- 功能描述:按线程和事件名称汇总SQL执行阶段的信息。
- 使用场景:分析特定线程下SQL语句的执行阶段,识别线程级别的性能瓶颈。
events_stages_summary_by_user_by_event_name
- 功能描述:按用户和事件名称汇总SQL执行阶段的信息。
- 使用场景:评估不同用户执行SQL语句的性能,帮助识别用户级别的性能问题。
events_stages_summary_global_by_event_name
- 功能描述:按事件名称全局汇总SQL执行阶段的信息。
- 使用场景:了解整个MySQL服务器在SQL执行阶段上的总体性能表现。
events_statements_current / events_statements_history / events_statements_history_long
- 功能描述:显示当前正在执行、过去一段时间内执行过的SQL语句及其相关信息,
history_long
保留的时间更长。 - 使用场景:实时监控或分析历史SQL语句,找出性能瓶颈或优化点。
- 功能描述:显示当前正在执行、过去一段时间内执行过的SQL语句及其相关信息,
eventsstatements_summary_by 系列
- 功能描述:这些视图按不同维度(如账户、摘要、主机、程序、线程、用户、全局)汇总SQL语句的执行信息。
- 使用场景:用于详细分析SQL语句在不同维度下的执行性能,帮助进行SQL优化或查询调优。
events_transactions_current / events_transactions_history / events_transactions_history_long
- 功能描述:显示当前正在执行、过去一段时间内执行过的事务及其相关信息,
history_long
保留的时间更长。 - 使用场景:实时监控或分析事务的执行情况,帮助优化事务处理性能。
- 功能描述:显示当前正在执行、过去一段时间内执行过的事务及其相关信息,
eventstransactions_summary_by 系列
- 功能描述:这些视图按不同维度(如账户、主机、线程、用户、全局)汇总事务的执行信息。
- 使用场景:分析不同维度下事务的执行性能,帮助识别事务处理中的瓶颈,优化事务处理流程。
events_waits_current:
- 功能描述:显示当前正在等待的所有事件的快照。
- 使用场景:用于诊断当前正在发生的性能瓶颈,比如查看哪些查询或线程正在等待IO操作、锁等。
events_waits_history:
- 功能描述:存储最近发生的等待事件的滚动历史记录。
- 使用场景:分析过去的等待事件,识别模式或周期性的性能问题。
events_waits_history_long:
- 功能描述:类似于
events_waits_history
,但存储更长时间的历史记录。 - 使用场景:对于需要长期跟踪和分析的性能问题,此视图提供了更全面的历史数据。
- 功能描述:类似于
events_waits_summary_by_account_by_event_name:
- 功能描述:按用户和事件名称汇总等待事件。
- 使用场景:分析不同用户账户的性能影响,识别特定用户是否因某种类型的等待事件而遭受性能下降。
events_waits_summary_by_host_by_event_name:
- 功能描述:按主机和事件名称汇总等待事件。
- 使用场景:识别来自特定主机的查询或连接是否因等待事件而变慢。
events_waits_summary_by_instance:
- 功能描述:按等待事件实例汇总等待数据。
- 使用场景:深入了解特定等待事件实例的性能特征。
events_waits_summary_by_thread_by_event_name:
- 功能描述:按线程和事件名称汇总等待事件。
- 使用场景:分析特定线程的性能问题,确定哪些线程因等待事件而受阻。
events_waits_summary_by_user_by_event_name:
- 功能描述:按用户和事件名称汇总等待事件。
- 使用场景:分析用户级别的性能影响,识别是否有特定用户因某种类型的等待事件而遇到性能问题。
events_waits_summary_global_by_event_name:
- 功能描述:全局汇总所有等待事件。
- 使用场景:提供服务器整体的等待事件概览,识别全局性能瓶颈。
file_instances:
- 功能描述:显示打开文件的实例信息。
- 使用场景:监控和分析文件IO操作,如日志文件、数据文件等的访问情况。
file_summary_by_event_name 和 file_summary_by_instance:
- 功能描述:分别按事件名称和实例汇总文件IO操作。
- 使用场景:分析不同文件IO操作的性能影响,识别热点文件或频繁访问的文件。
global_status 和 global_variables:
- 功能描述:分别显示全局状态变量和全局系统变量。
- 使用场景:监控和分析服务器的整体状态和配置,调整和优化性能。
host_cache 和 hosts:
- 功能描述:
host_cache
显示主机名缓存的详细信息,hosts
显示已知主机的列表。 - 使用场景:分析主机名解析的性能和安全性,优化网络连接。
- 功能描述:
memorysummary… 系列视图:
- 功能描述:按不同维度(如账户、主机、线程、用户)汇总内存使用情况。
- 使用场景:监控和分析内存使用情况,识别内存泄漏或过度使用的模式。
metadata_locks:
- 功能描述:显示元数据锁的信息。
- 使用场景:分析DDL操作(如ALTER TABLE)对性能的影响。
mutex_instances:
- 功能描述:显示互斥锁实例的信息。
- 使用场景:监控和分析内部锁的竞争情况,识别可能的锁争用问题。
objects_summary_global_by_type:
- 功能描述:按对象类型汇总性能数据。
- 使用场景:了解不同对象类型(如表、索引)的性能特征。
performance_timers:
- 功能描述:提供有关系统性能计时器的信息。
- 使用场景:分析系统层面的性能数据
prepared_statements_instances:
- 功能描述:此视图显示了当前所有预编译语句(prepared statements)的实例信息。它包括了预编译语句的ID、SQL文本、状态(如是否打开、是否已准备好等)以及与之相关的其他元数据。
- 使用场景:用于监控预编译语句的使用情况,了解哪些预编译语句正在被使用,以及它们的状态。这有助于优化查询性能,因为预编译语句可以减少查询解析和优化的开销。此外,它还可以帮助识别可能的资源泄漏,如长时间未关闭的预编译语句。
processlist:
- 功能描述:此视图类似于
SHOW PROCESSLIST
命令的输出,提供了当前MySQL服务器上所有活动的线程(包括客户端连接和后台线程)的信息。它包括了线程的ID、用户、主机、数据库、命令类型、执行时间、状态以及查询文本(如果有的话)。 - 使用场景:用于监控和诊断当前MySQL服务器的活动状态。通过分析processlist,可以识别出哪些查询正在执行、哪些连接处于空闲状态、哪些查询可能造成了性能瓶颈等。这对于调试性能问题、优化查询性能以及管理用户连接都非常重要。
- 功能描述:此视图类似于
replication_applier_configuration:
- 功能描述:此视图提供了有关复制应用者(replication applier)配置的信息,包括复制通道(channel)的名称、复制格式(如基于语句的复制、基于行的复制或混合复制)、复制过滤规则(如忽略某些数据库或表的复制)等。
- 使用场景:用于监控和调试MySQL复制配置。通过此视图,可以验证复制配置是否正确设置,包括复制通道、复制格式和过滤规则等。这对于确保数据一致性和高可用性至关重要。
replication_applier_status:
- 功能描述:此视图提供了复制应用者(replication applier)的当前状态信息,包括复制通道的名称、当前正在应用的二进制日志文件的名称和位置、复制延迟(如果有的话)等。
- 使用场景:用于监控MySQL复制的性能和状态。通过此视图,可以了解复制是否正在正常运行,以及是否存在延迟。这对于确保数据能够及时从主服务器同步到从服务器非常重要。
replication_applier_status_by_coordinator 和 replication_applier_status_by_worker:
- 功能描述:这两个视图分别提供了按协调器(coordinator)和按工作线程(worker)组织的复制应用者状态信息。在多线程复制配置中,这些视图特别有用,因为它们可以展示每个工作线程的状态和进度。
- 使用场景:用于监控和调试多线程复制的性能和状态。通过这两个视图,可以了解不同工作线程是否均衡地承担了复制任务,以及是否存在某些工作线程成为瓶颈的情况。
replication_connection_configuration:
- 功能描述:此视图提供了有关复制连接配置的信息,包括复制通道的名称、连接参数(如主机名、端口号、用户名和密码)等。
- 使用场景:用于监控和调试MySQL复制连接配置。通过此视图,可以验证复制连接是否按照预期进行了配置,包括连接参数和认证信息是否正确。
replication_connection_status:
- 功能描述:此视图提供了复制连接的当前状态信息,包括复制通道的名称、连接状态(如是否已建立连接、是否存在错误等)以及任何相关的错误消息。
- 使用场景:用于监控MySQL复制连接的性能和状态。通过此视图,可以了解复制连接是否稳定,以及是否存在任何需要解决的问题。这对于确保复制过程的连续性和可靠性非常重要。
replication_group_member_stats
- 功能描述:提供MySQL Group Replication(MGR)中组成员的统计信息,如接收和发送的消息数、延迟等。
- 使用场景:监控MySQL Group Replication的性能和健康状况,确保数据复制的一致性和及时性。
replication_group_members
- 功能描述:显示MySQL Group Replication中当前组成员的信息,如成员ID、角色(如PRIMARY、SECONDARY)、通信状态等。
- 使用场景:查看当前MySQL Group Replication集群的成员构成和状态,帮助诊断和解决问题。
rwlock_instances
- 功能描述:提供读写锁实例的信息,包括锁的类型、状态、等待的线程数等。
- 使用场景:分析MySQL内部读写锁的使用情况,识别可能的锁竞争和性能瓶颈。
session_account_connect_attrs
- 功能描述:显示会话的账户连接属性,这些属性可以是客户端提供的,用于审计和监控。
- 使用场景:审计和监控客户端连接到MySQL服务器的身份和属性,确保安全性和合规性。
session_connect_attrs
- 功能描述:类似于
session_account_connect_attrs
,但可能包含更广泛的连接属性,不仅限于账户。 - 使用场景:同样用于审计和监控客户端连接,提供更多上下文信息。
- 功能描述:类似于
session_status
- 功能描述:显示当前会话的状态变量信息。
- 使用场景:监控和诊断特定会话的性能问题,了解会话级别的资源使用情况。
session_variables
- 功能描述:显示当前会话的系统变量值。
- 使用场景:查看和调试会话级别的配置设置,帮助优化查询和会话行为。
setup_actors
- 功能描述:允许配置哪些MySQL账户可以访问
performance_schema
的哪些表。 - 使用场景:控制对
performance_schema
的访问权限,确保安全和合规性。
- 功能描述:允许配置哪些MySQL账户可以访问
setup_consumers
- 功能描述:配置哪些性能事件消费者(如文件、表)被启用以收集数据。
- 使用场景:根据需要启用或禁用性能数据的收集,以平衡性能监控和性能开销。
setup_instruments
- 功能描述:配置哪些性能监控仪器(如等待事件、语句事件)被启用以收集数据。
- 使用场景:根据需要启用或禁用特定类型的性能监控,以收集关键的性能指标。
setup_objects
- 功能描述:配置哪些MySQL对象(如表、索引)的性能数据被收集。
- 使用场景:针对特定的数据库对象进行性能监控,识别性能瓶颈。
setup_timers
- 功能描述:配置性能监控中使用的计时器类型(如系统时钟、CPU时钟)。
- 使用场景:根据需要选择适当的计时器,以确保性能数据的准确性和一致性。
socket_instances
- 功能描述:提供MySQL服务器套接字实例的信息,包括套接字类型、地址、端口等。
- 使用场景:监控和诊断与MySQL服务器通信的套接字连接,确保连接稳定性和安全性。
socket_summary_by_event_name
- 功能描述:按事件名称汇总套接字操作的统计信息,如连接、断开连接等。
- 使用场景:分析套接字操作的性能,识别可能的网络延迟或连接问题。
socket_summary_by_instance
- 功能描述:按套接字实例汇总操作的统计信息。
- 使用场景:针对特定的套接字实例进行性能分析,了解单个连接的行为。
statusby 系列(如
status_by_account
、status_by_host
等)- 功能描述:这些视图按不同维度(如账户、主机、线程、用户)汇总MySQL服务器的状态变量信息。
- 使用场景:分析不同维度下的服务器性能,识别性能瓶颈和异常行为。
table_handles
- 功能描述:提供表句柄的信息,包括表ID、打开表的数量等。
- 使用场景:监控表的打开和关闭情况,确保表缓存的有效利用。
table_io_waits_summary_by_index_usage
- 功能描述:此视图提供了按索引使用情况汇总的表I/O等待信息。它显示了哪些索引导致了最多的I/O等待,这对于识别哪些查询可能因为索引的使用而遇到性能瓶颈非常有用。
- 使用场景:分析索引的使用效率,识别哪些索引可能不是最优的,或者哪些查询可能由于索引选择不当而导致了过多的I/O操作。
table_io_waits_summary_by_table
- 功能描述:此视图按表汇总了I/O等待事件,提供了关于每个表在I/O操作上的等待时间和次数的统计信息。
- 使用场景:识别哪些表是导致I/O瓶颈的主要因素,有助于数据库管理员决定是否需要优化表结构、增加缓存或调整存储配置。
table_lock_waits_summary_by_table
- 功能描述:此视图提供了按表汇总的锁等待信息,包括等待次数、等待时间和锁的类型(如行锁、表锁)。
- 使用场景:分析表的锁等待情况,识别锁争用的问题。这对于解决并发控制中的死锁、长时间锁等待等问题非常有帮助。
threads
- 功能描述:此视图提供了MySQL服务器中所有线程(包括后台线程和用户会话)的详细信息,如线程ID、类型、状态、执行时间等。
- 使用场景:监控MySQL服务器中的线程活动,了解线程的运行状态和资源使用情况。这有助于诊断性能问题,如线程阻塞、资源争用等。
user_variables_by_thread
- 功能描述:此视图显示了每个线程(会话)中设置的用户定义变量的信息。
- 使用场景:分析会话级别的用户定义变量,了解这些变量是如何被使用的,以及它们是否可能对性能产生影响。此外,这也有助于调试和审计会话行为。
users
- 功能描述:此视图提供了当前连接到MySQL服务器的用户的信息,包括用户名、主机名、连接时间等。
- 使用场景:监控和审计当前连接到MySQL服务器的用户,确保只有授权的用户才能访问数据库。此外,这也有助于识别潜在的未授权访问或异常连接。
variables_by_thread
- 功能描述:此视图显示了每个线程(会话)中当前设置的系统变量的值。
- 使用场景:分析会话级别的系统变量设置,了解这些设置如何影响查询性能。此外,这也有助于调试和优化会话级别的配置,以提高性能和兼容性。通过比较不同会话的系统变量设置,可以识别出可能导致性能差异的配置差异。