21.5.13 NDB API 统计信息计数器和变量

Ndb对象执行或影响Ndb对象执行的动作有关的统计计数器类型很多。这些动作包括启动和关闭(或中止)Transaction;主键和唯一键操作;table,范围和修剪扫描;在 await 各种操作完成时线程被阻塞;以及NDBCLUSTER发送和接收的数据和事件。每当进行 NDB API 调用或数据节点发送或接收数据时,NDB 内核中的计数器就会增加。 mysqld将这些计数器公开为系统状态变量;它们的值可以在SHOW STATUS的输出中读取,也可以通过查询INFORMATION_SCHEMA.SESSION_STATUSINFORMATION_SCHEMA.GLOBAL_STATUStable 来读取。通过比较在NDBtable 上操作的语句之前和之后的值,您可以观察在 API 级别上采取的相应操作,从而观察执行该语句的成本。

您可以使用以下SHOW STATUS语句列出所有这些状态变量:

mysql> SHOW STATUS LIKE 'ndb_api%';
+--------------------------------------------+----------+
| Variable_name                              | Value    |
+--------------------------------------------+----------+
| Ndb_api_wait_exec_complete_count_session   | 0        |
| Ndb_api_wait_scan_result_count_session     | 0        |
| Ndb_api_wait_meta_request_count_session    | 0        |
| Ndb_api_wait_nanos_count_session           | 0        |
| Ndb_api_bytes_sent_count_session           | 0        |
| Ndb_api_bytes_received_count_session       | 0        |
| Ndb_api_trans_start_count_session          | 0        |
| Ndb_api_trans_commit_count_session         | 0        |
| Ndb_api_trans_abort_count_session          | 0        |
| Ndb_api_trans_close_count_session          | 0        |
| Ndb_api_pk_op_count_session                | 0        |
| Ndb_api_uk_op_count_session                | 0        |
| Ndb_api_table_scan_count_session           | 0        |
| Ndb_api_range_scan_count_session           | 0        |
| Ndb_api_pruned_scan_count_session          | 0        |
| Ndb_api_scan_batch_count_session           | 0        |
| Ndb_api_read_row_count_session             | 0        |
| Ndb_api_trans_local_read_row_count_session | 0        |
| Ndb_api_event_data_count_injector          | 0        |
| Ndb_api_event_nondata_count_injector       | 0        |
| Ndb_api_event_bytes_count_injector         | 0        |
| Ndb_api_wait_exec_complete_count_slave     | 0        |
| Ndb_api_wait_scan_result_count_slave       | 0        |
| Ndb_api_wait_meta_request_count_slave      | 0        |
| Ndb_api_wait_nanos_count_slave             | 0        |
| Ndb_api_bytes_sent_count_slave             | 0        |
| Ndb_api_bytes_received_count_slave         | 0        |
| Ndb_api_trans_start_count_slave            | 0        |
| Ndb_api_trans_commit_count_slave           | 0        |
| Ndb_api_trans_abort_count_slave            | 0        |
| Ndb_api_trans_close_count_slave            | 0        |
| Ndb_api_pk_op_count_slave                  | 0        |
| Ndb_api_uk_op_count_slave                  | 0        |
| Ndb_api_table_scan_count_slave             | 0        |
| Ndb_api_range_scan_count_slave             | 0        |
| Ndb_api_pruned_scan_count_slave            | 0        |
| Ndb_api_scan_batch_count_slave             | 0        |
| Ndb_api_read_row_count_slave               | 0        |
| Ndb_api_trans_local_read_row_count_slave   | 0        |
| Ndb_api_wait_exec_complete_count           | 2        |
| Ndb_api_wait_scan_result_count             | 3        |
| Ndb_api_wait_meta_request_count            | 27       |
| Ndb_api_wait_nanos_count                   | 45612023 |
| Ndb_api_bytes_sent_count                   | 992      |
| Ndb_api_bytes_received_count               | 9640     |
| Ndb_api_trans_start_count                  | 2        |
| Ndb_api_trans_commit_count                 | 1        |
| Ndb_api_trans_abort_count                  | 0        |
| Ndb_api_trans_close_count                  | 2        |
| Ndb_api_pk_op_count                        | 1        |
| Ndb_api_uk_op_count                        | 0        |
| Ndb_api_table_scan_count                   | 1        |
| Ndb_api_range_scan_count                   | 0        |
| Ndb_api_pruned_scan_count                  | 0        |
| Ndb_api_scan_batch_count                   | 0        |
| Ndb_api_read_row_count                     | 1        |
| Ndb_api_trans_local_read_row_count         | 1        |
| Ndb_api_event_data_count                   | 0        |
| Ndb_api_event_nondata_count                | 0        |
| Ndb_api_event_bytes_count                  | 0        |
+--------------------------------------------+----------+
60 rows in set (0.02 sec)

