当前位置:   article > 正文

MySQL之自带四库之performance_schema库_mysql performance_schema

mysql performance_schema

一、performance_schema库简介

  Mysql5.7版本自带4个数据库,information_schema、mysql、performance_schema、sys。从MySQL 5.5开始新增PERFORMANCE_SCHEMA数据库,主要用于收集数据库服务器性能参数。并且库里表的存储引擎均为PERFORMANCE_SCHEMA,而用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表。而现在5.6,5.7中performance-Schema又添加了更多的监控项,统计信息也更丰富。MySQL5.5默认是关闭的,需要手动开启,在配置文件里添加performance_schema=ON,在5.7中performance-Schema库默认为开启状态。

二、表分类及表清单

1、表分类

performance_schema数据库中的表可以分为以下几类:

  • 设置表。这些表用于配置和显示监视特征。

setup_actors:如何初始化对新前台线程的监视
setup_consumers:可以将事件信息发送和存储到的目的地
setup_instruments:可以收集事件的检测对象的类别
setup_objects:应监视哪些对象
setup_timers:当前事件计时器

  • 当前事件表。该 events_waits_current表包含每个线程的最新事件。其他类似的表包含事件层次结构不同级别上的当前事件:events_stages_current 阶段事件, events_statements_current语句事件和 events_transactions_current事务事件。

  • 历史记录表。这些表与当前事件表具有相同的结构,但包含更多行。例如,对于等待事件,events_waits_history 表包含每个线程最近的10个事件。 events_waits_history_long 包含最近的10,000个事件。对于阶段,语句和事务历史记录,还存在其他类似的表。
    要更改历史记录表的大小,请在服务器启动时设置适当的系统变量。例如,要设置等待事件历史记录表的大小,请设置 performance_schema_events_waits_history_size 和 performance_schema_events_waits_history_long_size。

  • 汇总表。这些表包含按事件组聚合的信息,包括已从历史记录表中丢弃的事件。

  • 实例表。这些表记录了要检测的对象类型。服务器使用检测对象时,将产生一个事件。这些表提供事件名称和说明性注释或状态信息。

cond_instances:条件同步对象实例
file_instances:文件实例
mutex_instances:互斥对象同步对象实例
rwlock_instances:锁定同步对象实例
socket_instances:活动连接实例

  • 杂项表。这些不属于任何其他表组。

2、表清单

mysql> show tables;
±-----------------------------------------------------+
| Tables_in_performance_schema |
±-----------------------------------------------------+
| accounts |
| cond_instances |
| events_stages_current |
| events_stages_history |
| events_stages_history_long |
| events_stages_summary_by_account_by_event_name |
| events_stages_summary_by_host_by_event_name |
| events_stages_summary_by_thread_by_event_name |
| events_stages_summary_by_user_by_event_name |
| events_stages_summary_global_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_digest |
| events_statements_summary_by_host_by_event_name |
| events_statements_summary_by_program |
| events_statements_summary_by_thread_by_event_name |
| events_statements_summary_by_user_by_event_name |
| events_statements_summary_global_by_event_name |
| events_transactions_current |
| events_transactions_history |
| events_transactions_history_long |
| events_transactions_summary_by_account_by_event_name |
| 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_transactions_summary_global_by_event_name |
| events_waits_current |
| events_waits_history |
| events_waits_history_long |
| 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 |
| file_summary_by_event_name |
| file_summary_by_instance |
| global_status |
| global_variables |
| host_cache |
| hosts |
| memory_summary_by_account_by_event_name |
| memory_summary_by_host_by_event_name |
| memory_summary_by_thread_by_event_name |
| memory_summary_by_user_by_event_name |
| memory_summary_global_by_event_name |
| metadata_locks |
| mutex_instances |
| objects_summary_global_by_type |
| performance_timers |
| prepared_statements_instances |
| replication_applier_configuration |
| replication_applier_status |
| replication_applier_status_by_coordinator |
| replication_applier_status_by_worker |
| replication_connection_configuration |
| replication_connection_status |
| replication_group_member_stats |
| replication_group_members |
| rwlock_instances |
| session_account_connect_attrs |
| session_connect_attrs |
| session_status |
| session_variables |
| setup_actors |
| setup_consumers |
| setup_instruments |
| setup_objects |
| setup_timers |
| socket_instances |
| socket_summary_by_event_name |
| socket_summary_by_instance |
| status_by_account |
| status_by_host |
| status_by_thread |
| status_by_user |
| table_handles |
| table_io_waits_summary_by_index_usage |
| table_io_waits_summary_by_table |
| table_lock_waits_summary_by_table |
| threads |
| user_variables_by_thread |
| users |
| variables_by_thread |
±-----------------------------------------------------+
87 rows in set (0.00 sec)

