21.5.13 NDB API 统计信息计数器和变量
与Ndb对象执行或影响Ndb对象执行的动作有关的统计计数器类型很多。这些动作包括启动和关闭(或中止)Transaction;主键和唯一键操作;table,范围和修剪扫描;在 await 各种操作完成时线程被阻塞;以及NDBCLUSTER
发送和接收的数据和事件。每当进行 NDB API 调用或数据节点发送或接收数据时,NDB 内核中的计数器就会增加。 mysqld将这些计数器公开为系统状态变量;它们的值可以在SHOW STATUS的输出中读取,也可以通过查询INFORMATION_SCHEMA.SESSION_STATUS或INFORMATION_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_STATUS和GLOBAL_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指定SESSION
或GLOBAL
关键字对为 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级变量”。
您可以通过另外过滤变量名称中的子字符串session
,slave
或injector
(以及公共前缀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 组状态变量中。对于事件计数器DataEventsRecvdCount
,NondataEventsRecvdCount
和EventBytesRecvdCount
,仅_injector
和mysqld级的 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 统计信息计数器
要查看所有已提交事务的计数(即所有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
数据库中创建了一个名为t
的NDBtable,该 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_session,Ndb_api_wait_nanos_count_slave或Ndb_api_wait_nanos_count的值中可见。
- INSERT语句同时增加了
ReadRowCount
和TransLocalReadRowCount
NDB API 统计信息计数器,如Ndb_api_read_row_count_session和Ndb_api_trans_local_read_row_count_session的值增加所反映。