这些状态变量也可以从INFORMATION_SCHEMA数据库的SESSION_STATUSGLOBAL_STATUStable 中获得,如下所示:

mysql> SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS 
    ->   WHERE VARIABLE_NAME LIKE 'ndb_api%';
+--------------------------------------------+----------------+
| VARIABLE_NAME                              | VARIABLE_VALUE |
+--------------------------------------------+----------------+
| NDB_API_WAIT_EXEC_COMPLETE_COUNT_SESSION   | 2              |
| NDB_API_WAIT_SCAN_RESULT_COUNT_SESSION     | 0              |
| NDB_API_WAIT_META_REQUEST_COUNT_SESSION    | 1              |
| NDB_API_WAIT_NANOS_COUNT_SESSION           | 8144375        |
| NDB_API_BYTES_SENT_COUNT_SESSION           | 68             |
| NDB_API_BYTES_RECEIVED_COUNT_SESSION       | 84             |
| NDB_API_TRANS_START_COUNT_SESSION          | 1              |
| NDB_API_TRANS_COMMIT_COUNT_SESSION         | 1              |
| NDB_API_TRANS_ABORT_COUNT_SESSION          | 0              |
| NDB_API_TRANS_CLOSE_COUNT_SESSION          | 1              |
| NDB_API_PK_OP_COUNT_SESSION                | 1              |
| NDB_API_UK_OP_COUNT_SESSION                | 0              |
| NDB_API_TABLE_SCAN_COUNT_SESSION           | 0              |
| NDB_API_RANGE_SCAN_COUNT_SESSION           | 0              |
| NDB_API_PRUNED_SCAN_COUNT_SESSION          | 0              |
| NDB_API_SCAN_BATCH_COUNT_SESSION           | 0              |
| NDB_API_READ_ROW_COUNT_SESSION             | 1              |
| NDB_API_TRANS_LOCAL_READ_ROW_COUNT_SESSION | 1              |
| NDB_API_EVENT_DATA_COUNT_INJECTOR          | 0              |
| NDB_API_EVENT_NONDATA_COUNT_INJECTOR       | 0              |
| NDB_API_EVENT_BYTES_COUNT_INJECTOR         | 0              |
| NDB_API_WAIT_EXEC_COMPLETE_COUNT_SLAVE     | 0              |
| NDB_API_WAIT_SCAN_RESULT_COUNT_SLAVE       | 0              |
| NDB_API_WAIT_META_REQUEST_COUNT_SLAVE      | 0              |
| NDB_API_WAIT_NANOS_COUNT_SLAVE             | 0              |
| NDB_API_BYTES_SENT_COUNT_SLAVE             | 0              |
| NDB_API_BYTES_RECEIVED_COUNT_SLAVE         | 0              |
| NDB_API_TRANS_START_COUNT_SLAVE            | 0              |
| NDB_API_TRANS_COMMIT_COUNT_SLAVE           | 0              |
| NDB_API_TRANS_ABORT_COUNT_SLAVE            | 0              |
| NDB_API_TRANS_CLOSE_COUNT_SLAVE            | 0              |
| NDB_API_PK_OP_COUNT_SLAVE                  | 0              |
| NDB_API_UK_OP_COUNT_SLAVE                  | 0              |
| NDB_API_TABLE_SCAN_COUNT_SLAVE             | 0              |
| NDB_API_RANGE_SCAN_COUNT_SLAVE             | 0              |
| NDB_API_PRUNED_SCAN_COUNT_SLAVE            | 0              |
| NDB_API_SCAN_BATCH_COUNT_SLAVE             | 0              |
| NDB_API_READ_ROW_COUNT_SLAVE               | 0              |
| NDB_API_TRANS_LOCAL_READ_ROW_COUNT_SLAVE   | 0              |
| NDB_API_WAIT_EXEC_COMPLETE_COUNT           | 4              |
| NDB_API_WAIT_SCAN_RESULT_COUNT             | 3              |
| NDB_API_WAIT_META_REQUEST_COUNT            | 28             |
| NDB_API_WAIT_NANOS_COUNT                   | 53756398       |
| NDB_API_BYTES_SENT_COUNT                   | 1060           |
| NDB_API_BYTES_RECEIVED_COUNT               | 9724           |
| NDB_API_TRANS_START_COUNT                  | 3              |
| NDB_API_TRANS_COMMIT_COUNT                 | 2              |
| NDB_API_TRANS_ABORT_COUNT                  | 0              |
| NDB_API_TRANS_CLOSE_COUNT                  | 3              |
| NDB_API_PK_OP_COUNT                        | 2              |
| NDB_API_UK_OP_COUNT                        | 0              |
| NDB_API_TABLE_SCAN_COUNT                   | 1              |
| NDB_API_RANGE_SCAN_COUNT                   | 0              |
| NDB_API_PRUNED_SCAN_COUNT                  | 0              |
| NDB_API_SCAN_BATCH_COUNT                   | 0              |
| NDB_API_READ_ROW_COUNT                     | 2              |
| NDB_API_TRANS_LOCAL_READ_ROW_COUNT         | 2              |
| NDB_API_EVENT_DATA_COUNT                   | 0              |
| NDB_API_EVENT_NONDATA_COUNT                | 0              |
| NDB_API_EVENT_BYTES_COUNT                  | 0              |
+--------------------------------------------+----------------+
60 rows in set (0.00 sec)