三、分表介绍

1、分表简介

表名描述
accounts每个客户帐户的连接统计信息
cond_instances同步对象实例
events_stages_current当前阶段的事件
events_stages_history每个线程的最近阶段事件
events_stages_history_long总体上最近的舞台活动
events_stages_summary_by_account_by_event_name每个帐户和事件名称的登台事件
events_stages_summary_by_host_by_event_name根据主机名和事件名进行事件
events_stages_summary_by_thread_by_event_name每个线程和事件名称的阶段等待
events_stages_summary_by_user_by_event_name根据用户名和事件名进行事件
events_stages_summary_global_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_digest每个架构的语句事件和摘要值
events_statements_summary_by_host_by_event_name每个主机名和事件名的语句事件
events_statements_summary_by_program每个存储程序的语句事件
events_statements_summary_by_thread_by_event_name每个线程和事件名称的语句事件
events_statements_summary_by_user_by_event_name每个用户名和事件名的语句事件
events_statements_summary_global_by_event_name每个事件名称的语句事件
events_transactions_current当前交易事件
events_transactions_history每个线程的最新事务事件
events_transactions_history_long总体上最近的交易事件
events_transactions_summary_by_account_by_event_name每个帐户和事件名称的交易事件
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_transactions_summary_global_by_event_name每个事件名称的交易事件
events_waits_current当前的等待事件
events_waits_history每个线程的最新等待事件
events_waits_history_long总体上最近的等待事件
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文件实例
file_summary_by_event_name每个事件名称的文件事件
file_summary_by_instance每个文件实例的文件事件
global_status全局状态变量
global_variables全局系统变量
host_cache来自内部主机缓存的信息
hosts每个客户端主机名的连接统计信息
memory_summary_by_account_by_event_name每个帐户和事件名称的内存操作
memory_summary_by_host_by_event_name每个主机和事件名称的内存操作
memory_summary_by_thread_by_event_name每个线程和事件名称的内存操作
memory_summary_by_user_by_event_name每个用户和事件名称的内存操作
memory_summary_global_by_event_name每个事件名称的全局内存操作
metadata_locks元数据锁定和锁定请求
mutex_instances互斥体同步对象实例
objects_summary_global_by_type对象摘要
performance_timers哪些事件计时器可用
prepared_statements_instances准备的语句实例和统计信息
replication_applier_configuration副本上事务处理程序的配置参数
replication_applier_status副本上事务处理应用程序的当前状态
replication_applier_status_by_coordinatorSQL或协调器线程应用程序状态
replication_applier_status_by_worker工作线程应用程序状态(除非副本为多线程,否则为空)
replication_connection_configuration用于连接到源的配置参数
replication_connection_status到源的连接的当前状态
rwlock_instances锁定同步对象实例
session_account_connect_attrs当前会话的连接属性
session_connect_attrs所有会话的连接属性
session_status当前会话的状态变量
session_variables当前会话的系统变量
setup_actors如何初始化对新前台线程的监视
setup_consumers列出了可以存储事件信息并启用事件的使用者类型
setup_instruments可以为其收集事件的检测对象的类
setup_objects应该监视哪些对象
setup_timers当前事件计时器
socket_instances活动连接实例
socket_summary_by_event_name套接字等待和每个事件名称的I / O
socket_summary_by_instance套接字等待和每个实例的I / O
status_by_account每个帐户的会话状态变量
status_by_host每个主机名的会话状态变量
status_by_thread每个会话的会话状态变量
status_by_user每个用户名的会话状态变量
table_handles表锁和锁请求
table_io_waits_summary_by_index_usage每个索引的表I / O等待
table_io_waits_summary_by_table每个表的表I / O等待
table_lock_waits_summary_by_table每个表的表锁定等待
threads有关服务器线程的信息
user_variables_by_thread每个线程的用户定义变量
users每个客户端用户名的连接统计信息
variables_by_thread每个会话的会话系统变量

2、表字段说明

1)、setup_actors表

该setup_actors表包含以下列:

  • HOST
    主机名。此名称应为文字名称,或 '%'表示“任何主机。”
  • USER
    用户名。该名称应为文字名称,或 '%'表示“任何用户。”
  • ROLE
    未使用。
  • ENABLED
    是否为与行匹配的前景线程启用检测。值为YES或 NO。
  • HISTORY
    是否为该行匹配的前景线程记录历史事件。值为YES或 NO

2)、setup_consumers表

