文档首页
MySQL 9.0 参考手册
相关文档 下载此手册

MySQL 9.0 参考手册  /  ...  /  SHOW ENGINE 语句

15.7.7.16 SHOW ENGINE 语句

SHOW ENGINE engine_name {STATUS | MUTEX}

SHOW ENGINE 显示关于存储引擎的操作信息。它需要 PROCESS 权限。该语句有以下变体

SHOW ENGINE INNODB STATUS
SHOW ENGINE INNODB MUTEX
SHOW ENGINE PERFORMANCE_SCHEMA STATUS

SHOW ENGINE INNODB STATUS 显示来自标准 InnoDB 监控器的关于 InnoDB 存储引擎状态的详细信息。有关标准监控器和其他提供有关 InnoDB 处理的信息的 InnoDB 监控器的信息,请参阅 第 17.17 章,“InnoDB 监控器”.

SHOW ENGINE INNODB MUTEX 显示 InnoDB 互斥锁读写锁 统计信息。

注意

InnoDB 互斥锁和读写锁也可以使用 Performance Schema 表进行监控。请参阅 第 17.16.2 章,“使用 Performance Schema 监控 InnoDB 互斥锁等待”.

互斥锁统计信息收集使用以下选项动态配置

  • 要启用互斥锁统计信息收集,请运行

    SET GLOBAL innodb_monitor_enable='latch';
  • 要重置互斥锁统计信息,请运行

    SET GLOBAL innodb_monitor_reset='latch';
  • 要禁用互斥锁统计信息收集,请运行

    SET GLOBAL innodb_monitor_disable='latch';

可以通过设置 innodb_monitor_enable='all' 来启用 SHOW ENGINE INNODB MUTEX 的互斥锁统计信息收集,或通过设置 innodb_monitor_disable='all' 来禁用。

SHOW ENGINE INNODB MUTEX 的输出包含以下列:

  • 类型

    始终为 InnoDB

  • 名称

    对于互斥锁,Name 字段仅报告互斥锁名称。对于读写锁,Name 字段报告实现读写锁的源文件以及创建读写锁的文件中的行号。行号特定于您的 MySQL 版本。

  • 状态

    互斥锁状态。此字段报告自旋次数、等待次数和调用次数。不报告在 InnoDB 外部实现的低级操作系统互斥锁的统计信息。

    • spins 表示自旋次数。

    • waits 表示互斥锁等待次数。

    • calls 表示请求互斥锁的次数。

SHOW ENGINE INNODB MUTEX 不会列出每个缓冲池块的互斥锁和读写锁,因为在具有大型缓冲池的系统上,输出量会非常大。但是,SHOW ENGINE INNODB MUTEX 会打印缓冲池块互斥锁和读写锁的聚合 BUF_BLOCK_MUTEX 自旋、等待和调用值。 SHOW ENGINE INNODB MUTEX 也不会列出任何从未被等待过的互斥锁或读写锁 (os_waits=0)。因此,SHOW ENGINE INNODB MUTEX 仅显示有关缓冲池外部互斥锁和读写锁的信息,这些互斥锁和读写锁至少导致了一个操作系统级别的 等待

使用 SHOW ENGINE PERFORMANCE_SCHEMA STATUS 检查性能模式代码的内部操作。

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 值由两部分组成,分别命名一个内部缓冲区和一个缓冲区属性。解释缓冲区名称如下:

  • 未公开为表的内部缓冲区在括号内命名。例如:(pfs_cond_class).size(pfs_mutex_class).memory

  • 公开为 performance_schema 数据库中表的内部缓冲区以表命名,不带括号。例如:events_waits_history.sizemutex_instances.count

  • 应用于整个性能模式的值以 performance_schema 开头。例如:performance_schema.memory

缓冲区属性具有以下含义:

  • size 是实现使用的内部记录的大小,例如表中行的 size。size 值不可更改。

  • count 是内部记录的数量,例如表中行的数量。count 值可以使用性能模式配置选项更改。

  • 对于表,tbl_name.memorysizecount 的乘积。对于整个性能模式,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 服务器在连接到集群时创建的各种集群 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 列包含下表中描述的名称-值对。

名称
cluster_node_id 集群中 MySQL 服务器的节点 ID
connected_host MySQL 服务器连接到的集群管理服务器的主机名或 IP 地址
connected_port MySQL 服务器用于连接到管理服务器 (connected_host) 的端口
number_of_data_nodes 为集群配置的数据节点数量(即集群 config.ini 文件中 [ndbd] 部分的数量)
number_of_ready_data_nodes 集群中实际运行的数据节点数量
connect_count mysqld 连接或重新连接到集群数据节点的次数

binlog 行的 Status 列包含与 NDB 集群复制相关的信息。它包含的名称-值对在下面的表格中描述。

名称
latest_epoch 此 MySQL 服务器最近运行的最新纪元(即服务器上最近运行的事务的序列号)
latest_trans_epoch 集群数据节点处理的最新纪元
latest_received_binlog_epoch 二进制日志线程接收到的最新纪元
latest_handled_binlog_epoch 二进制日志线程处理的最新纪元(用于写入二进制日志)
latest_applied_binlog_epoch 实际写入二进制日志的最新纪元

有关更多信息,请参阅 第 25.7 节“NDB 集群复制”

以下列出了来自 SHOW ENGINE NDB STATUS 输出的剩余行,这些行最有可能在监控集群时被证明有用,按 Name 列出

  • NdbTransaction:已创建的 NdbTransaction 对象的数量和大小。每次对 NDB 表执行表模式操作(例如 CREATE TABLEALTER TABLE)时,都会创建一个 NdbTransaction

  • NdbOperation:已创建的 NdbOperation 对象的数量和大小。

  • NdbIndexScanOperation:已创建的 NdbIndexScanOperation 对象的数量和大小。

  • NdbIndexOperation:已创建的 NdbIndexOperation 对象的数量和大小。

  • NdbRecAttr:已创建的 NdbRecAttr 对象的数量和大小。通常,每次 SQL 节点执行数据操作语句时,都会创建一个这样的对象。

  • NdbBlob:已创建的 NdbBlob 对象的数量和大小。每个涉及 BLOB 列的 NDB 表的新操作都会创建一个 NdbBlob

  • NdbReceiver:已创建的任何 NdbReceiver 对象的数量和大小。created 列中的数字与 MySQL 服务器连接到的集群中数据节点的数量相同。

注意

如果在当前会话期间,访问运行此语句的 SQL 节点的 MySQL 客户端没有执行涉及 NDB 表的操作,则 SHOW ENGINE NDB STATUS 将返回空结果。