mysql> SELECT * FROM INFORMATION_SCHEMA.GLOBAL_STATUS
    ->     WHERE VARIABLE_NAME LIKE 'ndb_api%';
+--------------------------------------------+----------------+
| VARIABLE_NAME                              | VARIABLE_VALUE |
+--------------------------------------------+----------------+
| NDB_API_WAIT_EXEC_COMPLETE_COUNT_SESSION   | 2              |
| NDB_API_WAIT_SCAN_RESULT_COUNT_SESSION     | 0              |
| NDB_API_WAIT_META_REQUEST_COUNT_SESSION    | 1              |
| NDB_API_WAIT_NANOS_COUNT_SESSION           | 8144375        |
| NDB_API_BYTES_SENT_COUNT_SESSION           | 68             |
| NDB_API_BYTES_RECEIVED_COUNT_SESSION       | 84             |
| NDB_API_TRANS_START_COUNT_SESSION          | 1              |
| NDB_API_TRANS_COMMIT_COUNT_SESSION         | 1              |
| NDB_API_TRANS_ABORT_COUNT_SESSION          | 0              |
| NDB_API_TRANS_CLOSE_COUNT_SESSION          | 1              |
| NDB_API_PK_OP_COUNT_SESSION                | 1              |
| NDB_API_UK_OP_COUNT_SESSION                | 0              |
| NDB_API_TABLE_SCAN_COUNT_SESSION           | 0              |
| NDB_API_RANGE_SCAN_COUNT_SESSION           | 0              |
| NDB_API_PRUNED_SCAN_COUNT_SESSION          | 0              |
| NDB_API_SCAN_BATCH_COUNT_SESSION           | 0              |
| NDB_API_READ_ROW_COUNT_SESSION             | 1              |
| NDB_API_TRANS_LOCAL_READ_ROW_COUNT_SESSION | 1              |
| NDB_API_EVENT_DATA_COUNT_INJECTOR          | 0              |
| NDB_API_EVENT_NONDATA_COUNT_INJECTOR       | 0              |
| NDB_API_EVENT_BYTES_COUNT_INJECTOR         | 0              |
| NDB_API_WAIT_EXEC_COMPLETE_COUNT_SLAVE     | 0              |
| NDB_API_WAIT_SCAN_RESULT_COUNT_SLAVE       | 0              |
| NDB_API_WAIT_META_REQUEST_COUNT_SLAVE      | 0              |
| NDB_API_WAIT_NANOS_COUNT_SLAVE             | 0              |
| NDB_API_BYTES_SENT_COUNT_SLAVE             | 0              |
| NDB_API_BYTES_RECEIVED_COUNT_SLAVE         | 0              |
| NDB_API_TRANS_START_COUNT_SLAVE            | 0              |
| NDB_API_TRANS_COMMIT_COUNT_SLAVE           | 0              |
| NDB_API_TRANS_ABORT_COUNT_SLAVE            | 0              |
| NDB_API_TRANS_CLOSE_COUNT_SLAVE            | 0              |
| NDB_API_PK_OP_COUNT_SLAVE                  | 0              |
| NDB_API_UK_OP_COUNT_SLAVE                  | 0              |
| NDB_API_TABLE_SCAN_COUNT_SLAVE             | 0              |
| NDB_API_RANGE_SCAN_COUNT_SLAVE             | 0              |
| NDB_API_PRUNED_SCAN_COUNT_SLAVE            | 0              |
| NDB_API_SCAN_BATCH_COUNT_SLAVE             | 0              |
| NDB_API_READ_ROW_COUNT_SLAVE               | 0              |
| NDB_API_TRANS_LOCAL_READ_ROW_COUNT_SLAVE   | 0              |
| NDB_API_WAIT_EXEC_COMPLETE_COUNT           | 4              |
| NDB_API_WAIT_SCAN_RESULT_COUNT             | 3              |
| NDB_API_WAIT_META_REQUEST_COUNT            | 28             |
| NDB_API_WAIT_NANOS_COUNT                   | 53756398       |
| NDB_API_BYTES_SENT_COUNT                   | 1060           |
| NDB_API_BYTES_RECEIVED_COUNT               | 9724           |
| NDB_API_TRANS_START_COUNT                  | 3              |
| NDB_API_TRANS_COMMIT_COUNT                 | 2              |
| NDB_API_TRANS_ABORT_COUNT                  | 0              |
| NDB_API_TRANS_CLOSE_COUNT                  | 3              |
| NDB_API_PK_OP_COUNT                        | 2              |
| NDB_API_UK_OP_COUNT                        | 0              |
| NDB_API_TABLE_SCAN_COUNT                   | 1              |
| NDB_API_RANGE_SCAN_COUNT                   | 0              |
| NDB_API_PRUNED_SCAN_COUNT                  | 0              |
| NDB_API_SCAN_BATCH_COUNT                   | 0              |
| NDB_API_READ_ROW_COUNT                     | 2              |
| NDB_API_TRANS_LOCAL_READ_ROW_COUNT         | 2              |
| NDB_API_EVENT_DATA_COUNT                   | 0              |
| NDB_API_EVENT_NONDATA_COUNT                | 0              |
| NDB_API_EVENT_BYTES_COUNT                  | 0              |
+--------------------------------------------+----------------+
60 rows in set (0.00 sec)

