MySQL 服务器维护了许多状态变量,以提供其操作信息(见 第 7.1.10 节,“服务器状态变量”)。状态变量信息可在这些性能模式表中找到:
-
global_status
:全局状态变量。想要仅获取全局值的应用程序应该使用该表。 -
session_status
:当前会话的状态变量。想要获取所有状态变量值的应用程序应该使用该表。它包括会话变量,以及没有会话对应的全局变量值。 -
status_by_thread
:每个活动会话的会话状态变量。想要知道特定会话的会话变量值的应用程序应该使用该表。它仅包括会话变量,按线程 ID 标识。
还有汇总表,提供按账户、主机名和用户名聚合的状态变量信息。见 第 29.12.20.12 节,“状态变量汇总表”。
会话变量表 (session_status
, status_by_thread
) 仅包含活动会话的信息,不包含已终止的会话。
性能模式仅对 INSTRUMENTED
值为 YES
的线程收集全局状态变量统计信息,在 threads
表中。会话状态变量统计信息总是被收集的,不管 INSTRUMENTED
值如何。
性能模式不收集 Com_
状态变量的统计信息在状态变量表中。要获取全局和每个会话的语句执行计数,请使用 xxx
events_statements_summary_global_by_event_name
和 events_statements_summary_by_thread_by_event_name
表,分别。
SELECT EVENT_NAME, COUNT_STAR
FROM performance_schema.events_statements_summary_global_by_event_name
WHERE EVENT_NAME LIKE 'statement/sql/%';
例如:
-
The
global_status
和session_status
表具有这些列:VARIABLE_NAME
-
状态变量名称。
VARIABLE_VALUE
状态变量值。对于 global_status
,该列包含全局值。对于 session_status
,该列包含当前会话的变量值。
-
The
global_status
和session_status
表具有这些索引:
主键在 (VARIABLE_NAME
)
-
The
status_by_thread
表包含每个活动线程的状态。它具有这些列:THREAD_ID
-
定义状态变量的会话的线程标识符。
状态变量名称。
-
VARIABLE_VALUE
会话变量值,用于会话名称由
THREAD_ID
列命名。
该 status_by_thread
表具有以下索引:
-
主键在 (
THREAD_ID
,VARIABLE_NAME
) 上
该 status_by_thread
表仅包含前台线程的状态变量信息。如果 performance_schema_max_thread_instances
系统变量未自动缩放(以 -1 为值)且允许的最大线程对象数不大于后台线程数,则该表为空。
性能模式支持 TRUNCATE TABLE
对状态变量表的操作如下:
-
global_status
:重置线程、账户、主机和用户状态。重置全局状态变量,除了服务器从不重置的变量。 -
session_status
:不支持。 -
status_by_thread
:聚合所有线程的状态到全局状态和账户状态,然后重置线程状态。如果不收集账户统计信息,则会话状态将被添加到主机和用户状态中,如果主机和用户状态被收集。如果
performance_schema_accounts_size
、performance_schema_hosts_size
和performance_schema_users_size
系统变量分别设置为 0,则不收集账户、主机和用户统计信息。
FLUSH STATUS
将所有活动会话的会话状态添加到全局状态变量中,重置所有活动会话的状态,并重置从断开的会话中聚合的账户、主机和用户状态值。