Documentation Home

13.7.5.15 显示引擎语句

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处理信息的标准监视器和其他监视器的信息,请参阅 第 14.18 节,“InnoDB 监视器”

SHOW ENGINE INNODB MUTEX显示InnoDB mutexrw-lock统计信息。

笔记

InnoDB互斥锁和 rwlocks 也可以使用Performance Schema表进行监控。请参阅 第 14.17.2 节,“使用性能模式监视 InnoDB 互斥等待”

SHOW ENGINE INNODB MUTEXMySQL 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';

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

SHOW ENGINE INNODB MUTEX输出有以下列:

  • Type

    总是InnoDB

  • Name

    在 MySQL 5.7.8 之前,该Name字段报告实现互斥锁的源文件,以及创建互斥锁的文件中的行号。行号特定于您的 MySQL 版本。从 MySQL 5.7.8 开始,只报告互斥量名称。仍然会为 rwlocks 报告文件名和行号。

  • Status

    互斥状态。

    在 MySQL 5.7.8 之前,如果在 MySQL 编译时定义,该Status字段会显示多个值 。WITH_DEBUG如果 WITH_DEBUG未定义,则该语句仅显示os_waits 值。在后一种情况下(没有 WITH_DEBUG),输出所基于的信息不足以区分常规互斥锁和保护 rwlock 的互斥锁(允许多个读取器或单个写入器)。因此,输出可能看起来包含同一互斥锁的多行。MySQL 5.7.8 之前的Status字段值包括:

    • count指示请求互斥量的次数。

    • spin_waits指示自旋锁必须运行的次数。

    • spin_rounds指示自旋锁轮数。(spin_rounds除以spin_waits提供平均回合数。)

    • os_waits表示操作系统等待的次数。当自旋锁不起作用时会发生这种情况(在自旋锁期间互斥量未被锁定,必须让出操作系统并等待)。

    • os_yields指示尝试锁定互斥量的线程放弃其时间片并让给操作系统的次数(假设允许其他线程运行会释放互斥量以便它可以被锁定)。

    • os_wait_times表示操作系统等待的时间量(以毫秒为单位)。在 MySQL 5.7 中,计时被禁用,该值始终为 0。

    从 MySQL 5.7.8 开始,该Status字段报告自旋、等待和调用的次数。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仅显示有关已导致至少一个 OS-level wait的缓冲池之外的互斥锁和读写锁的信息。

用于SHOW ENGINE PERFORMANCE_SCHEMA STATUS检查 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值由两部分组成,分别命名为内部缓冲区和缓冲区属性。解释缓冲区名称如下:

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

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

  • 适用于整个性能模式的值以performance_schema. 例子: performance_schema.memory

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

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

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

  • 对于表格, tbl_name.memory 是 和 的size乘积 count。对于整个 Performance Schema,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 (线程数)。

显示引擎 NDB 状态。  如果服务器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 为集群配置的数据节点数(即[ndbd]集群 config.ini文件中的section数)
number_of_ready_data_nodes 集群中实际运行的数据节点数
connect_count mysqld已连接或重新连接到集群数据节点的次数

binlog行的 Status列包含与 NDB Cluster Replication 相关的信息。它包含的名称/值对如下表所述。

姓名 价值
latest_epoch most recent epoch most recently run on this MySQL server(即最近在服务器上运行的事务的序号)
latest_trans_epoch 集群数据节点处理的最近时期
latest_received_binlog_epoch 二进制日志线程收到的最新纪元
latest_handled_binlog_epoch 二进制日志线程处理的最近纪元(用于写入二进制日志)
latest_applied_binlog_epoch 实际写入二进制日志的最近纪元

有关更多信息,请参阅第 21.7 节,“NDB Cluster 复制”

输出中的其余行SHOW ENGINE NDB STATUS最有可能被证明对监视集群有用,如下所示 Name

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

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

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

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

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

  • NdbBlobNdbBlob:已创建对象的数量和大小 。 为涉及表中列的每个NdbBlob新操作创建一个。 BLOBNDB

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

笔记

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