每个Ndb对象都有其自己的计数器。 NDB API 应用程序可以读取计数器的值,以用于优化或监视。对于同时使用多个Ndb对象的多线程 Client 端,还可以从属于给定Ndb_cluster_connection的所有Ndb对象获得计数器的汇总视图。

这些计数器有四套。一组仅适用于当前会话;其他 3 个是 Global 性的。 尽管这是可以在mysqlClient 端中将其值作为会话或全局状态变量来获取的事实。这意味着用SHOW STATUS指定SESSIONGLOBAL关键字对为 NDB API 统计信息状态变量报告的值没有影响,并且无论这些值是从SESSION_STATUS的等效列还是从SESSION_STATUS的等效列中获取的,这些变量的值均相同。 GLOBAL_STATUStable。

  • 会话计数器(特定于会话)

会话计数器与(仅)当前会话正在使用的Ndb对象有关。其他 MySQLClient 端对此类对象的使用不会影响这些计数。

为了最大程度地减少与标准 MySQL 会话变量的混淆,我们将与这些 NDB API 会话计数器对应的变量称为“ _session变量”,并带有下划线。

  • 副本柜台(Global)

这组计数器与复制 SQL 线程(如果有)使用的Ndb对象有关。如果此mysqld不用作副本或不使用NDBtable,则所有这些计数均为 0.

我们将相关的状态变量称为“ _slave变量”(带下划线)。

  • 进样器计数器(全局)