该setup_consumers表包含以下列:

  • NAME
    消费者名称。
  • ENABLED
    是否启用使用者。值为 YES或NO。可以修改此列。如果禁用使用者,则服务器不会花费时间向其添加事件信息。

3)、setup_instruments表

该setup_instruments表包含以下列:

  • NAME
    仪器名称。仪器名称可能具有多个部分,并形成一个层次结构。执行工具产生的事件具有 EVENT_NAME从工具NAME值中获取的值。(事件实际上并没有一个“名称”,但这提供了一种将事件与乐器关联的方法。)
  • ENABLED
    仪器是否启用。值为 YES或NO。禁用的乐器不产生任何事件。尽管此设置ENABLED对已创建的乐器无效,但可以修改此列。
  • TIMED
    仪器是否定时。值为 YES或NO。尽管此设置TIMED对已创建的乐器无效,但可以修改此列 。对于存储工具, 由于未对存储操作进行计时TIMED ,setup_instruments因此忽略了in列。
    如果未对启用的仪器计时,则仪器代码被启用,但计时器未启用。由仪器产生的事件具有NULL用于 TIMER_START, TIMER_END和 TIMER_WAIT计时器值。反过来,当在汇总表中计算总和,最小,最大和平均时间值时,这些值将被忽略。

4)、setup_objects表

setup_objects表控制性能模式是否监视特定对象。默认情况下,此表的最大大小为100行。该setup_objects表包含以下列:

  • OBJECT_TYPE
    要测量的对象的类型。该值是 ‘EVENT’(事件调度程序事件), ‘FUNCTION’(存储函数), ‘PROCEDURE’(存储过程), ‘TABLE’(基本表)或 ‘TRIGGER’(触发)之一。
    TABLE筛选会影响表I / O事件(wait/io/table/sql/handler 仪器)和表锁定事件(wait/lock/table/sql/handler 仪器)。
  • OBJECT_SCHEMA
    包含对象的架构。该名称应为文字名称,或’%'表示“任何模式”。”
  • OBJECT_NAME
    被检测对象的名称。该名称应为文字名称,或’%'表示“任何对象。”
  • ENABLED
    是否检测对象的事件。值为YES或NO。可以修改此列。
  • TIMED
    对象的事件是否定时。值为 YES或NO。可以修改此列。

5)、setup_timers表

该setup_timers表包含以下列:

  • NAME
    计时器用于的乐器类型。
  • TIMER_NAME
    适用于乐器类型的计时器。可以修改此列。

6)、cond_instances表

cond_instances表列出了服务器执行时性能架构所看到的所有条件。条件是代码中使用的一种同步机制,用于指示发生了特定事件,以便等待此条件的线程可以恢复工作。当一个线程正在等待某种情况发生时,条件名称指示该线程正在等待什么,但是没有立即的方法来判断哪个其他线程导致了这种情况发生。
该cond_instances表包含以下列:

  • NAME
    与条件关联的仪器名称。
  • OBJECT_INSTANCE_BEGIN
    检测条件在内存中的地址。

7)、file_instances表

该file_instances表列出了在执行文件I / O检测时性能架构看到的所有文件。如果从未打开过磁盘上的文件,则该文件不在中 file_instances。从磁盘删除文件后,该文件也会从file_instances表中删除 。
该file_instances表包含以下列:

  • FILE_NAME
    文件名。
  • EVENT_NAME
    与文件关联的仪器名称。
  • OPEN_COUNT
    文件上打开的句柄数。如果先打开然后关闭文件,则打开1次,但打开 OPEN_COUNT0次。要列出服务器当前打开的所有文件,请使用WHERE OPEN_COUNT > 0。

8)、Mutex_instances表

该mutex_instances表列出了服务器执行时性能架构看到的所有互斥锁。互斥锁是代码中使用的一种同步机制,用于强制在给定时间只有一个线程可以访问某些公共资源。据说该资源已由互斥体“保护”。
当服务器中执行的两个线程(例如,同时执行查询的两个用户会话)确实需要访问相同的资源(文件,缓冲区或某些数据)时,这两个线程相互竞争,因此要获得互斥锁的第一个查询会导致另一个查询等待,直到第一个查询完成并解锁互斥锁。持有互斥锁时执行的工作被称为在 “关键部分”中,并且多个查询确实以串行方式(一次一个)执行该关键部分,这是潜在的瓶颈。
该mutex_instances表包含以下列:

  • NAME
    与互斥锁关联的乐器名称。
  • OBJECT_INSTANCE_BEGIN
    已检测互斥锁在内存中的地址。
  • LOCKED_BY_THREAD_ID
    当前线程已锁定互斥锁时, LOCKED_BY_THREAD_ID为 THREAD_ID锁定线程的,否则为NULL。

