15.7.7.16 显示引擎语句
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 互斥锁和读写锁也可以使用性能 Schema 表来监控。请见第17.16.2节,“使用性能 Schema 监控 InnoDB 互斥锁等待”。
互斥锁统计信息的配置是动态的,可以使用以下选项进行配置:
-
要启用互斥锁统计信息的收集,请运行:
SET GLOBAL innodb_monitor_enable='latch'; -
要重置互斥锁统计信息,请运行:
SET GLOBAL innodb_monitor_reset='latch'; -
要禁用互斥锁统计信息的收集,请运行:
SET GLOBAL innodb_monitor_disable='latch';
互斥锁统计信息的收集也可以通过设置innodb_monitor_enable='all'启用或禁用innodb_monitor_disable='all'。
SHOW ENGINE INNODB MUTEX 输出具有以下列:
-
Type总是
InnoDB。 -
Name对于互斥锁,
Name字段报告互斥锁的名称。对于读写锁,Name字段报告读写锁的实现文件和行号。行号是特定于 MySQL 版本的。 -
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级别等待的互斥锁和读写锁。
使用 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 值由两个部分组成,分别命名内部缓冲区和缓冲区属性。解释缓冲区名称如下:
-
内部缓冲区不 exposures 作为表的名称在括号中。示例:
(pfs_cond_class).size,(pfs_mutex_class).memory。 -
内部缓冲区 exposures 作为表在性能方案数据库中的名称不在括号中。示例:
events_waits_history.size,mutex_instances.count。 -
对性能方案的整体值以
performance_schema开头。示例:performance_schema.memory。
缓冲区属性具有以下含义:
-
size是实现中使用的内部记录大小,例如表中的行大小。size值不能被改变。 -
count是内部记录的数量,例如表中的行数。count值可以使用性能方案配置选项进行更改。 -
对于表,
是tbl_name.memorysize和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将显示集群状态信息,如数据节点的连接数、集群连接字符串和集群二进制日志epochs,以及各种Cluster API对象在MySQL Server连接到集群时创建的数量。以下是该语句的示例输出:
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列中包含以下表格中描述的名称-值对。
| Name | Value |
|---|---|
cluster_node_id |
MySQL服务器在集群中的节点ID |
connected_host |
MySQL服务器连接到的集群管理服务器的主机名或IP地址 |
connected_port |
MySQL服务器连接到管理服务器(connected_host)的端口号 |
number_of_data_nodes |
集群配置的数据节点数量(即[ndbd]部分在集群config.ini文件中的数量) |
number_of_ready_data_nodes |
集群中的实际运行数据节点数量 |
connect_count |
MySQL服务器连接或重新连接到集群数据节点的次数 |
在binlog行的Status列中包含NDB集群复制相关的信息。名称-值对的描述见以下表格。
| Name | Value |
|---|---|
latest_epoch |
MySQL服务器最近一次运行的epoch(即事务序列号) |
latest_trans_epoch |
集群数据节点最近一次处理的epoch |
latest_received_binlog_epoch |
集群二进制日志线程最近一次接收的epoch |
latest_handled_binlog_epoch |
集群二进制日志线程最近一次处理的epoch(用于写入二进制日志) |
latest_applied_binlog_epoch |
集群二进制日志线程最近一次实际写入的epoch |
请参阅Section 25.7, “NDB Cluster Replication”,了解更多信息。
SHOW ENGINE NDB STATUS语句的输出中,以下行最可能证明有用在监控集群的名称:
-
NdbTransaction: 创建的NdbTransaction对象的数量和大小。每次对CREATE TABLE或ALTER TABLE进行表架构操作时都会创建一个NdbTransaction对象。 -
NdbOperation: 创建的NdbOperation对象的数量和大小。 -
NdbIndexScanOperation: 创建的NdbIndexScanOperation对象的数量和大小。 -
NdbIndexOperation: 创建的NdbIndexOperation对象的数量和大小。 -
NdbRecAttr: 创建的NdbRecAttr对象的数量和大小。通常,每执行一次数据操作语句时都会创建一个这样的对象。 -
NdbBlob: 创建的NdbBlob对象的数量和大小。每执行一次涉及到BLOB列的操作时都会创建一个NdbBlob对象。 -
NdbReceiver: 创建的NdbReceiver对象的数量和大小。该对象的数量等于连接到该 MySQL 服务器的数据节点的数量。
SHOW ENGINE NDB STATUS 如果当前会话中没有执行涉及到NDB 表的操作,则返回一个空结果。