注入器计数器与Ndb对象有关,该对象用于二进制日志注入器线程监听集群事件。即使不编写二进制日志,连接到 NDB 群集的mysqld进程也会 continue 侦听某些事件,例如架构更改。

我们将与 NDB API 注入器计数器相对应的状态变量称为“ _injector变量”(带下划线)。

  • 服务器(全局)计数器(全局)

这组计数器与该mysqld当前使用的所有Ndb对象有关。这包括所有 MySQLClient 端应用程序,副本 SQL 线程(如果有),binlog 注入程序和NDBUtil 线程。

我们将与这些计数器相对应的状态变量称为“全局变量”或“ mysqld级变量”。

您可以通过另外过滤变量名称中的子字符串sessionslaveinjector(以及公共前缀Ndb_api)来获取特定变量集的值。对于_session变量,可以按以下所示进行操作:

mysql> SHOW STATUS LIKE 'ndb_api%session';
+--------------------------------------------+---------+
| Variable_name                              | Value   |
+--------------------------------------------+---------+
| Ndb_api_wait_exec_complete_count_session   | 2       |
| Ndb_api_wait_scan_result_count_session     | 0       |
| Ndb_api_wait_meta_request_count_session    | 1       |
| Ndb_api_wait_nanos_count_session           | 8144375 |
| Ndb_api_bytes_sent_count_session           | 68      |
| Ndb_api_bytes_received_count_session       | 84      |
| Ndb_api_trans_start_count_session          | 1       |
| Ndb_api_trans_commit_count_session         | 1       |
| Ndb_api_trans_abort_count_session          | 0       |
| Ndb_api_trans_close_count_session          | 1       |
| Ndb_api_pk_op_count_session                | 1       |
| Ndb_api_uk_op_count_session                | 0       |
| Ndb_api_table_scan_count_session           | 0       |
| Ndb_api_range_scan_count_session           | 0       |
| Ndb_api_pruned_scan_count_session          | 0       |
| Ndb_api_scan_batch_count_session           | 0       |
| Ndb_api_read_row_count_session             | 1       |
| Ndb_api_trans_local_read_row_count_session | 1       |
+--------------------------------------------+---------+
18 rows in set (0.50 sec)

要获取 NDB API mysqld级状态变量的列 table,请过滤以ndb_api开头并以_count结尾的变量名,如下所示:

mysql> SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
    ->     WHERE VARIABLE_NAME LIKE 'ndb_api%count';
+------------------------------------+----------------+
| VARIABLE_NAME                      | VARIABLE_VALUE |
+------------------------------------+----------------+
| NDB_API_WAIT_EXEC_COMPLETE_COUNT   | 4              |
| NDB_API_WAIT_SCAN_RESULT_COUNT     | 3              |
| NDB_API_WAIT_META_REQUEST_COUNT    | 28             |
| NDB_API_WAIT_NANOS_COUNT           | 53756398       |
| NDB_API_BYTES_SENT_COUNT           | 1060           |
| NDB_API_BYTES_RECEIVED_COUNT       | 9724           |
| NDB_API_TRANS_START_COUNT          | 3              |
| NDB_API_TRANS_COMMIT_COUNT         | 2              |
| NDB_API_TRANS_ABORT_COUNT          | 0              |
| NDB_API_TRANS_CLOSE_COUNT          | 3              |
| NDB_API_PK_OP_COUNT                | 2              |
| NDB_API_UK_OP_COUNT                | 0              |
| NDB_API_TABLE_SCAN_COUNT           | 1              |
| NDB_API_RANGE_SCAN_COUNT           | 0              |
| NDB_API_PRUNED_SCAN_COUNT          | 0              |
| NDB_API_SCAN_BATCH_COUNT           | 0              |
| NDB_API_READ_ROW_COUNT             | 2              |
| NDB_API_TRANS_LOCAL_READ_ROW_COUNT | 2              |
| NDB_API_EVENT_DATA_COUNT           | 0              |
| NDB_API_EVENT_NONDATA_COUNT        | 0              |
| NDB_API_EVENT_BYTES_COUNT          | 0              |
+------------------------------------+----------------+
21 rows in set (0.09 sec)