通过对以下两个表执行查询,监视应用程序或DBA可以检测到涉及互斥锁的线程之间的瓶颈或死锁:

  • events_waits_current,以查看线程正在等待什么互斥锁
  • mutex_instances,查看哪个其他线程当前拥有互斥锁

9)、rwlock_instances表

rwlock_instances表列出了服务器执行时性能架构看到的所有rwlock(读锁定)实例。Anrwlock是一种代码中使用的同步机制,用于强制给定时间的线程可以按照某些规则访问某些公共资源。该资源被说成是 “保护”由rwlock。访问权限可以是共享的(许多线程可以同时具有读锁),互斥的(排他(在给定时间只有一个线程可以具有写锁))或共享的互斥性(一个线程可以在允许不一致时具有写锁)由其他线程读取)。共享独占访问也称为,它可以 sxlock优化并发性并提高读写工作负载的可伸缩性。
根据请求锁的线程数以及请求的锁的性质,可以在共享模式,独占模式,共享独占模式下授予访问权限,也可以根本不授予访问权限,以等待其他线程先完成。
该rwlock_instances表包含以下列:

  • NAME
    与锁关联的乐器名称。
  • OBJECT_INSTANCE_BEGIN
    已检测锁的内存中的地址。
  • WRITE_LOCKED_BY_THREAD_ID
    当一个线程目前已形成rwlock 以独占(写入)模式锁定, WRITE_LOCKED_BY_THREAD_ID是 THREAD_ID锁定的线程,否则NULL。
  • READ_LOCKED_BY_COUNT
    当前线程rwlock 在共享(读取)模式下处于锁定状态时, READ_LOCKED_BY_COUNT将增加1。这仅是一个计数器,因此无法直接用于查找哪个线程持有读取锁定,但可以用于查看是否存在读取锁定。上的阅读争用 rwlock,并查看当前有多少个读者处于活动状态。

通过对以下两个表执行查询,监视应用程序或DBA可以检测到涉及锁的线程之间的某些瓶颈或死锁:

  • events_waits_current,以查看rwlock线程正在等待 什么
  • rwlock_instances,以查看当前哪个其他线程拥有一个 rwlock
    有一个限制: rwlock_instances只能用于标识持有写锁的线程,而不能标识持有读锁的线程。

10)、socket_instances表

该socket_instances表提供了与MySQL服务器的活动连接的实时快照。该表每个TCP / IP或Unix套接字文件连接包含一行。该表中可用的信息提供了到服务器的活动连接的实时快照。
套接字工具的格式名称 如下: wait/io/socket/sql/socket_type
服务器为它支持的每个网络协议都有一个侦听套接字。与用于TCP / IP或Unix套接字文件连接的侦听套接字关联的工具的socket_type 值分别为server_tcpip_socket或 server_unix_socket。
当侦听套接字检测到连接时,服务器会将连接转移到由单独线程管理的新套接字。新连接线程的工具的socket_type值为client_connection。
连接终止时,将socket_instances 删除与之对应的行 。
该socket_instances表包含以下列:

  • EVENT_NAME
    wait/io/socket/* 产生事件 的仪器的名称。这是表中的 NAME值 setup_instruments。仪器名称可能具有多个部分,并形成一个层次结构。
  • OBJECT_INSTANCE_BEGIN
    此列唯一标识套接字。该值是对象在内存中的地址。
  • THREAD_ID
    服务器分配的内部线程标识符。每个套接字由一个线程管理,因此每个套接字可以映射到一个线程,该线程可以映射到服务器进程。
  • SOCKET_ID
    分配给套接字的内部文件句柄。
  • IP
    客户端IP地址。该值可以是IPv4或IPv6地址,也可以是空白以指示Unix套接字文件连接。
  • PORT
    TCP / IP端口号,范围为0到65535。
  • STATE
    套接字状态为IDLE或 ACTIVE。使用相应的插座仪器跟踪活动插座的等待时间。使用idle仪器跟踪空闲插槽的等待时间 。
    如果套接字正在等待客户端的请求,则它是空闲的。当套接字空闲时,socket_instances跟踪该套接字的事件行 将从状态切换 ACTIVE为IDLE。该 EVENT_NAME值保持不变 wait/io/socket/*,但仪器的计时已暂停。而是在events_waits_current 表中生成一个EVENT_NAME值为的事件 idle。
    收到下一个请求时, idle事件终止,套接字实例从切换IDLE为 ACTIVE,套接字工具的计时恢复。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/121843
推荐阅读
相关标签
  

闽ICP备14008679号