MySQL8 中文参考(一百零八)
原文:
dev.mysql.com/doc/refman/8.0/en/performance-schema-events-statements-current-table.html
29.12.6.1 events_statements_current 表
events_statements_current表包含当前语句事件。该表为每个线程存储一行,显示线程最近监视语句事件的当前状态,因此没有用于配置表大小的系统变量。
在包含语句事件行的表中,events_statements_current是最基本的。其他包含语句事件行的表从当前事件逻辑派生。例如,events_statements_history和events_statements_history_long表是最近已结束的语句事件的集合,每个线程最多一定数量的行,并在全局范围内跨所有线程。
有关三个events_statements_*xxx*事件表之间关系的更多信息,请参见第 29.9 节,“当前和历史事件的性能模式表”。
有关配置是否收集语句事件的信息,请参见第 29.12.6 节,“性能模式语句事件表”。
events_statements_current表具有以下列:
-
THREAD_ID,EVENT_ID与事件相关联的线程和事件开始时的线程当前事件编号。
THREAD_ID和EVENT_ID值组合在一起唯一标识行。没有两行具有相同的数值对。 -
END_EVENT_ID当事件开始时,此列设置为
NULL,并在事件结束时更新为线程当前事件编号。 -
EVENT_NAME从中收集事件的仪器的名称。这是来自
setup_instruments表的NAME值。仪器名称可能有多个部分并形成层次结构,如第 29.6 节,“性能模式仪器命名约定”中所讨论的那样。对于 SQL 语句,
EVENT_NAME值最初为statement/com/Query,直到语句被解析,然后根据需要更改为更合适的值,如第 29.12.6 节,“性能模式语句事件表”中所述。 -
SOURCE包含产生事件的仪器代码的源文件的名称以及发生仪器化的文件中的行号。这使您可以检查源代码以确定涉及的确切代码。
-
TIMER_START,TIMER_END,TIMER_WAIT事件的时间信息。这些值的单位为皮秒(万亿分之一秒)。
TIMER_START和TIMER_END值指示事件计时开始和结束的时间。TIMER_WAIT是事件经过的时间(持续时间)。如果事件尚未完成,则
TIMER_END是当前计时器值,TIMER_WAIT是到目前为止经过的时间(TIMER_END−TIMER_START)。如果事件是由
TIMED = NO的仪器产生的,则不会收集时间信息,TIMER_START,TIMER_END和TIMER_WAIT都是NULL。有关事件时间单位为皮秒和影响时间值的因素的讨论,请参见第 29.4.1 节,“性能模式事件定时”。
-
LOCK_TIME等待表锁的时间。此值以微秒计算,但为了与其他性能模式计时器更容易比较,已标准化为皮秒。
-
SQL_TEXTSQL 语句的文本。对于与 SQL 语句不相关的命令,该值为
NULL。语句显示的最大空间默认为 1024 字节。要更改此值,请在服务器启动时设置
performance_schema_max_sql_text_length系统变量。(更改此值还会影响其他性能模式表中的列。请参见第 29.10 节,“性能模式语句摘要和抽样”。) -
DIGEST语句摘要 SHA-256 值,以 64 个十六进制字符的字符串表示,如果
statements_digest消费者为no,则为NULL。有关语句摘要的更多信息,请参见第 29.10 节,“性能模式语句摘要和抽样”。 -
DIGEST_TEXT标准化的语句摘要文本,或者如果
statements_digest消费者为no,则为NULL。有关语句摘要的更多信息,请参见第 29.10 节,“性能模式语句摘要和抽样”。performance_schema_max_digest_length系统变量确定每个会话用于摘要值存储的最大字节数。然而,由于在摘要缓冲区中对语句元素(如关键字和文字值)进行编码,语句摘要的显示长度可能超过可用缓冲区大小。因此,从语句事件表的DIGEST_TEXT列中选择的值可能会超过performance_schema_max_digest_length的值。 -
CURRENT_SCHEMA语句的默认数据库,如果没有则为
NULL。 -
OBJECT_SCHEMA,OBJECT_NAME,OBJECT_TYPE对于嵌套语句(存储过程),这些列包含有关父语句的信息。否则,它们为
NULL。 -
OBJECT_INSTANCE_BEGIN此列标识语句。该值是内存中对象的地址。
-
MYSQL_ERRNO语句错误编号,来自语句诊断区域。
-
RETURNED_SQLSTATE语句的 SQLSTATE 值,来自语句诊断区域。
-
MESSAGE_TEXT语句错误消息,来自语句诊断区域。
-
ERRORS语句是否发生错误。如果 SQLSTATE 值以
00(完成)或01(警告)开头,则值为 0。如果 SQLSTATE 值为其他值,则值为 1。 -
WARNINGS来自语句诊断区域的警告数量。
-
ROWS_AFFECTED语句影响的行数。有关“受影响”的含义,请参阅 mysql_affected_rows()。
-
ROWS_SENT语句返回的行数。
-
ROWS_EXAMINED服务器层检查的行数(不包括存储引擎内部处理)。
-
CREATED_TMP_DISK_TABLES类似于
Created_tmp_disk_tables状态变量,但特定于语句。 -
CREATED_TMP_TABLES类似于
Created_tmp_tables状态变量,但特定于语句。 -
SELECT_FULL_JOIN类似于
Select_full_join状态变量,但特定于语句。 -
SELECT_FULL_RANGE_JOIN类似于
Select_full_range_join状态变量,但特定于语句。 -
SELECT_RANGE类似于
Select_range状态变量,但特定于语句。 -
SELECT_RANGE_CHECK类似于
Select_range_check状态变量,但特定于语句。 -
SELECT_SCAN类似于
Select_scan状态变量,但特定于语句。 -
SORT_MERGE_PASSES类似于
Sort_merge_passes状态变量,但特定于语句。 -
SORT_RANGE类似于
Sort_range状态变量,但特定于语句。 -
SORT_ROWS类似于
Sort_rows状态变量,但特定于语句。 -
SORT_SCAN类似于
Sort_scan状态变量,但特定于语句。 -
NO_INDEX_USED如果语句执行了不使用索引的表扫描,则为 1,否则为 0。
-
NO_GOOD_INDEX_USED如果服务器找不到适合语句的好索引,则为 1,否则为 0。有关更多信息,请参见 第 10.8.2 节,“EXPLAIN 输出格式” 中
EXPLAIN输出的Range checked for each record值的Extra列描述。 -
NESTING_EVENT_ID、NESTING_EVENT_TYPE、NESTING_EVENT_LEVEL这三列与其他列一起用于为顶层(非嵌套)语句和嵌套语句(在存储过程中执行)提供以下信息。
对于顶层语句:
OBJECT_TYPE = NULL OBJECT_SCHEMA = NULL OBJECT_NAME = NULL NESTING_EVENT_ID = the parent transaction EVENT_ID NESTING_EVENT_TYPE = 'TRANSACTION' NESTING_LEVEL = 0对于嵌套语句:
OBJECT_TYPE = the parent statement object type OBJECT_SCHEMA = the parent statement object schema OBJECT_NAME = the parent statement object name NESTING_EVENT_ID = the parent statement EVENT_ID NESTING_EVENT_TYPE = 'STATEMENT' NESTING_LEVEL = the parent statement NESTING_LEVEL plus one -
STATEMENT_ID服务器在 SQL 级别维护的查询 ID。该值对于服务器实例是唯一的,因为这些 ID 是使用原子递增的全局计数器生成的。该列在 MySQL 8.0.14 中添加。
-
CPU_TIME当前线程在 CPU 上花费的时间,以皮秒表示。该列在 MySQL 8.0.28 中添加。
-
MAX_CONTROLLED_MEMORY报告语句在执行过程中使用的最大受控内存量。
该列在 MySQL 8.0.31 中添加。
-
MAX_TOTAL_MEMORY报告语句在执行过程中使用的最大内存量。
该列在 MySQL 8.0.31 中添加。
-
EXECUTION_ENGINE查询执行引擎。该值为
PRIMARY或SECONDARY。用于 MySQL HeatWave 服务和 HeatWave,其中PRIMARY引擎为InnoDB,SECONDARY引擎为 HeatWave(RAPID)。对于 MySQL Community Edition Server、MySQL Enterprise Edition Server(本地)和没有 HeatWave 的 MySQL HeatWave 服务,该值始终为PRIMARY。该列在 MySQL 8.0.29 中添加。
events_statements_current 表具有以下索引:
- 主键为 (
THREAD_ID,EVENT_ID)。
TRUNCATE TABLE 允许用于 events_statements_current 表。它会删除行。
原文:
dev.mysql.com/doc/refman/8.0/en/performance-schema-events-statements-history-table.html
29.12.6.2 events_statements_history 表
events_statements_history表包含每个线程已结束的*N*个最近的语句事件。语句事件直到结束后才会添加到表中。当表包含给定线程的最大行数时,当为该线程添加新行时,最旧的线程行将被丢弃。当线程结束时,其所有行都将被丢弃。
性能模式在服务器启动时自动调整*N*的值。要显式设置每个线程的行数,请在服务器启动时设置performance_schema_events_statements_history_size系统变量。
events_statements_history表具有与events_statements_current相同的列和索引。请参阅 Section 29.12.6.1, “events_statements_current 表”。
TRUNCATE TABLE允许用于events_statements_history表。它会删除行。
要了解三个events_statements_*xxx*事件表之间的关系,请参阅 Section 29.9, “当前和历史事件的性能模式表”。
有关配置是否收集语句事件的信息,请参阅 Section 29.12.6, “性能模式语句事件表”。
原文:
dev.mysql.com/doc/refman/8.0/en/performance-schema-events-statements-history-long-table.html
29.12.6.3 events_statements_history_long 表
events_statements_history_long 表包含全局结束的 N 最近语句事件,跨所有线程。语句事件直到结束后才会添加到表中。当表满时,当添加新行时,最旧的行将被丢弃,无论哪个线程生成了这两行。
N 的值在服务器启动时会自动调整大小。要显式设置表大小,请在服务器启动时设置performance_schema_events_statements_history_long_size系统变量。
events_statements_history_long 表与 events_statements_current 表具有相同的列。请参见第 29.12.6.1 节,“events_statements_current 表”。与 events_statements_current 不同,events_statements_history_long 没有索引。
TRUNCATE TABLE 允许用于 events_statements_history_long 表。它会删除行。
关于三个 events_statements_*xxx* 事件表之间的关系的更多信息,请参见第 29.9 节,“当前和历史事件的性能模式表”。
有关配置是否收集语句事件的信息,请参见第 29.12.6 节,“性能模式语句事件表”。
原文:
dev.mysql.com/doc/refman/8.0/en/performance-schema-prepared-statements-instances-table.html
29.12.6.4 prepared_statements_instances 表
Performance Schema 为准备语句提供了仪表化,有两种协议:
-
二进制协议。通过 MySQL C API 访问,映射到下表中显示的底层服务器命令。
C API 函数 对应的服务器命令 mysql_stmt_prepare()COM_STMT_PREPAREmysql_stmt_execute()COM_STMT_EXECUTEmysql_stmt_close()COM_STMT_CLOSE -
文本协议。通过 SQL 语句访问,映射到下表中显示的底层服务器命令。
SQL 语句 对应的服务器命令 PREPARESQLCOM_PREPAREEXECUTESQLCOM_EXECUTEDEALLOCATE PREPARE,DROP PREPARESQLCOM_DEALLOCATE PREPARE
Performance Schema 准备语句仪表化涵盖了两种协议。以下讨论涉及服务器命令,而不是 C API 函数或 SQL 语句。
有关准备语句的信息可在 prepared_statements_instances 表中找到。此表允许检查服务器中使用的准备语句,并提供有关它们的聚合统计信息。要控制此表的大小,请在服务器启动时设置 performance_schema_max_prepared_statements_instances 系统变量。
收集准备语句信息取决于下表中显示的语句工具。这些工具默认启用。要修改它们,请更新 setup_instruments 表。
| 工具 | 服务器命令 |
|---|---|
statement/com/Prepare | COM_STMT_PREPARE |
statement/com/Execute | COM_STMT_EXECUTE |
statement/sql/prepare_sql | SQLCOM_PREPARE |
statement/sql/execute_sql | SQLCOM_EXECUTE |
Performance Schema 管理 prepared_statements_instances 表的内容如下:
-
语句准备
COM_STMT_PREPARE或SQLCOM_PREPARE命令在服务器中创建一个预处理语句。如果成功地对语句进行了仪表化,将向prepared_statements_instances表中添加一行新记录。如果无法对语句进行仪表化,则会增加Performance_schema_prepared_statements_lost状态变量。 -
预处理语句执行
对于仪表化预处理语句实例的
COM_STMT_EXECUTE或SQLCOM_PREPARE命令的执行将更新相应的prepared_statements_instances表行。 -
预处理语句释放
对于仪表化预处理语句实例的
COM_STMT_CLOSE或SQLCOM_DEALLOCATE_PREPARE命令的执行将删除相应的prepared_statements_instances表行。为避免资源泄漏,即使禁用了先前描述的预处理语句仪表化,也会发生删除。
prepared_statements_instances表具有这些列:
-
OBJECT_INSTANCE_BEGIN仪表化预处理语句的内存地址。
-
STATEMENT_ID服务器分配的内部语句 ID。文本和二进制协议都使用语句 ID。
-
STATEMENT_NAME对于二进制协议,此列为
NULL。对于文本协议,此列为用户分配的外部语句名称。例如,对于以下 SQL 语句,预处理语句的名称为stmt:PREPARE stmt FROM 'SELECT 1'; -
SQL_TEXT带有
?占位符标记的预处理语句文本。 -
OWNER_THREAD_ID,OWNER_EVENT_ID这些列指示创建预处理语句的事件。
-
OWNER_OBJECT_TYPE,OWNER_OBJECT_SCHEMA,OWNER_OBJECT_NAME对于由客户端会话创建的预处理语句,这些列为
NULL。对于由存储过程创建的预处理语句,这些列指向存储过程。一个典型的用户错误是忘记释放预处理语句。这些列可用于查找泄漏预处理语句的存储过程:SELECT OWNER_OBJECT_TYPE, OWNER_OBJECT_SCHEMA, OWNER_OBJECT_NAME, STATEMENT_NAME, SQL_TEXT FROM performance_schema.prepared_statements_instances WHERE OWNER_OBJECT_TYPE IS NOT NULL; -
查询执行引擎。其值为
PRIMARY或SECONDARY。用于 MySQL HeatWave 服务和 HeatWave,其中PRIMARY引擎为InnoDB,SECONDARY引擎为 HeatWave(RAPID)。对于 MySQL 社区版服务器、MySQL 企业版服务器(本地)和没有 HeatWave 的 MySQL HeatWave 服务,该值始终为PRIMARY。此列在 MySQL 8.0.29 中添加。 -
TIMER_PREPARE执行语句准备本身所花费的时间。
-
COUNT_REPREPARE语句在内部重新准备的次数(参见第 10.10.3 节,“准备语句和存储程序的缓存”)。重新准备的时间统计数据不可用,因为它被计算为语句执行的一部分,而不是作为单独的操作。
-
COUNT_EXECUTE,SUM_TIMER_EXECUTE,MIN_TIMER_EXECUTE,AVG_TIMER_EXECUTE,MAX_TIMER_EXECUTE准备语句执行的聚合统计数据。
-
SUM_*xxx*剩余的
SUM_*xxx*列与语句摘要表相同(参见第 29.12.20.3 节,“语句摘要表”)。 -
MAX_CONTROLLED_MEMORY报告了执行期间准备语句使用的受控内存的最大量。
此列在 MySQL 8.0.31 中添加。
-
MAX_TOTAL_MEMORY报告了执行期间准备语句使用的最大内存量。
此列在 MySQL 8.0.31 中添加。
prepared_statements_instances表具有以下索引:
-
在(
OBJECT_INSTANCE_BEGIN)上的主键 -
在(
STATEMENT_ID)上的索引 -
在(
STATEMENT_NAME)上的索引 -
在(
OWNER_THREAD_ID,OWNER_EVENT_ID)上的索引 -
在(
OWNER_OBJECT_TYPE,OWNER_OBJECT_SCHEMA,OWNER_OBJECT_NAME)上的索引
TRUNCATE TABLE 重置prepared_statements_instances表的统计列。
29.12.7 性能模式事务表
原文:
dev.mysql.com/doc/refman/8.0/en/performance-schema-transaction-tables.html
性能模式对事务进行仪表化。在事件层次结构中,等待事件嵌套在阶段事件中,阶段事件嵌套在语句事件中,语句事件嵌套在事务事件中。
这些表存储事务事件:
-
events_transactions_current: 每个线程的当前事务事件。 -
events_transactions_history: 每个线程结束的最近事务事件。 -
events_transactions_history_long: 全局结束的最近事务事件(跨所有线程)。
以下部分描述了事务事件表。还有汇总表汇总有关事务事件的信息;参见第 29.12.20.5 节,“事务汇总表”。
有关三个事务事件表之间关系的更多信息,请参见第 29.9 节,“当前和历史事件的性能模式表”。
配置事务事件收集
要控制是否收集事务事件,请设置相关工具和消费者的状态:
-
setup_instruments表包含一个名为transaction的工具。使用此工具来启用或禁用单个事务事件类的收集。 -
setup_consumers表包含与当前和历史事务事件表名称对应的消费者值。使用这些消费者来过滤事务事件的收集。
transaction工具和events_transactions_current以及events_transactions_history事务消费者默认启用:
mysql> SELECT NAME, ENABLED, TIMED
FROM performance_schema.setup_instruments
WHERE NAME = 'transaction';
+-------------+---------+-------+
| NAME | ENABLED | TIMED |
+-------------+---------+-------+
| transaction | YES | YES |
+-------------+---------+-------+
mysql> SELECT *
FROM performance_schema.setup_consumers
WHERE NAME LIKE 'events_transactions%';
+----------------------------------+---------+
| NAME | ENABLED |
+----------------------------------+---------+
| events_transactions_current | YES |
| events_transactions_history | YES |
| events_transactions_history_long | NO |
+----------------------------------+---------+
要在服务器启动时控制事务事件的收集,请在您的my.cnf文件中使用类似以下行:
-
启用:
[mysqld] performance-schema-instrument='transaction=ON' performance-schema-consumer-events-transactions-current=ON performance-schema-consumer-events-transactions-history=ON performance-schema-consumer-events-transactions-history-long=ON -
禁用:
[mysqld] performance-schema-instrument='transaction=OFF' performance-schema-consumer-events-transactions-current=OFF performance-schema-consumer-events-transactions-history=OFF performance-schema-consumer-events-transactions-history-long=OFF
要在运行时控制事务事件的收集,请更新setup_instruments和setup_consumers表:
-
启用:
UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES' WHERE NAME = 'transaction'; UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE 'events_transactions%'; -
禁用:
UPDATE performance_schema.setup_instruments SET ENABLED = 'NO', TIMED = 'NO' WHERE NAME = 'transaction'; UPDATE performance_schema.setup_consumers SET ENABLED = 'NO' WHERE NAME LIKE 'events_transactions%';
为了仅收集特定事务事件表的事务事件,启用transaction工具,但仅启用与所需表对应的事务消费者。
有关配置事件收集的其他信息,请参见第 29.3 节“性能模式启动配置”和第 29.4 节“性能模式运行时配置”。
事务边界
在 MySQL 服务器中,事务明确以以下语句开始:
START TRANSACTION | BEGIN | XA START | XA BEGIN
事务也会隐式开始。例如,当启用autocommit系统变量时,每个语句的开始都会启动一个新事务。
当禁用autocommit时,提交事务后的第一条语句标志着新事务的开始。直到提交为止,后续语句都属于该事务。
事务明确以以下语句结束:
COMMIT | ROLLBACK | XA COMMIT | XA ROLLBACK
事务也会隐式结束,通过 DDL 语句、锁定语句和服务器管理语句的执行。
在下面的讨论中,对START TRANSACTION的引用也适用于BEGIN,XA START和XA BEGIN。同样,对COMMIT和ROLLBACK的引用也适用于XA COMMIT和XA ROLLBACK。
性能模式定义事务边界与服务器类似。事务事件的开始和结束与服务器中相应的状态转换非常相似:
-
对于显式启动的事务,事务事件在处理
START TRANSACTION语句期间开始。 -
对于隐式启动的事务,事务事件从上一个事务结束后第一次使用事务引擎的语句开始。
-
对于任何事务,无论是显式还是隐式结束,事务事件在服务器在处理
COMMIT或ROLLBACK期间转换出活动事务状态时结束。
这种方法有微妙的含义:
-
性能模式中的事务事件并不完全包括与相应的
START TRANSACTION,COMMIT或ROLLBACK语句相关联的语句事件。事务事件与这些语句之间存在微小的时间重叠。 -
使用非事务引擎的语句对连接的事务状态没有影响。对于隐式事务,事务事件从第一个使用事务引擎的语句开始。这意味着仅在非事务表上操作的语句将被忽略,即使在
START TRANSACTION之后也是如此。
举例说明,考虑以下情景:
1\. SET autocommit = OFF;
2\. CREATE TABLE t1 (a INT) ENGINE = InnoDB;
3\. START TRANSACTION; -- Transaction 1 START
4\. INSERT INTO t1 VALUES (1), (2), (3);
5\. CREATE TABLE t2 (a INT) ENGINE = MyISAM; -- Transaction 1 COMMIT
-- (implicit; DDL forces commit)
6\. INSERT INTO t2 VALUES (1), (2), (3); -- Update nontransactional table
7\. UPDATE t2 SET a = a + 1; -- ... and again
8\. INSERT INTO t1 VALUES (4), (5), (6); -- Write to transactional table
-- Transaction 2 START (implicit)
9\. COMMIT; -- Transaction 2 COMMIT
从服务器的角度看,事务 1 在表t2创建时结束。事务 2 直到访问事务表时才开始,尽管在此期间更新了非事务表。
从性能模式的角度看,当服务器转换为活动事务状态时,事务 2 开始。语句 6 和 7 不包括在事务 2 的范围内,这与服务器将事务写入二进制日志的方式一致。
事务仪表化
三个属性定义了事务:
-
访问模式(只读,读写)
-
隔离级别(
SERIALIZABLE,REPEATABLE READ,等等) -
隐式(启用
autocommit)或显式(禁用autocommit)
为了减少事务仪表化的复杂性,并确保收集的事务数据提供完整、有意义的结果,所有事务都是独立于访问模式、隔离级别或自动提交模式进行仪表化的。
要选择性地检查事务历史记录,请使用事务事件表中的属性列:ACCESS_MODE,ISOLATION_LEVEL和AUTOCOMMIT。
可以通过各种方式减少事务仪表化的成本,例如根据用户、账户、主机或线程(客户端连接)启用或禁用事务仪表化。
事务和嵌套事件
事务事件的父级是启动事务的事件。对于显式启动的事务,这包括START TRANSACTION和COMMIT AND CHAIN语句。对于隐式启动的事务,它是在上一个事务结束后第一个使用事务引擎的语句。
一般来说,事务是在事务期间启动的所有事件的最高级父级,包括明确结束事务的语句,比如COMMIT和ROLLBACK。异常情况是隐式结束事务的语句,比如 DDL 语句,在这种情况下,必须在执行新语句之前提交当前事务。
事务和存储程序
事务和存储程序事件相关如下:
-
存储过程
存储过程独立于事务运行。存储过程可以在事务内启动,并且可以在存储过程内启动或结束事务。如果在事务内调用,存储过程可以执行强制提交父事务的语句,然后启动新事务。
如果在事务内启动存储过程,则该事务是存储过程事件的父级。
如果事务是由存储过程启动的,则存储过程是事务事件的父级。
-
存储函数
存储函数受限于不引起显式或隐式提交或回滚。存储函数事件可以存在于父事务事件中。
-
触发器
触发器作为访问与其关联的表的语句的一部分而激活,因此触发器事件的父级始终是激活它的语句。
触发器不能发出导致事务显式或隐式提交或回滚的语句。
-
计划事件
计划事件体中语句的执行发生在一个新连接中。计划事件嵌套在父事务中不适用。
事务和保存点
保存点语句被记录为单独的语句事件。事务事件包括在事务期间发出的SAVEPOINT、ROLLBACK TO SAVEPOINT和RELEASE SAVEPOINT语句的单独计数器。
事务和错误
在事务中发生的错误和警告记录在语句事件中,而不记录在相应的事务事件中。这包括事务特定的错误和警告,例如在非事务表上的回滚或 GTID 一致性错误。
原文:
dev.mysql.com/doc/refman/8.0/en/performance-schema-events-transactions-current-table.html
29.12.7.1 事件事务当前表
events_transactions_current 表包含当前事务事件。该表存储每个线程的一行,显示线程最近监视的事务事件的当前状态,因此没有用于配置表大小的系统变量。例如:
mysql> SELECT *
FROM performance_schema.events_transactions_current LIMIT 1\G
*************************** 1\. row ***************************
THREAD_ID: 26
EVENT_ID: 7
END_EVENT_ID: NULL
EVENT_NAME: transaction
STATE: ACTIVE
TRX_ID: NULL
GTID: 3E11FA47-71CA-11E1-9E33-C80AA9429562:56
XID: NULL
XA_STATE: NULL
SOURCE: transaction.cc:150
TIMER_START: 420833537900000
TIMER_END: NULL
TIMER_WAIT: NULL
ACCESS_MODE: READ WRITE
ISOLATION_LEVEL: REPEATABLE READ
AUTOCOMMIT: NO
NUMBER_OF_SAVEPOINTS: 0
NUMBER_OF_ROLLBACK_TO_SAVEPOINT: 0
NUMBER_OF_RELEASE_SAVEPOINT: 0
OBJECT_INSTANCE_BEGIN: NULL
NESTING_EVENT_ID: 6
NESTING_EVENT_TYPE: STATEMENT
包含事务事件行的表中,events_transactions_current 是最基础的。其他包含事务事件行的表从当前事件逻辑派生而来。例如,events_transactions_history 和 events_transactions_history_long 表分别是最近已结束的事务事件的集合,每个线程最多一定数量的行和全局跨所有线程。
有关三个事务事件表之间关系的更多信息,请参阅 第 29.9 节“当前和历史事件的性能模式表”。
有关配置是否收集事务事件的信息,请参阅 第 29.12.7 节“性能模式事务表”。
events_transactions_current 表具有以下列:
-
THREAD_ID,EVENT_ID与事件关联的线程和事件开始时的线程当前事件编号。
THREAD_ID和EVENT_ID值一起唯一标识行。没有两行具有相同的值对。 -
END_EVENT_ID当事件开始时,此列设置为
NULL,当事件结束时更新为线程当前事件编号。 -
EVENT_NAME事件收集的仪器名称。这是来自
setup_instruments表的NAME值。仪器名称可能有多个部分并形成层次结构,如 第 29.6 节“性能模式仪器命名约定” 中讨论的那样。 -
STATE当前事务状态。其值为
ACTIVE(在START TRANSACTION或BEGIN之后)、COMMITTED(在COMMIT之后)或ROLLED BACK(在ROLLBACK之后)。 -
TRX_ID未使用。
-
GTIDGTID 列包含
gtid_next的值,可以是ANONYMOUS、AUTOMATIC或使用格式UUID:NUMBER的 GTID。对于使用gtid_next=AUTOMATIC的事务,即所有正常客户端事务,当事务提交并分配实际 GTID 时,GTID 列会发生变化。如果gtid_mode为ON或ON_PERMISSIVE,GTID 列会变为事务的 GTID。如果gtid_mode为OFF或OFF_PERMISSIVE,GTID 列会变为ANONYMOUS。 -
XID_FORMAT_ID、XID_GTRID和XID_BQUALXA 事务标识符的元素。其格式如第 15.3.8.1 节,“XA Transaction SQL Statements”中所述。
-
XA_STATEXA 事务的状态。其值为
ACTIVE(在XA START之后)、IDLE(在XA END之后)、PREPARED(在XA PREPARE之后)、ROLLED BACK(在XA ROLLBACK之后)或COMMITTED(在XA COMMIT之后)。在副本上,同一 XA 事务可以在不同线程上以不同状态出现在
events_transactions_current表中。这是因为在 XA 事务准备完成后,它会从副本的应用程序线程中分离出来,并且可以由副本上的任何线程提交或回滚。events_transactions_current表显示了线程上最近监视的事务事件的当前状态,并且在线程空闲时不会更新此状态。因此,即使在被另一个线程处理后,XA 事务仍然可以在原始应用程序线程中以PREPARED状态显示。要明确识别仍处于PREPARED状态且需要恢复的 XA 事务,请使用XA RECOVER语句,而不是性能模式事务表。 -
SOURCE包含产生事件的被检测代码的源文件名称和代码插入的文件中的行号。这使您可以检查源代码以确定涉及的确切代码。
-
TIMER_START,TIMER_END,TIMER_WAIT事件的时间信息。这些值的单位为皮秒(万亿分之一秒)。
TIMER_START和TIMER_END值表示事件计时开始和结束的时间。TIMER_WAIT是事件经过的时间(持续时间)。如果事件尚未完成,
TIMER_END是当前计时器值,TIMER_WAIT是到目前为止经过的时间(TIMER_END−TIMER_START)。如果事件是由
TIMED = NO的工具产生的,则不会收集时间信息,TIMER_START,TIMER_END和TIMER_WAIT都为NULL。有关皮秒作为事件时间单位以及影响时间值的因素的讨论,请参阅第 29.4.1 节,“性能模式事件计时”。
-
ACCESS_MODE事务访问模式。其取值为
READ WRITE或READ ONLY。 -
ISOLATION_LEVEL事务隔离级别。其取值为
REPEATABLE READ,READ COMMITTED,READ UNCOMMITTED,或SERIALIZABLE。 -
AUTOCOMMIT事务启动时是否启用了自动提交模式。
-
NUMBER_OF_SAVEPOINTS,NUMBER_OF_ROLLBACK_TO_SAVEPOINT,NUMBER_OF_RELEASE_SAVEPOINT在事务期间发出的
SAVEPOINT、ROLLBACK TO SAVEPOINT和RELEASE SAVEPOINT语句的数量。 -
OBJECT_INSTANCE_BEGIN未使用。
-
NESTING_EVENT_ID该事件所嵌套在其中的事件的
EVENT_ID值。 -
NESTING_EVENT_TYPE嵌套事件类型。值可以是
TRANSACTION、STATEMENT、STAGE或WAIT。(TRANSACTION不会出现,因为事务不能嵌套。)
events_transactions_current 表具有以下索引:
- 主键为 (
THREAD_ID,EVENT_ID)
TRUNCATE TABLE 允许用于 events_transactions_current 表。它会删除行。
原文:
dev.mysql.com/doc/refman/8.0/en/performance-schema-events-transactions-history-table.html
29.12.7.2 事件事务历史表
events_transactions_history 表包含每个线程已结束的 N 个最近事务事件。事务事件直到结束后才会添加到表中。当表包含给定线程的最大行数时,当为该线程添加新行时,最旧的线程行将被丢弃。当线程结束时,其所有行都将被丢弃。
性能模式在服务器启动期间自动调整 N 的值。要显式设置每个线程的行数,请在服务器启动时设置 performance_schema_events_transactions_history_size 系统变量。
events_transactions_history 表与 events_transactions_current 表具有相同的列和索引。请参见 第 29.12.7.1 节,“事件事务当前表”。
TRUNCATE TABLE 允许用于 events_transactions_history 表。它会删除行。
有关三个事务事件表之间关系的更多信息,请参见 第 29.9 节,“当前和历史事件的性能模式表”。
有关配置是否收集事务事件的信息,请参见 第 29.12.7 节,“性能模式事务表”。
原文:
dev.mysql.com/doc/refman/8.0/en/performance-schema-events-transactions-history-long-table.html
29.12.7.3 事件事务历史长表
events_transactions_history_long 表包含了全局结束的*N*最近的事务事件,跨所有线程。事务事件直到结束后才会添加到表中。当表满时,无论哪个线程生成了新行,最旧的行都会被丢弃。
性能模式在服务器启动时自动调整*N*的值。要显式设置表大小,请在服务器启动时设置performance_schema_events_transactions_history_long_size系统变量。
events_transactions_history_long 表与events_transactions_current具有相同的列。请参阅第 29.12.7.1 节,“事件事务当前表”。与events_transactions_current不同,events_transactions_history_long没有索引。
TRUNCATE TABLE允许用于events_transactions_history_long表。它会删除行。
有关三个事务事件表之间关系的更多信息,请参阅第 29.9 节,“当前和历史事件的性能模式表”。
有关配置是否收集事务事件的信息,请参阅第 29.12.7 节,“性能模式事务表”。
29.12.8 性能模式连接表
原文:
dev.mysql.com/doc/refman/8.0/en/performance-schema-connection-tables.html
29.12.8.1 账户表
29.12.8.2 主机表
29.12.8.3 用户表
当客户端连接到 MySQL 服务器时,它会使用特定的用户名和特定的主机。性能模式提供关于这些连接的统计信息,分别跟踪每个账户(用户和主机组合)以及每个用户名和主机名,使用以下表:
-
accounts:每个客户端账户的连接统计 -
hosts:每个客户端主机名的连接统计 -
users:每个客户端用户名称的连接统计
连接表中“账户”的含义类似于 MySQL 授权表中mysql系统数据库中的含义,即该术语指的是用户和主机值的组合。它们的区别在于,对于授权表,账户的主机部分可以是模式,而对于性能模式表,主机值始终是特定的非模式主机名。
每个连接表都有CURRENT_CONNECTIONS和TOTAL_CONNECTIONS列,用于跟踪基于其统计数据的“跟踪值”上的当前连接数和总连接数。这些表在使用跟踪值方面有所不同。accounts表具有USER和HOST列,用于跟踪每个用户和主机组合的连接。users和hosts表分别具有USER和HOST列,用于跟踪每个用户名和主机名的连接。
性能模式还会统计内部线程和未能通过身份验证的用户会话线程,使用具有USER和HOST列值为NULL的行。
假设名为user1和user2的客户端分别从hosta和hostb连接一次。性能模式跟踪连接如下:
-
accounts表有四行,分别为user1/hosta、user1/hostb、user2/hosta和user2/hostb账户值,每行计算每个账户的一个连接。 -
hosts表有两行,分别为hosta和hostb,每行计算每个主机名的两个连接。 -
users表有两行,分别为user1和user2,每行计算每个用户名的两个连接。
当客户端连接时,性能模式确定每个连接表中适用的行,使用适用于每个表的跟踪值。如果没有这样的行,则添加一个。然后性能模式在该行中的 CURRENT_CONNECTIONS 和 TOTAL_CONNECTIONS 列中递增一。
当客户端断开连接时,性能模式将 CURRENT_CONNECTIONS 列中的值减一,并保持 TOTAL_CONNECTIONS 列不变。
TRUNCATE TABLE 允许连接表。它有以下效果:
-
对于没有当前连接的帐户、主机或用户(
CURRENT_CONNECTIONS = 0的行),将删除行。 -
未删除的行将被重置为仅计算当前连接数:对于
CURRENT_CONNECTIONS > 0的行,TOTAL_CONNECTIONS将被重置为CURRENT_CONNECTIONS。 -
依赖连接表的汇总表将被隐式截断,如本节后面所述。
性能模式维护汇总表,按帐户、主机或用户聚合各种事件类型的连接统计信息。这些表的名称中包含 _summary_by_account、_summary_by_host 或 _summary_by_user。要识别它们,请使用以下查询:
mysql> SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'performance_schema'
AND TABLE_NAME REGEXP '_summary_by_(account|host|user)'
ORDER BY TABLE_NAME;
+------------------------------------------------------+
| TABLE_NAME |
+------------------------------------------------------+
| events_errors_summary_by_account_by_error |
| events_errors_summary_by_host_by_error |
| events_errors_summary_by_user_by_error |
| events_stages_summary_by_account_by_event_name |
| events_stages_summary_by_host_by_event_name |
| events_stages_summary_by_user_by_event_name |
| events_statements_summary_by_account_by_event_name |
| events_statements_summary_by_host_by_event_name |
| events_statements_summary_by_user_by_event_name |
| events_transactions_summary_by_account_by_event_name |
| events_transactions_summary_by_host_by_event_name |
| events_transactions_summary_by_user_by_event_name |
| events_waits_summary_by_account_by_event_name |
| events_waits_summary_by_host_by_event_name |
| events_waits_summary_by_user_by_event_name |
| memory_summary_by_account_by_event_name |
| memory_summary_by_host_by_event_name |
| memory_summary_by_user_by_event_name |
+------------------------------------------------------+
有关各个连接汇总表的详细信息,请参阅描述汇总事件类型表的部分:
-
等待事件汇总:第 29.12.20.1 节,“等待事件汇总表”
-
阶段事件汇总:第 29.12.20.2 节,“阶段汇总表”
-
语句事件汇总:第 29.12.20.3 节,“语句汇总表”
-
事务事件汇总:第 29.12.20.5 节,“事务汇总表”
-
内存事件汇总:第 29.12.20.10 节,“内存汇总表”
-
错误事件汇总:第 29.12.20.11 节,“错误汇总表”
允许对连接摘要表执行TRUNCATE TABLE。它会删除没有连接的帐户、主机或用户的行,并将剩余行的摘要列重置为零。此外,每个按帐户、主机、用户或线程汇总的摘要表在其依赖的连接表被截断时会被隐式截断。以下表格描述了连接表截断和隐式截断表之间的关系。
表 29.2 连接表截断的隐式影响
| 截断连接表 | 隐式截断的摘要表 |
|---|---|
accounts | 表名包含_summary_by_account、_summary_by_thread的表 |
hosts | 表名包含_summary_by_account、_summary_by_host、_summary_by_thread的表 |
users | 表名包含_summary_by_account、_summary_by_user、_summary_by_thread的表 |
截断_summary_global摘要表也会隐式截断其对应的连接和线程摘要表。例如,截断events_waits_summary_global_by_event_name会隐式截断按帐户、主机、用户或线程汇总的等待事件摘要表。
原文:
dev.mysql.com/doc/refman/8.0/en/performance-schema-accounts-table.html
29.12.8.1 账户表
accounts表包含每个连接到 MySQL 服务器的账户的行。对于每个账户,该表计算当前和总连接数。表大小在服务器启动时自动调整。要显式设置表大小,请在服务器启动时设置performance_schema_accounts_size系统变量。要禁用账户统计信息,请将此变量设置为 0。
accounts表具有以下列。有关性能模式如何在此表中维护行的描述,包括TRUNCATE TABLE的影响,请参见第 29.12.8 节,“性能模式连接表”。
-
用户连接的客户端用户名。对于内部线程或未能进行身份验证的用户会话,此处为
NULL。 -
主机客户端连接的主机。对于内部线程或未能进行身份验证的用户会话,此处为
NULL。 -
当前连接数该账户的当前连接数。
-
总连接数该账户的总连接数。
-
最大会话受控内存报告属于该账户的会话使用的最大受控内存量。
这一列是在 MySQL 8.0.31 中添加的。
-
最大会话总内存报告属于该账户的会话使用的最大内存量。
这一列是在 MySQL 8.0.31 中添加的。
accounts表具有以下索引:
- 主键为(
用户,主机)
原文:
dev.mysql.com/doc/refman/8.0/en/performance-schema-hosts-table.html
29.12.8.2 主机表
hosts 表包含每个连接到 MySQL 服务器的客户端主机的行。对于每个主机名,表计算当前和总连接数。表大小在服务器启动时自动调整。要显式设置表大小,请在服务器启动时设置performance_schema_hosts_size 系统变量。要禁用主机统计信息,请将此变量设置为 0。
hosts 表具有以下列。有关性能模式如何维护此表中的行的描述,包括TRUNCATE TABLE的影响,请参见第 29.12.8 节,“性能模式连接表”。
-
HOST客户端连接的主机。对于内部线程或未能通过身份验证的用户会话,此值为
NULL。 -
CURRENT_CONNECTIONS主机的当前连接数。
-
TOTAL_CONNECTIONS主机的总连接数。
-
MAX_SESSION_CONTROLLED_MEMORY报告属于主机的会话使用的最大受控内存量。
该列在 MySQL 8.0.31 中添加。
-
MAX_SESSION_TOTAL_MEMORY报告属于主机的会话使用的最大内存量。
该列在 MySQL 8.0.31 中添加。
hosts 表具有以下索引:
- 主键为 (
HOST)
原文:
dev.mysql.com/doc/refman/8.0/en/performance-schema-users-table.html
29.12.8.3 用户表
users 表包含每个连接到 MySQL 服务器的用户的一行。对于每个用户名,表计算当前和总连接数。表的大小在服务器启动时自动调整。要显式设置表大小,请在服务器启动时设置 performance_schema_users_size 系统变量。要禁用用户统计信息,请将此变量设置为 0。
users 表具有以下列。有关性能模式如何维护此表中的行的描述,包括 TRUNCATE TABLE 的影响,请参见 第 29.12.8 节,“性能模式连接表”。
-
USER连接的客户端用户名。对于内部线程或未能通过身份验证的用户会话,此值为
NULL。 -
CURRENT_CONNECTIONS用户的当前连接数。
-
TOTAL_CONNECTIONS用户的总连接数。
-
MAX_SESSION_CONTROLLED_MEMORY报告属于用户的会话使用的最大受控内存量。
此列在 MySQL 8.0.31 中添加。
-
MAX_SESSION_TOTAL_MEMORY报告属于用户的会话使用的最大内存量。
此列在 MySQL 8.0.31 中添加。
users 表具有以下索引:
- 主键为 (
USER)
29.12.9 性能模式连接属性表
原文:
dev.mysql.com/doc/refman/8.0/en/performance-schema-connection-attribute-tables.html
29.12.9.1 session_account_connect_attrs 表
29.12.9.2 session_connect_attrs 表
连接属性是应用程序可以在连接时传递给服务器的键值对。对于基于libmysqlclient客户端库实现的 C API 的应用程序,mysql_options()和mysql_options4()函数定义了连接属性集。其他 MySQL 连接器可能提供其自己的属性定义方法。
这些性能模式表公开属性信息:
-
session_account_connect_attrs:当前会话及与会话帐户关联的其他会话的连接属性 -
session_connect_attrs:所有会话的连接属性
此外,写入审计日志的连接事件可能包括连接属性。请参阅第 8.4.5.4 节,“审计日志文件格式”。
以下划线(_)开头的属性名称保留供内部使用,不应由应用程序创建。这种约定允许 MySQL 引入新属性而不会与应用程序属性冲突,并使应用程序能够定义自己的属性,而不会与内部属性冲突。
-
可用连接属性
-
连接属性限制
可用连接属性
在给定连接中可见的连接属性集取决于诸如您的平台、用于建立连接的 MySQL 连接器或客户端程序等因素。
libmysqlclient客户端库设置这些属性:
-
_client_name: 客户端名称(客户端库为libmysql)。 -
_client_version: 客户端库版本。 -
_os: 操作系统(例如,Linux,Win64)。 -
_pid: 客户端进程 ID。 -
_platform: 机器平台(例如,x86_64)。 -
_thread: 客户端线程 ID(仅限 Windows)。
其他 MySQL 连接器可能定义自己的连接属性。
MySQL Connector/C++ 8.0.16 及更高版本为使用 X DevAPI 或 X DevAPI for C 的应用程序定义了这些属性:
-
_client_license: 连接器许可证(例如GPL-2.0)。 -
_client_name: 连接器名称(mysql-connector-cpp)。 -
_client_version: 连接器版本。 -
_os: 操作系统(例如,Linux,Win64)。 -
_pid: 客户端进程 ID。 -
_platform: 机器平台(例如,x86_64)。 -
_source_host: 客户端运行的机器的主机名。 -
_thread: 客户端线程 ID(仅限 Windows)。
MySQL Connector/J 定义了这些属性:
-
_client_name: 客户端名称 -
_client_version: 客户端库版本 -
_os: 操作系统(例如,Linux,Win64) -
_client_license: 连接器许可证类型 -
_platform: 机器平台(例如,x86_64) -
_runtime_vendor: Java 运行环境(JRE)供应商 -
_runtime_version: Java 运行环境(JRE)版本
MySQL Connector/NET 定义了这些属性:
-
_client_version: 客户端库版本。 -
_os: 操作系统(例如,Linux,Win64)。 -
_pid: 客户端进程 ID。 -
_platform: 机器平台(例如,x86_64)。 -
_program_name: 客户端名称。 -
_thread: 客户端线程 ID(仅限 Windows)。
Connector/Python 8.0.17 及更高版本的实现定义了这些属性;某些值和属性取决于 Connector/Python 的实现(纯 Python 或 c-ext):
-
_client_license: 连接器的许可证类型;GPL-2.0或Commercial。(仅限纯 Python) -
_client_name: 设置为mysql-connector-python(纯 Python)或libmysql(c-ext) -
_client_version: 连接器版本(纯 Python)或 mysqlclient 库版本(c-ext)。 -
_os: 带有连接器的操作系统(例如,Linux,Win64)。 -
_pid: 源机器上的进程标识符(例如,26955) -
_platform: 机器平台(例如,x86_64)。 -
_source_host: 连接器连接的机器的主机名。 -
_connector_version: 连接器版本(例如,8.0.36)(仅限 c-ext)。 -
_connector_license: 连接器的许可证类型;GPL-2.0或Commercial(仅限 c-ext)。 -
_connector_name: 始终设置为mysql-connector-python(仅限 c-ext)。
PHP 定义了取决于编译方式的属性:
-
使用
libmysqlclient编译:标准的libmysqlclient属性,前面已描述。 -
使用
mysqlnd编译:仅_client_name属性,值为mysqlnd。
许多 MySQL 客户端程序将 program_name 属性设置为与客户端名称相等的值。例如,mysqladmin 和 mysqldump 分别将 program_name 设置为 mysqladmin 和 mysqldump。MySQL Shell 将 program_name 设置为 mysqlsh。
一些 MySQL 客户端程序定义了额外的属性:
-
mysql(截至 MySQL 8.0.17):
-
os_user: 运行该程序的操作系统用户的名称。在 Unix 和类 Unix 系统以及 Windows 上可用。 -
os_sudouser:SUDO_USER环境变量的值。在 Unix 和类 Unix 系统上可用。
mysql连接属性的值为空时不会发送。
-
-
mysqlbinlog:
_client_role:binary_log_listener
-
复制连接:
-
program_name:mysqld -
_client_role:binary_log_listener -
_client_replication_channel_name: 通道名称。
-
-
FEDERATED存储引擎连接:-
program_name:mysqld -
_client_role:federated_storage
-
连接属性限制
从客户端到服务器传输的连接属性数据存在限制:
-
在连接之前由客户端施加的固定限制。
-
在连接时由服务器施加的固定限制。
-
在连接时由性能模式施加的可配置限制。
对使用 C API 发起的连接,libmysqlclient库在客户端端对连接属性数据的总大小施加了 64KB 的限制:导致超出此限制的mysql_options()调用会产生CR_INVALID_PARAMETER_NO错误。其他 MySQL 连接器可能对客户端传输到服务器的连接属性数据量施加自己的限制。
在服务器端,对连接属性数据的大小进行以下检查:
-
服务器对其接受的连接的连接属性数据总大小施加 64KB 的限制。如果客户端尝试发送超过 64KB 的属性数据,服务器会拒绝连接。否则,服务器会认为属性缓冲区有效,并跟踪最长缓冲区的大小在
Performance_schema_session_connect_attrs_longest_seen状态变量中。 -
对于接受的连接,性能模式会检查连接属性大小总和是否超过
performance_schema_session_connect_attrs_size系统变量的值。如果属性大小超过此值,将会执行以下操作:-
性能模式截断属性数据并增加
Performance_schema_session_connect_attrs_lost状态变量,该变量表示发生属性截断的连接数。 -
如果
log_error_verbosity系统变量大于 1,性能模式会向错误日志写入一条消息:Connection attributes of length *N* were truncated (*N* bytes lost) for connection *N*, user *user_name*@*host_name* (as *user_name*), auth: {yes|no}警告消息中的信息旨在帮助数据库管理员识别发生属性截断的客户端。
-
一个
_truncated属性被添加到会话属性中,其值表示丢失了多少字节,如果属性缓冲区有足够的空间。这使得性能模式能够在连接属性表中公开每个连接的截断信息。这些信息可以在不必检查错误日志的情况下进行检查。
-
原文:
dev.mysql.com/doc/refman/8.0/en/performance-schema-session-account-connect-attrs-table.html
29.12.9.1 session_account_connect_attrs 表
应用程序可以在连接时提供键值连接属性以传递给服务器。有关常见属性的描述,请参见 Section 29.12.9, “Performance Schema Connection Attribute Tables”。
session_account_connect_attrs 表仅包含当前会话的连接属性,以及与会话账户关联的其他会话。要查看所有会话的连接属性,请使用 session_connect_attrs 表。
session_account_connect_attrs 表包含以下列:
-
PROCESSLIST_ID会话的连接标识符。
-
ATTR_NAME属性名称。
-
ATTR_VALUE属性值。
-
ORDINAL_POSITION属性添加到连接属性集的顺序。
session_account_connect_attrs 表包含以下索引:
- 主键为 (
PROCESSLIST_ID,ATTR_NAME)
TRUNCATE TABLE 不允许用于 session_account_connect_attrs 表。
原文:
dev.mysql.com/doc/refman/8.0/en/performance-schema-session-connect-attrs-table.html
29.12.9.2 session_connect_attrs 表
应用程序可以在连接时提供键值连接属性,以传递给服务器。有关常见属性的描述,请参见第 29.12.9 节,“性能模式连接属性表”。
session_connect_attrs 表包含所有会话的连接属性。要仅查看当前会话的连接属性以及与会话帐户关联的其他会话,请使用session_account_connect_attrs 表。
session_connect_attrs 表包含以下列:
-
PROCESSLIST_ID会话的连接标识符。
-
ATTR_NAME属性名称。
-
ATTR_VALUE属性值。
-
ORDINAL_POSITION属性添加到连接属性集的顺序。
session_connect_attrs 表包含以下索引:
- 主键 (
PROCESSLIST_ID,ATTR_NAME)
不允许对session_connect_attrs 表执行TRUNCATE TABLE。
29.12.10 性能模式用户定义变量表
原文:
dev.mysql.com/doc/refman/8.0/en/performance-schema-user-variable-tables.html
性能模式提供了一个user_variables_by_thread表,用于公开用户定义的变量。这些变量是在特定会话中定义的,并且在名称前面带有@字符;参见第 11.4 节,“用户定义变量”。
user_variables_by_thread表具有以下列:
-
THREAD_ID会话中定义变量的线程标识符。
-
VARIABLE_NAME变量名称,不包括前导的
@字符。 -
VARIABLE_VALUE变量值。
user_variables_by_thread表具有以下索引:
- 主键为(
THREAD_ID,VARIABLE_NAME)
TRUNCATE TABLE不允许用于user_variables_by_thread表。
29.12.11 性能模式复制表
原文:
dev.mysql.com/doc/refman/8.0/en/performance-schema-replication-tables.html
29.12.11.1 复制连接配置表
29.12.11.2 复制连接状态表
29.12.11.3 复制异步连接故障转移表
29.12.11.4 复制异步连接故障转移管理表
29.12.11.5 复制应用程序配置表
29.12.11.6 复制应用程序状态表
29.12.11.7 按协调器复制应用程序状态表
29.12.11.8 按工作者复制应用程序状态表
29.12.11.9 全局复制应用程序过滤器表
29.12.11.10 复制应用程序过滤器表
29.12.11.11 复制组成员表
29.12.11.12 复制组成员统计表
29.12.11.13 复制组成员操作表
29.12.11.14 复制组配置版本表
29.12.11.15 复制组通信信息表
29.12.11.16 二进制日志事务压缩统计表
性能模式提供了暴露复制信息的表。这类似于SHOW REPLICA STATUS语句提供的信息,但以表格形式呈现更易访问,并具有可用性优势:
-
SHOW REPLICA STATUS输出对于视觉检查很有用,但对于程序化使用则不太方便。相比之下,使用性能模式表,关于复制状态的信息可以使用通用的SELECT查询进行搜索,包括复杂的WHERE条件、连接等。 -
查询结果可以保存在表中进行进一步分析,或分配给变量,从而在存储过程中使用。
-
复制表提供更好的诊断信息。对于多线程副本操作,
SHOW REPLICA STATUS使用Last_SQL_Errno和Last_SQL_Error字段报告所有协调器和工作线程的错误,因此只有最近的错误可见,信息可能会丢失。复制表按线程基础存储错误,而不会丢失信息。 -
最后一次查看的事务在每个工作线程的复制表中可见。这是从
SHOW REPLICA STATUS中无法获取的信息。 -
熟悉性能模式界面的开发人员可以通过向表中添加行来扩展复制表,以提供额外的信息。
复制表描述
性能模式提供以下与复制相关的表:
-
包含有关副本与源之间连接信息的表:
-
replication_connection_configuration: 连接到源的配置参数 -
replication_connection_status: 与源的当前连接状态 -
replication_asynchronous_connection_failover: 异步连接故障转移机制的源列表
-
-
包含有关事务应用程序的一般(非线程特定)信息的表:
-
replication_applier_configuration: 副本上事务应用程序的配置参数。 -
replication_applier_status: 副本上事务应用程序的当前状态。
-
-
包含有关负责应用来自源接收的事务的特定线程的信息的表:
-
replication_applier_status_by_coordinator: 协调器线程的状态(除非副本是多线程的,否则为空)。 -
replication_applier_status_by_worker: 应用程序线程或工作线程的状态(如果副本是多线程的)。
-
-
包含有关基于通道的复制过滤器的信息的表:
-
replication_applier_filters: 提供有关在特定复制通道上配置的复制过滤器的信息。 -
replication_applier_global_filters: 提供有关全局复制过滤器的信息,这些过滤器适用于所有复制通道。
-
-
包含有关组复制成员的信息的表:
-
replication_group_members: 提供组成员的网络和状态信息。 -
replication_group_member_stats: 提供有关组成员和他们参与的事务的统计信息。
更多信息请参见 Section 20.4, “监控组复制”。
-
当性能模式被禁用时,以下性能模式复制表仍然会被填充:
-
replication_connection_configuration -
replication_connection_status -
replication_asynchronous_connection_failover -
replication_applier_configuration -
replication_applier_status -
replication_applier_status_by_coordinator -
replication_applier_status_by_worker
例外是复制表中的本地时间信息(事务的开始和结束时间戳)replication_connection_status,replication_applier_status_by_coordinator和replication_applier_status_by_worker。当性能模式被禁用时,不会收集此信息。
以下各节更详细地描述了每个复制表,包括SHOW REPLICA STATUS生成的列与复制表中出现相同信息的列之间的对应关系。
本介绍剩余部分将描述性能模式如何填充复制表以及SHOW REPLICA STATUS中的哪些字段在表中没有表示。
复制表的生命周期
性能模式填充复制表如下:
-
在执行
CHANGE REPLICATION SOURCE TO|CHANGE MASTER TO之前,表格是空的。 -
在执行
CHANGE REPLICATION SOURCE TO|CHANGE MASTER TO之后,配置参数可以在表格中看到。此时,没有活动的复制线程,因此THREAD_ID列为NULL,SERVICE_STATE列的值为OFF。 -
在
START REPLICA之后(或 MySQL 8.0.22 之前,START SLAVE),可以看到非NULL的THREAD_ID值。空闲或活动的线程具有SERVICE_STATE值为ON。连接到源的线程在建立连接时具有CONNECTING值,并且只要连接持续,之后为ON。 -
在
STOP REPLICA之后,THREAD_ID列变为NULL,不再存在的线程的SERVICE_STATE列的值为OFF。 -
在
STOP REPLICA或线程由于错误而停止后,表格将被保留。 -
replication_applier_status_by_worker表仅在复制品以多线程模式运行时才非空。也就是说,如果replica_parallel_workers或slave_parallel_workers系统变量大于 0,则在执行START REPLICA时填充此表,并且行数显示工作线程数。
复制品状态信息不在复制表中
性能模式复制表中的信息与 SHOW REPLICA STATUS 中可用的信息略有不同,因为这些表面向全局事务标识符(GTIDs)的使用,而不是文件名和位置,并且它们代表服务器 UUID 值,而不是服务器 ID 值。由于这些差异,性能模式复制表中未保留或以不同方式表示几个 SHOW REPLICA STATUS 列:
-
以下字段是指文件名和位置,不会被保留:
Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Exec_Master_Log_Pos Until_Condition Until_Log_File Until_Log_Pos -
Master_Info_File字段不会被保留。它指的是用于复制品源元数据存储库的master.info文件,已被用于存储库的崩溃安全表所取代。 -
以下字段基于
server_id,而不是server_uuid,并且不会被保留:Master_Server_Id Replicate_Ignore_Server_Ids -
Skip_Counter字段基于事件计数,而不是 GTIDs,并且不会被保留。 -
这些错误字段是
Last_SQL_Errno和Last_SQL_Error的别名,因此不会被保留:Last_Errno Last_Error在性能模式中,此错误信息可在
replication_applier_status_by_worker表的LAST_ERROR_NUMBER和LAST_ERROR_MESSAGE列中找到(如果复制品是多线程,则还可在replication_applier_status_by_coordinator中找到)。这些表提供比Last_Errno和Last_Error更具体的每个线程的错误信息。 -
提供有关命令行过滤选项的信息的字段不会被保留:
Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table -
Replica_IO_State和Replica_SQL_Running_State字段不会被保留。如果需要,可以通过使用适当复制表的THREAD_ID列并将其与INFORMATION_SCHEMAPROCESSLIST表中的ID列连接,以选择后者表的STATE列来从进程列表中获取这些值。 -
Executed_Gtid_Set字段可能显示一个包含大量文本的大集合。相反,性能模式表显示当前正在被副本应用的事务的 GTID。或者,已执行的 GTID 集合可以从gtid_executed系统变量的值中获取。 -
Seconds_Behind_Master和Relay_Log_Space字段处于待定状态,不会被保留。
复制通道
复制性能模式表的第一列是 CHANNEL_NAME。这使得可以按照复制通道查看表。在非多源复制设置中,存在一个单一的默认复制通道。当在副本上使用多个复制通道时,可以按照复制通道过滤表以监视特定的复制通道。有关更多信息,请参见 Section 19.2.2, “Replication Channels” 和 Section 19.1.5.8, “Monitoring Multi-Source Replication”。
原文:
dev.mysql.com/doc/refman/8.0/en/performance-schema-replication-connection-configuration-table.html
29.12.11.1 replication_connection_configuration 表
此表显示了复制品用于连接到源的配置参数。表中存储的参数可以通过CHANGE REPLICATION SOURCE TO语句(从 MySQL 8.0.23 开始)或CHANGE MASTER TO语句(在 MySQL 8.0.23 之前)在运行时更改。
与replication_connection_status表相比,replication_connection_configuration变化较少。它包含定义复制品如何连接到源以及在连接期间保持不变的值,而replication_connection_status包含在连接期间更改的值。
replication_connection_configuration表具有以下列。列描述指示从中获取列值的对应CHANGE REPLICATION SOURCE TO | CHANGE MASTER TO选项,并且本节后面给出的表显示了replication_connection_configuration列和SHOW REPLICA STATUS列之间的对应关系。
-
通道名称显示此行的复制通道。始终存在一个默认的复制通道,并且可以添加更多的复制通道。有关更多信息,请参见第 19.2.2 节,“复制通道”。
-
主机复制品连接的源主机名。(
CHANGE REPLICATION SOURCE TO选项:SOURCE_HOST,CHANGE MASTER TO选项:MASTER_HOST) -
端口用于连接到源的端口。(
CHANGE REPLICATION SOURCE TO选项:SOURCE_PORT,CHANGE MASTER TO选项:MASTER_PORT) -
用户用于连接到源的复制用户帐户的用户名。 (
将复制源更改为选项:SOURCE_USER,更改主服务器为选项:MASTER_USER) -
NETWORK_INTERFACE副本绑定到的网络接口(如果有)。 (
将复制源更改为选项:SOURCE_BIND,更改主服务器为选项:MASTER_BIND) -
AUTO_POSITION如果使用 GTID 自动定位,则为 1;否则为 0。 (
将复制源更改为选项:SOURCE_AUTO_POSITION,更改主服务器为选项:MASTER_AUTO_POSITION) -
SSL_ALLOWED,SSL_CA_FILE,SSL_CA_PATH,SSL_CERTIFICATE,SSL_CIPHER,SSL_KEY,SSL_VERIFY_SERVER_CERTIFICATE,SSL_CRL_FILE,SSL_CRL_PATH这些列显示副本用于连接到源的 SSL 参数(如果有)。
SSL_ALLOWED具有以下值:-
如果允许与源的 SSL 连接,则为
是 -
如果不允许与源的 SSL 连接,则为
否 -
如果允许 SSL 连接但副本未启用 SSL 支持,则
忽略
(
将复制源更改为其他 SSL 列的选项:SOURCE_SSL_CA,SOURCE_SSL_CAPATH,SOURCE_SSL_CERT,SOURCE_SSL_CIPHER,SOURCE_SSL_CRL,SOURCE_SSL_CRLPATH,SOURCE_SSL_KEY,SOURCE_SSL_VERIFY_SERVER_CERT。更改主服务器为其他 SSL 列的选项:MASTER_SSL_CA,MASTER_SSL_CAPATH,MASTER_SSL_CERT,MASTER_SSL_CIPHER,MASTER_SSL_CRL,MASTER_SSL_CRLPATH,MASTER_SSL_KEY,MASTER_SSL_VERIFY_SERVER_CERT。 -
-
CONNECTION_RETRY_INTERVAL连接重试之间的秒数。 (
将复制源更改为选项:SOURCE_CONNECT_RETRY,更改主服务器为选项:MASTER_CONNECT_RETRY) -
CONNECTION_RETRY_COUNT在连接丢失的情况下,副本可以尝试重新连接到源的次数。 (
将复制源更改为选项:SOURCE_RETRY_COUNT,更改主服务器为选项:MASTER_RETRY_COUNT) -
HEARTBEAT_INTERVAL副本上的复制心跳���隔,以秒为单位。 (
将复制源更改为选项:SOURCE_HEARTBEAT_PERIOD,更改主服务器为选项:MASTER_HEARTBEAT_PERIOD) -
TLS_VERSION复制连接中允许副本使用的 TLS 协议版本列表。有关 TLS 版本信息,请参见第 8.3.2 节,“加密连接 TLS 协议和密码”。(
将复制源更改为选项:SOURCE_TLS_VERSION,更改主服务器为选项:MASTER_TLS_VERSION) -
TLS_CIPHERSUITES允许副本使用的密码套件列表。有关 TLS 密码套件信息,请参见第 8.3.2 节,“加密连接 TLS 协议和密码”。(
将复制源更改为选项:SOURCE_TLS_CIPHERSUITES,更改主服务器为选项:MASTER_TLS_CIPHERSUITES) -
PUBLIC_KEY_PATH指向包含源端所需用于 RSA 密钥对密码交换的公钥副本的文件的路径名。文件必须采用 PEM 格式。此列适用于使用
sha256_password或caching_sha2_password认证插件进行身份验证的复制品。 (CHANGE REPLICATION SOURCE TO选项:SOURCE_PUBLIC_KEY_PATH,CHANGE MASTER TO选项:MASTER_PUBLIC_KEY_PATH)如果给定
PUBLIC_KEY_PATH并指定有效的公钥文件,则优先于GET_PUBLIC_KEY。 -
GET_PUBLIC_KEY是否从源端请求所需用于 RSA 密钥对密码交换的公钥。此列适用于使用
caching_sha2_password认证插件进行身份验证的复制品。对于该插件,除非请求,否则源端不会发送公钥。 (CHANGE REPLICATION SOURCE TO选项:GET_SOURCE_PUBLIC_KEY,CHANGE MASTER TO选项:GET_MASTER_PUBLIC_KEY)如果给定
PUBLIC_KEY_PATH并指定有效的公钥文件,则优先于GET_PUBLIC_KEY。 -
NETWORK_NAMESPACE网络命名空间名称;如果连接使用默认(全局)命名空间,则为空。有关网络命名空间的信息,请参见第 7.1.14 节,“网络命名空间支持”。此列在 MySQL 8.0.22 中添加。
-
COMPRESSION_ALGORITHM用于源端连接的允许压缩算法。 (
CHANGE REPLICATION SOURCE TO选项:SOURCE_COMPRESSION_ALGORITHMS,CHANGE MASTER TO选项:MASTER_COMPRESSION_ALGORITHMS)有关更多信息,请参见第 6.2.8 节,“连接压缩控制”。
此列在 MySQL 8.0.18 中添加。
-
ZSTD_COMPRESSION_LEVEL用于使用
zstd压缩算法的源端连接的压缩级别。 (CHANGE REPLICATION SOURCE TO选项:SOURCE_ZSTD_COMPRESSION_LEVEL,CHANGE MASTER TO选项:MASTER_ZSTD_COMPRESSION_LEVEL)有关更多信息,请参见第 6.2.8 节,“连接压缩控制”。
此列在 MySQL 8.0.18 中添加。
-
SOURCE_CONNECTION_AUTO_FAILOVER是否为此复制通道激活异步连接故障转移机制。 (
CHANGE REPLICATION SOURCE TO选项:SOURCE_CONNECTION_AUTO_FAILOVER,CHANGE MASTER TO选项:SOURCE_CONNECTION_AUTO_FAILOVER)有关更多信息,请参见第 19.4.9 节,“使用异步连接故障转移切换源和复制品”。
此列在 MySQL 8.0.22 中添加。
-
GTID_ONLY表示此通道仅在事务队列和应用程序过程以及恢复中使用 GTIDs,并且不在复制元数据存储库中保留二进制日志和中继日志文件名和文件位置。 (
CHANGE REPLICATION SOURCE TO选项:GTID_ONLY,CHANGE MASTER TO选项:GTID_ONLY)有关更多信息,请参见 第 20.4.1 节,“GTIDs 和组复制”。
此列在 MySQL 8.0.27 中添加。
replication_connection_configuration 表具有以下索引:
- 主键为 (
CHANNEL_NAME)
TRUNCATE TABLE 不允许用于 replication_connection_configuration 表。
以下表显示了 replication_connection_configuration 列与 SHOW REPLICA STATUS 列之间的对应关系。
replication_connection_configuration 列 | SHOW REPLICA STATUS 列 |
|---|---|
CHANNEL_NAME | Channel_name |
HOST | Source_Host |
PORT | Source_Port |
USER | Source_User |
NETWORK_INTERFACE | Source_Bind |
AUTO_POSITION | Auto_Position |
SSL_ALLOWED | Source_SSL_Allowed |
SSL_CA_FILE | Source_SSL_CA_File |
SSL_CA_PATH | Source_SSL_CA_Path |
SSL_CERTIFICATE | Source_SSL_Cert |
SSL_CIPHER | Source_SSL_Cipher |
SSL_KEY | Source_SSL_Key |
SSL_VERIFY_SERVER_CERTIFICATE | Source_SSL_Verify_Server_Cert |
SSL_CRL_FILE | Source_SSL_Crl |
SSL_CRL_PATH | Source_SSL_Crlpath |
CONNECTION_RETRY_INTERVAL | Source_Connect_Retry |
CONNECTION_RETRY_COUNT | Source_Retry_Count |
HEARTBEAT_INTERVAL | 无 |
TLS_VERSION | Source_TLS_Version |
PUBLIC_KEY_PATH | Source_public_key_path |
GET_PUBLIC_KEY | Get_source_public_key |
NETWORK_NAMESPACE | Network_Namespace |
COMPRESSION_ALGORITHM | [无] |
ZSTD_COMPRESSION_LEVEL | [无] |
GTID_ONLY | [无] |
replication_connection_configuration 列 | SHOW REPLICA STATUS 列 |
原文:
dev.mysql.com/doc/refman/8.0/en/performance-schema-replication-connection-status-table.html
29.12.11.2 replication_connection_status 表
此表显示处理副本连接到源的 I/O 线程的当前状态,排队在中继日志中的最后一个事务的信息,以及当前正在排队在中继日志中的事务的信息。
与replication_connection_configuration表相比,replication_connection_status更频繁更改。它包含在连接期间更改的值,而replication_connection_configuration包含定义副本连接到源的值,在连接期间保持不变。
replication_connection_status表具有以下列:
-
CHANNEL_NAME此行显示的复制通道。始终存在一个默认复制通道,并且可以添加更多复制通道。有关更多信息,请参见第 19.2.2 节,“复制通道”。
-
GROUP_NAME如果此服务器是某个组的成员,则显示服务器所属组的名称。
-
SOURCE_UUID源的
server_uuid值。 -
THREAD_IDI/O 线程 ID。
-
SERVICE_STATEON(线程存在且活动或空闲),OFF(线程不再存在),或CONNECTING(线程存在且正在连接到源)。 -
RECEIVED_TRANSACTION_SET对应于此副本接收的所有事务的全局事务 ID(GTID)集。如果未使用 GTID,则为空。有关更多信息,请参见 GTID 集。
-
LAST_ERROR_NUMBER,LAST_ERROR_MESSAGE导致 I/O 线程停止的最近错误的错误编号和错误消息。错误编号为 0,消息为空字符串表示“无错误”。如果
LAST_ERROR_MESSAGE值不为空,则错误值也会出现在副本的错误日志中。发出
RESET MASTER或RESET REPLICA会重置这些列中显示的值。 -
LAST_ERROR_TIMESTAMP以
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]'格式显示的时间戳,显示最近的 I/O 错误发生时间。 -
LAST_HEARTBEAT_TIMESTAMP一个时间戳,格式为
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]',显示副本何时收到最近的心跳信号。 -
COUNT_RECEIVED_HEARTBEATS一个副本自上次重新启动或重置以来接收的心跳信号总数,或自上次发出
CHANGE REPLICATION SOURCE TO|CHANGE MASTER TO语句以来。 -
LAST_QUEUED_TRANSACTION最后一个排队到中继日志的事务的全局事务 ID(GTID)。
-
LAST_QUEUED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP一个时间戳,格式为
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]',显示上一个在中继日志中排队的事务何时在原始源上提交。 -
LAST_QUEUED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP一个时间戳,格式为
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]',显示上一个在中继日志中排队的事务何时在即时源上提交。 -
LAST_QUEUED_TRANSACTION_START_QUEUE_TIMESTAMP一个时间戳,格式为
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]',显示上一个事务何时被此 I/O 线程放入中继日志队列中。 -
LAST_QUEUED_TRANSACTION_END_QUEUE_TIMESTAMP一个时间戳,格式为
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]',显示上一个事务何时排队到中继日志文件中。 -
QUEUEING_TRANSACTION当前在中继日志中排队事务的全局事务 ID(GTID)。
-
QUEUEING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP一个时间戳,格式为
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]',显示当前排队事务何时在原始源上提交。 -
QUEUEING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP一个时间戳,格式为
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]',显示当前排队事务何时在即时源上提交。 -
QUEUEING_TRANSACTION_START_QUEUE_TIMESTAMP一个时间戳,格式为
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]',显示当前排队事务的第一个事件何时由此 I/O 线程写入中继日志。
当性能模式被禁用时,本地时间信息不会被收集,因此显示排队事务的开始和结束时间戳的字段为零。
replication_connection_status表具有以下索引:
-
主键在(
CHANNEL_NAME) -
在(
THREAD_ID)上的索引
以下表显示了replication_connection_status列和SHOW REPLICA STATUS列之间的对应关系。
replication_connection_status列 | SHOW REPLICA STATUS列 |
|---|---|
SOURCE_UUID | Master_UUID |
THREAD_ID | None |
SERVICE_STATE | Replica_IO_Running |
RECEIVED_TRANSACTION_SET | Retrieved_Gtid_Set |
LAST_ERROR_NUMBER | Last_IO_Errno |
LAST_ERROR_MESSAGE | Last_IO_Error |
LAST_ERROR_TIMESTAMP | Last_IO_Error_Timestamp |
29.12.11.3 复制异步连接故障转移表
此表为异步连接故障转移机制的每个复制通道保存副本的源列表。异步连接故障转移机制在副本到源的连接失败后,自动从适当的列表中向新源建立异步(源到副本)复制连接。当为由 Group Replication 管理的一组副本启用异步连接故障转移时,当它们加入时,源列表会广播到所有组成员,并且当列表发生变化时也会广播。
您可以使用asynchronous_connection_failover_add_source和asynchronous_connection_failover_delete_source函数设置和管理源列表,以添加和删除复制源服务器到复制通道的源列表。要添加和删除受管理的服务器组,请改用asynchronous_connection_failover_add_managed和asynchronous_connection_failover_delete_managed函数。
有关更多信息,请参见第 19.4.9 节,“使用异步连接故障转移切换源和副本”。
replication_asynchronous_connection_failover 表具有以下列:
-
通道名称此复制源服务器所属源列表的复制通道。如果此通道与当前源的连接失败,则此复制源服务器是其潜在的新源之一。
-
主机此复制源服务器的主机名。
-
端口此复制源服务器的端口号。
-
网络命名空间复制源服务器的网络命名空间。如果此值为空,则连接使用默认(全局)命名空间。
-
权重在复制通道源列表中,此复制源服务器的优先级。权重范围为 1 到 100,100 为最高,50 为默认值。当异步连接故障转移机制激活时,通道源列表中备选源中设置最高权重的源将被选择用于第一次连接尝试。如果此尝试不起作用,则副本将按权重降序尝试所有列出的源,然后再从最高权重源开始。如果多个源具有相同的权重,则副本会随机排序它们。
-
MANAGED_NAME服务器所属的受管理组的标识符。对于
GroupReplication受管理服务,该标识符是group_replication_group_name系统变量的值。
replication_asynchronous_connection_failover 表具有以下索引:
- 主键为 (
CHANNEL_NAME, HOST, PORT, NETWORK_NAMESPACE, MANAGED_NAME)
TRUNCATE TABLE 不允许用于 replication_asynchronous_connection_failover 表。
29.12.11.4 复制异步连接故障转移管理表
此表保存由副本的异步连接故障转移机制使用的配置信息,用于处理受管理组,包括 Group Replication 拓扑。
当您将组成员添加到源列表并将其定义为受管理组的一部分时,异步连接故障转移机制会更新源列表,以使其与成员变化保持一致,自动添加和删除组成员,随着它们加入或离开。当为由 Group Replication 管理的一组副本启用异步连接故障转移时,当它们加入时,源列表会广播到所有组成员,并且当列表发生变化时也会广播。
异步连接故障转移机制会在源列表中另一个可用服务器具有更高优先级(权重)设置时切换连接。对于受管理的组,源的权重根据其是主服务器还是从服务器而分配。因此,假设您设置了受管理组以给主服务器分配更高的权重,给从服务器分配较低的权重,当主服务器更改时,新主服务器被分配更高的权重,因此副本切换到新主服务器的连接。异步连接故障转移机制还会在当前连接的受管理源服务器离开受管理组或不再是受管理组中的大多数时更改连接。有关更多信息,请参见第 19.4.9 节,“使用异步连接故障转移切换源和副本”。
replication_asynchronous_connection_failover_managed 表包含以下列:
-
CHANNEL_NAME用于操作此受管理组的复制通道。
-
MANAGED_NAME受管理组的标识符。对于
GroupReplication受管理服务,标识符是group_replication_group_name系统变量的值。 -
MANAGED_TYPE异步连接故障转移机制为该组提供的受管理服务类型。目前唯一可用的值是
GroupReplication。 -
CONFIGURATION此托管组的配置信息。对于
GroupReplication托管服务,配置显示分配给组的主服务器和组的辅助服务器的权重。例如:{"Primary_weight": 80, "Secondary_weight": 60}-
Primary_weight: 介于 0 和 100 之间的整数。默认值为 80。 -
Secondary_weight: 介于 0 和 100 之间的整数。默认值为 60。
-
replication_asynchronous_connection_failover_managed 表具有以下索引:
- 主键为(
CHANNEL_NAME, MANAGED_NAME)。
TRUNCATE TABLE 不允许用于replication_asynchronous_connection_failover_managed 表。
原文:
dev.mysql.com/doc/refman/8.0/en/performance-schema-replication-applier-configuration-table.html
29.12.11.5 复制 _applier_configuration 表
此表显示影响副本应用的事务的配置参数。表中存储的参数可以使用CHANGE REPLICATION SOURCE TO语句(从 MySQL 8.0.23 开始)或CHANGE MASTER TO语句(在 MySQL 8.0.23 之前)在运行时更改。
replication_applier_configuration 表具有以下列:
-
CHANNEL_NAME此行显示的复制通道。始终存在默认复制通道,并且可以添加更多复制通道。有关更多信息,请参见第 19.2.2 节,“复制通道”。
-
DESIRED_DELAY复制品必须滞后源的秒数。 (
CHANGE REPLICATION SOURCE TO选项:SOURCE_DELAY,CHANGE MASTER TO选项:MASTER_DELAY)。有关更多信息,请参见第 19.4.11 节,“延迟复制”。 -
PRIVILEGE_CHECKS_USER为通道提供安全上下文的用户帐户(
CHANGE REPLICATION SOURCE TO选项:PRIVILEGE_CHECKS_USER,CHANGE MASTER TO选项:PRIVILEGE_CHECKS_USER)。这是经过转义的,以便可以将其复制到 SQL 语句中以执行单个事务。有关更多信息,请参见第 19.3.3 节,“复制权限检查”。 -
REQUIRE_ROW_FORMAT通道是否仅接受基于行的事件(
CHANGE REPLICATION SOURCE TO选项:REQUIRE_ROW_FORMAT,CHANGE MASTER TO选项:REQUIRE_ROW_FORMAT)。有关更多信息,请参见第 19.3.3 节,“复制权限检查”。 -
REQUIRE_TABLE_PRIMARY_KEY_CHECK通道是否始终需要主键,从不需要,或根据源的设置(
CHANGE REPLICATION SOURCE TO选项:REQUIRE_TABLE_PRIMARY_KEY_CHECK,CHANGE MASTER TO选项:REQUIRE_TABLE_PRIMARY_KEY_CHECK)。有关更多信息,请参见第 19.3.3 节,“复制权限检查”。 -
ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS_TYPE通道是否为尚未具有 GTID 的复制事务分配 GTID(
CHANGE REPLICATION SOURCE TO选项:ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS,CHANGE MASTER TO选项:ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS)。OFF表示不分配 GTID。LOCAL表示分配包含副本自身 UUID(server_uuid设置)的 GTID。UUID表示分配包含手动设置 UUID 的 GTID。更多信息请参见 Section 19.1.3.6, “Replication From a Source Without GTIDs to a Replica With GTIDs”。 -
ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS_VALUE用作分配给匿名事务的 GTIDs 的 UUID(
CHANGE REPLICATION SOURCE TO选项:ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS,CHANGE MASTER TO选项:ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS)。更多信息请参见 Section 19.1.3.6, “Replication From a Source Without GTIDs to a Replica With GTIDs”。
replication_applier_configuration 表具有以下索引:
- 主键为 (
CHANNEL_NAME)
TRUNCATE TABLE 不允许用于 replication_applier_configuration 表。
以下表格显示了 replication_applier_configuration 列与 SHOW REPLICA STATUS 列之间的对应关系。
replication_applier_configuration 列 | SHOW REPLICA STATUS 列 |
|---|---|
DESIRED_DELAY | SQL_Delay |
原文:
dev.mysql.com/doc/refman/8.0/en/performance-schema-replication-applier-status-table.html
29.12.11.6 复制 _applier_status 表
该表显示副本上当前的一般事务执行状态。该表提供有关事务应用程序状态的一般方面的信息,这些信息与涉及的任何线程无关。线程特定的状态信息可在replication_applier_status_by_coordinator表中找到(如果副本是多线程的,则在replication_applier_status_by_worker中也有)。
replication_applier_status表具有以下列:
-
CHANNEL_NAME显示此行所显示的复制通道。始终存在默认复制通道,并且可以添加更多复制通道。有关更多信息,请参见 Section 19.2.2,“复制通道”。
-
SERVICE_STATE当复制通道的应用程序线程处于活动或空闲状态时显示
ON,OFF表示应用程序线程不活动。 -
REMAINING_DELAY如果副本正在等待
DESIRED_DELAY秒,以便自源应用事务以来经过,此字段包含剩余延迟秒数。在其他时间,此字段为NULL。(DESIRED_DELAY值存储在replication_applier_configuration表中。)有关更多信息,请参见 Section 19.4.11,“延迟复制”。 -
COUNT_TRANSACTIONS_RETRIES显示由于复制 SQL 线程未能应用事务而进行的重试次数。给定事务的最大重试次数由系统变量
replica_transaction_retries和slave_transaction_retries设置。replication_applier_status_by_worker表显示了单线程或多线程副本的事务重试的详细信息。
replication_applier_status表具有以下索引:
- (
CHANNEL_NAME)上的主键
TRUNCATE TABLE 不允许用于replication_applier_status表。
以下表格显示了replication_applier_status列与SHOW REPLICA STATUS列之间的对应关系。
replication_applier_status 列 | SHOW REPLICA STATUS 列 |
|---|---|
SERVICE_STATE | 无 |
REMAINING_DELAY | SQL_Remaining_Delay |
29.12.11.7 复制 _applier_status_by_coordinator 表
对于多线程复制,复制使用多个工作线程和一个协调线程来管理它们,此表显示协调线程的状态。对于单线程复制,此表为空。对于多线程复制,replication_applier_status_by_worker 表显示工作线程的状态。此表提供有关由协调线程缓冲到工作线程队列的最后一个事务的信息,以及它当前正在缓冲的事务。开始时间戳指的是此线程从中继日志读取事务的第一个事件并将其缓冲到工作线程队列的时间,而结束时间戳指的是最后一个事件完成缓冲到工作线程队列的时间。
replication_applier_status_by_coordinator 表具有以下列:
-
CHANNEL_NAME此行显示的复制通道。始终存在默认复制通道,并且可以添加更多复制通道。有关更多信息,请参见 Section 19.2.2, “Replication Channels”。
-
THREAD_IDSQL/协调线程 ID。
-
SERVICE_STATEON(线程存在且活动或空闲)或OFF(线程已不存在)。 -
LAST_ERROR_NUMBER,LAST_ERROR_MESSAGE导致 SQL/协调线程停止的最近错误的错误编号和错误消息。错误编号为 0,消息为空字符串表示“无错误”。如果
LAST_ERROR_MESSAGE值不为空,则错误值也会出现在复制的错误日志中。发出
RESET MASTER或RESET REPLICA将重置这些列中显示的值。所有显示在
LAST_ERROR_NUMBER和LAST_ERROR_MESSAGE列中的错误代码和消息对应于服务器错误消息参考中列出的错误值。 -
LAST_ERROR_TIMESTAMP以
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]'格式的时间戳,显示最近的 SQL/协调器错误发生的时间。 -
LAST_PROCESSED_TRANSACTION此协调器处理的最后一个事务的全局事务 ID(GTID)。
-
LAST_PROCESSED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP一个时间戳,采用
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]'格式,显示此协调器处理的最后一个事务在原始源上提交的时间。 -
LAST_PROCESSED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP一个时间戳,采用
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]'格式,显示此协调器处理的最后一个事务在即时源上提交的时间。 -
LAST_PROCESSED_TRANSACTION_START_BUFFER_TIMESTAMP一个时间戳,采用
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]'格式,显示此协调器线程开始将最后一个事务写入工作线程的缓冲区的时间。 -
LAST_PROCESSED_TRANSACTION_END_BUFFER_TIMESTAMP一个时间戳,采用
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]'格式,显示此协调器线程将最后一个事务写入工作线程的缓冲区的时间。 -
PROCESSING_TRANSACTION此协调器线程当前正在处理的事务的全局事务 ID(GTID)。
-
PROCESSING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP一个时间戳,采用
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]'格式,显示当前处理事务在原始源上提交的时间。 -
PROCESSING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP一个时间戳,采用
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]'格式,显示当前处理事务在即时源上提交的时间。 -
PROCESSING_TRANSACTION_START_BUFFER_TIMESTAMP一个时间戳,采用
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]'格式,显示此协调器线程开始将当前处理事务写入工作线程的缓冲区的时间。
当性能模式被禁用时,本地时间信息不会被收集,因此显示缓冲事务的开始和结束时间戳的字段为零。
replication_applier_status_by_coordinator表具有以下索引:
-
在(
CHANNEL_NAME)上的主键 -
在(
THREAD_ID)上的索引
以下表显示replication_applier_status_by_coordinator列与SHOW REPLICA STATUS列之间的对应关系。
replication_applier_status_by_coordinator列 | SHOW REPLICA STATUS列 |
|---|---|
THREAD_ID | None |
SERVICE_STATE | Replica_SQL_Running |
LAST_ERROR_NUMBER | Last_SQL_Errno |
LAST_ERROR_MESSAGE | Last_SQL_Error |
LAST_ERROR_TIMESTAMP | Last_SQL_Error_Timestamp |
原文:
dev.mysql.com/doc/refman/8.0/en/performance-schema-replication-applier-status-by-worker-table.html
29.12.11.8 复制 _applier_status_by_worker 表
此表提供了在副本或组复制组成员上由应用程序线程处理的事务的详细信息。对于单线程副本,显示副本的单个应用程序线程的数据。对于多线程副本,分别显示每个应用程序线程的数据。多线程副本上的应用程序线程有时称为工作者。副本或组复制组成员上的应用程序线程数量由replica_parallel_workers或slave_parallel_workers系统变量设置,对于单线程副本,该变量设置为零。多线程副本还有一个协调器线程来管理应用程序线程,并且此线程的状态显示在replication_applier_status_by_coordinator表中。
所有与错误相关的列中显示的错误代码和消息对应于服务器错误消息参考中列出的错误值。
当关闭性能模式时,不会收集本地时间信息,因此显示应用事务的开始和结束时间戳的字段为零。此表中的开始时间戳指的是工作者开始应用第一个事件的时间,结束时间戳指的是应用事务的最后一个事件的时间。
当副本通过START REPLICA语句重新启动时,以APPLYING_TRANSACTION开头的列将被重置。在 MySQL 8.0.13 之前,这些列在单线程模式下运��的副本上不会被重置,只有在多线程副本上才会被重置。
replication_applier_status_by_worker表具有以下列:
-
CHANNEL_NAME此行显示的复制通道。始终存在默认复制通道,并且可以添加更多复制通道。有关更多信息,请参见 Section 19.2.2, “Replication Channels”。
-
WORKER_ID工作者标识符(与
mysql.slave_worker_info表中的id列相同)。在STOP REPLICA之后,THREAD_ID列变为NULL,但WORKER_ID值保持不变。 -
THREAD_ID工作者线程 ID。
-
SERVICE_STATEON(线程存在且活动或空闲)或OFF(线程不再存在)。 -
LAST_ERROR_NUMBER,LAST_ERROR_MESSAGE导致工作线程停止的最近错误的错误编号和错误消息。错误编号为 0 且消息为空字符串表示“无错误”。如果
LAST_ERROR_MESSAGE值不为空,则错误值也会出现在副本的错误日志中。发出
RESET MASTER或RESET REPLICA将重置这些列中显示的值。 -
LAST_ERROR_TIMESTAMP一个时间戳,格式为
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]',显示最近发生的工作程序错误的时间。 -
LAST_APPLIED_TRANSACTION此工作程序应用的最后一个事务的全局事务 ID(GTID)。
-
LAST_APPLIED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP一个时间戳,格式为
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]',显示此工作程序应用的最后一个事务在原始来源上提交的时间。 -
LAST_APPLIED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP一个时间戳,格式为
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]',显示此工作程序应用的最后一个事务在即时来源上提交的时间。 -
LAST_APPLIED_TRANSACTION_START_APPLY_TIMESTAMP一个时间戳,格式为
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]',显示此工作程序开始应用最后一个应用事务的时间。 -
LAST_APPLIED_TRANSACTION_END_APPLY_TIMESTAMP一个时间戳,格式为
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]',显示此工作程序完成应用最后一个应用事务的时间。 -
APPLYING_TRANSACTION此工作程序当前应用的事务的全局事务 ID(GTID)。
-
APPLYING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP一个时间戳,格式为
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]',显示此工作程序当前应用的事务在原始来源上提交的时间。 -
APPLYING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP一个时间戳,格式为
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]',显示此工作程序当前应用的事务在即时来源上提交的时间。 -
APPLYING_TRANSACTION_START_APPLY_TIMESTAMP一个时间戳,格式为
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]',显示此工作程序开始尝试应用当前正在应用的事务的时间。在 MySQL 8.0.13 之前,由于瞬时错误导致事务重试时,此时间戳会刷新,因此显示了应用事务的最近尝试的时间戳。 -
LAST_APPLIED_TRANSACTION_RETRIES_COUNT最后一个应用事务在第一次尝试后由工作程序重试的次数。如果事务在第一次尝试时应用,则此数字为零。
-
LAST_APPLIED_TRANSACTION_LAST_TRANSIENT_ERROR_NUMBER最后一个瞬时错误的错误编号,导致事务需要重试。
-
LAST_APPLIED_TRANSACTION_LAST_TRANSIENT_ERROR_MESSAGE导致事务重试的最后一个瞬时错误的消息文本。
-
LAST_APPLIED_TRANSACTION_LAST_TRANSIENT_ERROR_TIMESTAMP以
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]'格式表示的最后一个导致事务重试的瞬时错误的时间戳。 -
APPLYING_TRANSACTION_RETRIES_COUNT当前正在应用的事务被重试的次数。如果事务第一次尝试时就被应用,这个数字为零。
-
APPLYING_TRANSACTION_LAST_TRANSIENT_ERROR_NUMBER导致当前事务重试的最后一个瞬时错误的错误编号。
-
APPLYING_TRANSACTION_LAST_TRANSIENT_ERROR_MESSAGE导致当前事务重试的最后一个瞬时错误的消息文本。
-
APPLYING_TRANSACTION_LAST_TRANSIENT_ERROR_TIMESTAMP以
'*YYYY-MM-DD hh:mm:ss*[.*fraction*]'格式表示的最后一个导致当前事务重试的瞬时错误的时间戳。
replication_applier_status_by_worker 表具有以下索引:
-
在 (
CHANNEL_NAME,WORKER_ID) 上的主键 -
在 (
THREAD_ID) 上的索引
下表显示了replication_applier_status_by_worker列与SHOW REPLICA STATUS列之间的对应关系。
replication_applier_status_by_worker 列 | SHOW REPLICA STATUS 列 |
|---|---|
WORKER_ID | 无 |
THREAD_ID | 无 |
SERVICE_STATE | 无 |
LAST_ERROR_NUMBER | Last_SQL_Errno |
LAST_ERROR_MESSAGE | Last_SQL_Error |
LAST_ERROR_TIMESTAMP | Last_SQL_Error_Timestamp |