并非所有计数器都反映在所有 4 组状态变量中。对于事件计数器DataEventsRecvdCountNondataEventsRecvdCountEventBytesRecvdCount,仅_injectormysqld级的 NDB API 状态变量可用:

mysql> SHOW STATUS LIKE 'ndb_api%event%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| Ndb_api_event_data_count_injector    | 0     |
| Ndb_api_event_nondata_count_injector | 0     |
| Ndb_api_event_bytes_count_injector   | 0     |
| Ndb_api_event_data_count             | 0     |
| Ndb_api_event_nondata_count          | 0     |
| Ndb_api_event_bytes_count            | 0     |
+--------------------------------------+-------+
6 rows in set (0.00 sec)

_injector状态变量未针对任何其他 NDB API 计数器实现,如下所示:

mysql> SHOW STATUS LIKE 'ndb_api%injector%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| Ndb_api_event_data_count_injector    | 0     |
| Ndb_api_event_nondata_count_injector | 0     |
| Ndb_api_event_bytes_count_injector   | 0     |
+--------------------------------------+-------+
3 rows in set (0.00 sec)

状态变量的名称可以轻松地与相应计数器的名称相关联。下 table 列出了每个 NDB API 统计信息计数器,以及与该计数器相对应的任何 MySQL 服务器状态变量的描述和名称。

table21.280 NDB API 统计信息计数器

计数器名称描述状态变量(按统计类型):
Session
Slave (replica)
Injector
Server
WaitExecCompleteCount在 await 操作执行完成时线程被阻塞的次数。包括所有execute()调用以及对 blob 操作和 Client 端不可见的自动增量的隐式执行。 Ndb_api_wait_exec_complete_count_session
Ndb_api_wait_exec_complete_count_slave
[none]
Ndb_api_wait_exec_complete_count
WaitScanResultCount线程在 await 基于扫描的 signal(例如 await 其他结果或关闭扫描)时被阻塞的次数。 Ndb_api_wait_scan_result_count_session
Ndb_api_wait_scan_result_count_slave
[none]
Ndb_api_wait_scan_result_count
WaitMetaRequestCount线程 await 基于元数据的 signal 被阻塞的次数;当 awaitDDL 操作或开始或结束某个时期时,可能会发生这种情况。 Ndb_api_wait_meta_request_count_session
Ndb_api_wait_meta_request_count_slave
[none]
Ndb_api_wait_meta_request_count
WaitNanosCountawait 数据节点发出某种 signal 所花费的总时间(以纳秒为单位)。 Ndb_api_wait_nanos_count_session
Ndb_api_wait_nanos_count_slave
[none]
Ndb_api_wait_nanos_count
BytesSentCount发送到数据节点的数据量(以字节为单位)Ndb_api_bytes_sent_count_session
Ndb_api_bytes_sent_count_slave
[none]
Ndb_api_bytes_sent_count
BytesRecvdCount从数据节点接收的数据量(以字节为单位)Ndb_api_bytes_received_count_session
Ndb_api_bytes_received_count_slave
[none]
Ndb_api_bytes_received_count
TransStartCount已开始的 Transaction 数。Ndb_api_trans_start_count_session
Ndb_api_trans_start_count_slave
[none]
Ndb_api_trans_start_count
TransCommitCount已提交的 Transaction 数。Ndb_api_trans_commit_count_session
Ndb_api_trans_commit_count_slave
[none]
Ndb_api_trans_commit_count
TransAbortCountTransaction 中止的数量。Ndb_api_trans_abort_count_session
Ndb_api_trans_abort_count_slave
[none]
Ndb_api_trans_abort_count
TransCloseCount已中止的 Transaction 数。 (此值可能大于TransCommitCountTransAbortCount的总和.)Ndb_api_trans_close_count_session
Ndb_api_trans_close_count_slave
[none]
Ndb_api_trans_close_count
PkOpCount基于或使用主键的操作数。此计数包括 blob 部分 table 操作,隐式解锁操作和自动递增操作,以及通常对 MySQLClient 端可见的主键操作。 Ndb_api_pk_op_count_session
Ndb_api_pk_op_count_slave
[none]
Ndb_api_pk_op_count
UkOpCount基于或使用唯一键的操作数。 Ndb_api_uk_op_count_session
Ndb_api_uk_op_count_slave
[none]
Ndb_api_uk_op_count
TableScanCount已启动的 table 扫描数。这包括内部 table 的扫描。 Ndb_api_table_scan_count_session
Ndb_api_table_scan_count_slave
[none]
Ndb_api_table_scan_count
RangeScanCount已开始的范围扫描数。 Ndb_api_range_scan_count_session
Ndb_api_range_scan_count_slave
[none]
Ndb_api_range_scan_count
PrunedScanCount已修剪到单个分区的扫描数。 Ndb_api_pruned_scan_count_session
Ndb_api_pruned_scan_count_slave
[none]
Ndb_api_pruned_scan_count
ScanBatchCount已接收的行的批数。 (在这种情况下,一批是来自单个片段的一组扫描结果.)Ndb_api_scan_batch_count_session
Ndb_api_scan_batch_count_slave
[none]
Ndb_api_scan_batch_count
ReadRowCount已读取的总行数。包括使用主键,唯一键和扫描操作读取的行。 Ndb_api_read_row_count_session
Ndb_api_read_row_count_slave
[none]
Ndb_api_read_row_count
TransLocalReadRowCount从其上运行事务的同一节点的数据读取的行数。 Ndb_api_trans_local_read_row_count_session
Ndb_api_trans_local_read_row_count_slave
[none]
Ndb_api_trans_local_read_row_count
DataEventsRecvdCount收到的行更改事件数。[无]
[none]
Ndb_api_event_data_count_injector
Ndb_api_event_data_count
NondataEventsRecvdCount已收到事件数,但行更改事件除外。[无]
[none]
Ndb_api_event_nondata_count_injector
Ndb_api_event_nondata_count
EventBytesRecvdCount已接收事件的字节数。[无]
[none]
Ndb_api_event_bytes_count_injector
Ndb_api_event_bytes_count

