13.7.5.15 SHOW ENGINE 语句
SHOW ENGINE engine_name {STATUS | MUTEX}
SHOW ENGINE显示有关存储引擎的操作信息。它需要PROCESS特权。该语句具有以下变体:
SHOW ENGINE INNODB STATUS
SHOW ENGINE INNODB MUTEX
SHOW ENGINE PERFORMANCE_SCHEMA STATUS
显示引擎的 INNODB 状态显示来自标准InnoDB
监视器的有关InnoDB
存储引擎状态的大量信息。有关标准监视器和提供有关InnoDB
处理的信息的其他InnoDB
监视器的信息,请参见第 14.18 节“ InnoDB 监视器”。
显示引擎 INNODB MUTEX显示InnoDB
mutex和rw-lock统计信息。
Note
InnoDB
互斥锁和 rwlock 也可以使用Performance Schematable 进行监视。参见第 14.17.2 节“使用性能模式监视 InnoDB Mutexawait”。
显示引擎 INNODB MUTEX输出已在 MySQL 5.7.2 中删除。它在 MySQL 5.7.8 中进行了修订并重新引入。
在 MySQL 5.7.8 中,使用以下选项动态配置互斥量统计信息收集:
- 要启用互斥量统计信息收集,请运行:
SET GLOBAL innodb_monitor_enable='latch';
- 要重置互斥量统计信息,请运行:
SET GLOBAL innodb_monitor_reset='latch';
- 要禁用互斥量统计信息的收集,请运行:
SET GLOBAL innodb_monitor_disable='latch';
显示引擎 INNODB MUTEX的互斥量统计信息收集也可以通过设置innodb_monitor_enable='all'启用,或通过设置innodb_monitor_disable='all'禁用。
显示引擎 INNODB MUTEX输出包含以下列:
Type
一律InnoDB
。
Name
在 MySQL 5.7.8 之前,Name
字段报告实现互斥锁的源文件,以及创建互斥锁的文件中的行号。行号特定于您的 MySQL 版本。从 MySQL 5.7.8 开始,仅报告 Mutex 名称。仍然报告 rwlocks 的文件名和行号。
Status
互斥状态。
在 MySQL 5.7.8 之前,如果WITH_DEBUG是在 MySQL 编译时定义的,则Status
字段显示多个值。如果未定义WITH_DEBUG,则该语句仅显示os_waits
值。在后一种情况下(没有WITH_DEBUG),输出所基于的信息不足以区分常规互斥锁和保护 rwlock 的互斥锁(允许多个读取器或单个写入器)。因此,输出似乎包含同一互斥锁的多个行。 MySQL 5.7.8 之前的Status
字段值包括:
-
count
table 示请求互斥锁的次数。-
spin_waits
指示自旋锁必须运行多少次。 -
spin_rounds
table 示自旋锁的弹数。 (spin_rounds
除以spin_waits
提供的平均回合计数.) -
os_waits
table 示 osawait 的次数。当自旋锁不起作用时会发生这种情况(自旋锁期间互斥锁未锁定,必须屈服于 os 并 await)。 -
os_yields
table 示试图锁定互斥锁的线程放弃其时间片并屈服于 os 的次数(假定允许其他线程运行将释放互斥锁,以便可以将其锁定)。 -
os_wait_times
table 示 osawait 所花费的时间(以毫秒为单位)。在 MySQL 5.7 中,计时被禁用,并且该值始终为 0.
-
从 MySQL 5.7.8 开始,Status
字段报告旋转,await 和调用的次数。不报告在InnoDB
之外实现的低级 os 互斥量的统计信息。
-
spins
table 示旋转次数。-
waits
table 示 Mutexawait 的次数。 -
calls
table 示请求互斥锁的次数。
-
SHOW ENGINE INNODB MUTEX
并未列出每个缓冲池块的互斥锁和 rw 锁,因为在具有较大缓冲池的系统上,输出量将不堪重负。 SHOW ENGINE INNODB MUTEX
确实会为缓冲池块互斥锁和 rw 锁打印聚合BUF_BLOCK_MUTEX
旋转,await 和调用值。 SHOW ENGINE INNODB MUTEX
也不会列出从未 await 过的任何互斥或 rw 锁(os_waits=0
)。因此,SHOW ENGINE INNODB MUTEX
仅显示有关导致至少一个 OS 级wait的缓冲池之外的互斥锁和 rw 锁的信息。
使用显示引擎 PERFORMANCE_SCHEMA 状态检查性能模式代码的内部操作:
mysql> SHOW ENGINE PERFORMANCE_SCHEMA STATUS\G
...
*************************** 3. row ***************************
Type: performance_schema
Name: events_waits_history.size
Status: 76
*************************** 4. row ***************************
Type: performance_schema
Name: events_waits_history.count
Status: 10000
*************************** 5. row ***************************
Type: performance_schema
Name: events_waits_history.memory
Status: 760000
...
*************************** 57. row ***************************
Type: performance_schema
Name: performance_schema.memory
Status: 26459600
...
该语句旨在帮助 DBA 了解不同的“性能模式”选项对内存要求的影响。
Name
值由两部分组成,分别命名为内部缓冲区和缓冲区属性。解释缓冲区名称,如下所示:
-
括号内命名为未作为 table 公开的内部缓冲区。示例:
(pfs_cond_class).size
,(pfs_mutex_class).memory
。 -
在 table_1 的内部命名为内部缓冲区,该缓冲区以 table 的形式命名,不带括号。示例:
events_waits_history.size
,mutex_instances.count
。 -
整体上适用于性能模式的值以
performance_schema
开头。示例:performance_schema.memory
。
缓冲区属性具有以下含义:
-
size
是实现使用的内部记录的大小,例如 table 中行的大小。size
值无法更改。 -
count
是内部记录的数量,例如 table 中的行数。可以使用“性能模式”配置选项来更改count
的值。 -
对于 table,
tbl_name.memory
是size
和count
的乘积。对于整个性能模式,performance_schema.memory
是所有已使用内存的总和(所有其他memory
值的总和)。
在某些情况下,性能模式配置参数和SHOW ENGINE
值之间存在直接关系。例如,events_waits_history_long.count
对应于performance_schema_events_waits_history_long_size。在其他情况下,关系更复杂。例如,events_waits_history.count
对应于performance_schema_events_waits_history_size(每个线程的行数)乘以performance_schema_max_thread_instances(线程数)。
SHOW ENGINE NDB STATUS. 如果服务器启用了NDB存储引擎,则SHOW ENGINE NDB STATUS
将显示群集状态信息,例如已连接数据节点的数量,群集连接字符串和群集二进制日志时期,以及各种计数连接到群集时,由 MySQL Server 创建的群集 API 对象。此语句的示例输出如下所示:
mysql> SHOW ENGINE NDB STATUS;
+------------+-----------------------+--------------------------------------------------+
| Type | Name | Status |
+------------+-----------------------+--------------------------------------------------+
| ndbcluster | connection | cluster_node_id=7,
connected_host=198.51.100.103, connected_port=1186, number_of_data_nodes=4,
number_of_ready_data_nodes=3, connect_count=0 |
| ndbcluster | NdbTransaction | created=6, free=0, sizeof=212 |
| ndbcluster | NdbOperation | created=8, free=8, sizeof=660 |
| ndbcluster | NdbIndexScanOperation | created=1, free=1, sizeof=744 |
| ndbcluster | NdbIndexOperation | created=0, free=0, sizeof=664 |
| ndbcluster | NdbRecAttr | created=1285, free=1285, sizeof=60 |
| ndbcluster | NdbApiSignal | created=16, free=16, sizeof=136 |
| ndbcluster | NdbLabel | created=0, free=0, sizeof=196 |
| ndbcluster | NdbBranch | created=0, free=0, sizeof=24 |
| ndbcluster | NdbSubroutine | created=0, free=0, sizeof=68 |
| ndbcluster | NdbCall | created=0, free=0, sizeof=16 |
| ndbcluster | NdbBlob | created=1, free=1, sizeof=264 |
| ndbcluster | NdbReceiver | created=4, free=0, sizeof=68 |
| ndbcluster | binlog | latest_epoch=155467, latest_trans_epoch=148126,
latest_received_binlog_epoch=0, latest_handled_binlog_epoch=0,
latest_applied_binlog_epoch=0 |
+------------+-----------------------+--------------------------------------------------+
这些行中的每一行的Status
列分别提供有关 MySQL 服务器与集群的连接以及集群二进制日志的状态的信息。 Status
信息采用名称/值对的逗号分隔集的形式。
connection
行的Status
列包含下 table 中描述的名称/值对。
Name | Value |
---|---|
cluster_node_id |
集群中 MySQL 服务器的节点 ID |
connected_host |
与 MySQL 服务器连接的集群 Management 服务器的主机名或 IP 地址 |
connected_port |
MySQL 服务器用来连接 Management 服务器的端口(connected_host ) |
number_of_data_nodes |
为集群配置的数据节点数(即,集群config.ini 文件中的[ndbd] 个部分的数量) |
number_of_ready_data_nodes |
集群中实际运行的数据节点数 |
connect_count |
此mysqld已连接或重新连接到集群数据节点的次数 |
binlog
行的Status
列包含与 NDB 群集复制有关的信息。下 table 描述了它包含的名称/值对。
Name | Value |
---|---|
latest_epoch |
此 MySQL 服务器上最近运行的最新纪元(即服务器上运行的最新事务的序列号) |
latest_trans_epoch |
集群的数据节点处理的最新纪元 |
latest_received_binlog_epoch |
二进制日志线程接收到的最新纪元 |
latest_handled_binlog_epoch |
二进制日志线程处理的最新纪元(用于写入二进制日志) |
latest_applied_binlog_epoch |
实际写入二进制日志的最新纪元 |
有关更多信息,请参见第 21.6 节“ NDB 群集复制”。
SHOW ENGINE NDB STATUS
的输出中剩余的行最有可能被证明对监视集群有用,在这里由Name
列出:
-
NdbTransaction
:已创建的NdbTransaction
个对象的数量和大小。每次在NDBtable 上执行 table 架构操作(例如CREATE TABLE或ALTER TABLE)时,都会创建NdbTransaction
。 -
NdbOperation
:已创建的NdbOperation
个对象的数量和大小。 -
NdbIndexScanOperation
:已创建的NdbIndexScanOperation
个对象的数量和大小。 -
NdbIndexOperation
:已创建的NdbIndexOperation
个对象的数量和大小。 -
NdbRecAttr
:已创建的NdbRecAttr
个对象的数量和大小。通常,每次由 SQL 节点执行数据操作语句时,都会创建其中之一。 -
NdbBlob
:已创建的NdbBlob
个对象的数量和大小。对于涉及NDBtable 中的BLOB列的每个新操作,都会创建NdbBlob
。 -
NdbReceiver
:已创建的任何NdbReceiver
对象的数量和大小。created
列中的数字与 MySQL 服务器已连接到的群集中的数据节点数相同。
Note
如果在当前会话期间,MySQLClient 端访问运行此语句的 SQL 节点没有执行涉及NDBtable 的操作,则SHOW ENGINE NDB STATUS
返回空结果。