要查看所有已提交事务的计数(即所有TransCommitCount个计数器状态变量),您可以为子字符串trans_commit_count过滤SHOW STATUS的结果,如下所示:

mysql> SHOW STATUS LIKE '%trans_commit_count%';
+------------------------------------+-------+
| Variable_name                      | Value |
+------------------------------------+-------+
| Ndb_api_trans_commit_count_session | 1     |
| Ndb_api_trans_commit_count_slave   | 0     |
| Ndb_api_trans_commit_count         | 2     |
+------------------------------------+-------+
3 rows in set (0.00 sec)

由此,您可以确定自上次重新启动以来,在当前mysqlClient 会话中已提交 1 个事务,并且在此mysqld上已提交 2 个事务。

通过比较执行该语句前后相应的_session状态变量的值,可以看到给定的 SQL 语句如何增加各种 NDB API 计数器。在此示例中,从SHOW STATUS获取初始值之后,我们在test数据库中创建了一个名为tNDBtable,该 table 只有一列:

mysql> SHOW STATUS LIKE 'ndb_api%session%';
+--------------------------------------------+--------+
| Variable_name                              | Value  |
+--------------------------------------------+--------+
| Ndb_api_wait_exec_complete_count_session   | 2      |
| Ndb_api_wait_scan_result_count_session     | 0      |
| Ndb_api_wait_meta_request_count_session    | 3      |
| Ndb_api_wait_nanos_count_session           | 820705 |
| Ndb_api_bytes_sent_count_session           | 132    |
| Ndb_api_bytes_received_count_session       | 372    |
| Ndb_api_trans_start_count_session          | 1      |
| Ndb_api_trans_commit_count_session         | 1      |
| Ndb_api_trans_abort_count_session          | 0      |
| Ndb_api_trans_close_count_session          | 1      |
| Ndb_api_pk_op_count_session                | 1      |
| Ndb_api_uk_op_count_session                | 0      |
| Ndb_api_table_scan_count_session           | 0      |
| Ndb_api_range_scan_count_session           | 0      |
| Ndb_api_pruned_scan_count_session          | 0      |
| Ndb_api_scan_batch_count_session           | 0      |
| Ndb_api_read_row_count_session             | 1      |
| Ndb_api_trans_local_read_row_count_session | 1      |
+--------------------------------------------+--------+
18 rows in set (0.00 sec)

mysql> USE test;
Database changed
mysql> CREATE TABLE t (c INT) ENGINE NDBCLUSTER;
Query OK, 0 rows affected (0.85 sec)

现在,您可以执行一个新的SHOW STATUS语句并观察更改,如下所示(更改后的行在输出中突出显示):

mysql> SHOW STATUS LIKE 'ndb_api%session%';
+--------------------------------------------+-----------+
| Variable_name                              | Value     |
+--------------------------------------------+-----------+
| Ndb_api_wait_exec_complete_count_session   | 8         |
| Ndb_api_wait_scan_result_count_session     | 0         |
| Ndb_api_wait_meta_request_count_session    | 17        |
| Ndb_api_wait_nanos_count_session           | 706871709 |
| Ndb_api_bytes_sent_count_session           | 2376      |
| Ndb_api_bytes_received_count_session       | 3844      |
| Ndb_api_trans_start_count_session          | 4         |
| Ndb_api_trans_commit_count_session         | 4         |
| Ndb_api_trans_abort_count_session          | 0         |
| Ndb_api_trans_close_count_session          | 4         |
| Ndb_api_pk_op_count_session                | 6         |
| Ndb_api_uk_op_count_session                | 0         |
| Ndb_api_table_scan_count_session           | 0         |
| Ndb_api_range_scan_count_session           | 0         |
| Ndb_api_pruned_scan_count_session          | 0         |
| Ndb_api_scan_batch_count_session           | 0         |
| Ndb_api_read_row_count_session             | 2         |
| Ndb_api_trans_local_read_row_count_session | 1         |
+--------------------------------------------+-----------+
18 rows in set (0.00 sec)

同样,您可以看到由于在t中插入一行而导致的 NDB API 统计信息计数器的变化:插入该行,然后运行与上一个示例中相同的SHOW STATUS语句,如下所示:

mysql> INSERT INTO t VALUES (100);
Query OK, 1 row affected (0.00 sec)

mysql> SHOW STATUS LIKE 'ndb_api%session%';
+--------------------------------------------+-----------+
| Variable_name                              | Value     |
+--------------------------------------------+-----------+
| Ndb_api_wait_exec_complete_count_session   | 11        |
| Ndb_api_wait_scan_result_count_session     | 6         |
| Ndb_api_wait_meta_request_count_session    | 20        |
| Ndb_api_wait_nanos_count_session           | 707370418 |
| Ndb_api_bytes_sent_count_session           | 2724      |
| Ndb_api_bytes_received_count_session       | 4116      |
| Ndb_api_trans_start_count_session          | 7         |
| Ndb_api_trans_commit_count_session         | 6         |
| Ndb_api_trans_abort_count_session          | 0         |
| Ndb_api_trans_close_count_session          | 7         |
| Ndb_api_pk_op_count_session                | 8         |
| Ndb_api_uk_op_count_session                | 0         |
| Ndb_api_table_scan_count_session           | 1         |
| Ndb_api_range_scan_count_session           | 0         |
| Ndb_api_pruned_scan_count_session          | 0         |
| Ndb_api_scan_batch_count_session           | 0         |
| Ndb_api_read_row_count_session             | 3         |
| Ndb_api_trans_local_read_row_count_session | 2         |
+--------------------------------------------+-----------+
18 rows in set (0.00 sec)

我们可以从这些结果中得出许多结论:

  • 尽管我们创建的t没有显式主键,但这样做却执行了 5 次主键操作(“ _1”值的“ before”和“ after”值之差,即 6 减 1)。这反映了使用NDB存储引擎创建的隐藏主键是所有 table 的功能。

  • 通过比较Ndb_api_wait_nanos_count_session的连续值,我们可以看到实现CREATE TABLE语句的 NDB API 操作 await 数据节点响应的时间比INSERT执行的 await 时间更长(706871709-820705 = 706051004 纳秒,或大约 0.7 秒)(707370418- 706871709 = 498709 ns 或大约.0005 秒)。在mysqlClient 端中为这些语句报告的执行时间与这些数字大致相关。

在没有足够的(纳秒)时间分辨率的平台上,由于执行非常快的 SQL 语句而导致WaitNanosCount NDB API 计数器的值发生细微变化可能不会始终在Ndb_api_wait_nanos_count_sessionNdb_api_wait_nanos_count_slaveNdb_api_wait_nanos_count的值中可见。