有许多类型的统计计数器与 Ndb 对象执行或影响的操作有关。此类操作包括启动和关闭(或中止)事务;主键和唯一键操作;表、范围和修剪扫描;在等待各种操作完成时阻塞的线程;以及由 NDBCLUSTER 发送和接收的数据和事件。每当进行 NDB API 调用或数据节点发送或接收数据时,NDB 内核中的计数器就会增加。 mysqld 将这些计数器公开为系统状态变量;它们的值可以在 SHOW STATUS 的输出中读取,或者通过查询性能模式 session_status 或 global_status 表来读取。通过比较对 NDB 表进行操作的语句前后这些值,您可以观察到在 API 级别采取的相应操作,从而了解执行语句的成本。
您可以使用以下 SHOW STATUS 语句列出所有这些状态变量
mysql> SHOW STATUS LIKE 'ndb_api%';
+----------------------------------------------+-------------+
| Variable_name | Value |
+----------------------------------------------+-------------+
| Ndb_api_wait_exec_complete_count | 11 |
| Ndb_api_wait_scan_result_count | 14 |
| Ndb_api_wait_meta_request_count | 74 |
| Ndb_api_wait_nanos_count | 31453031678 |
| Ndb_api_bytes_sent_count | 3336 |
| Ndb_api_bytes_received_count | 103568 |
| Ndb_api_trans_start_count | 10 |
| Ndb_api_trans_commit_count | 2 |
| Ndb_api_trans_abort_count | 4 |
| Ndb_api_trans_close_count | 10 |
| Ndb_api_pk_op_count | 6 |
| Ndb_api_uk_op_count | 0 |
| Ndb_api_table_scan_count | 3 |
| Ndb_api_range_scan_count | 1 |
| Ndb_api_pruned_scan_count | 0 |
| Ndb_api_scan_batch_count | 3 |
| Ndb_api_read_row_count | 11 |
| Ndb_api_trans_local_read_row_count | 9 |
| Ndb_api_adaptive_send_forced_count | 5 |
| Ndb_api_adaptive_send_unforced_count | 11 |
| Ndb_api_adaptive_send_deferred_count | 0 |
| Ndb_api_event_data_count | 0 |
| Ndb_api_event_nondata_count | 0 |
| Ndb_api_event_bytes_count | 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_adaptive_send_forced_count_slave | 0 |
| Ndb_api_adaptive_send_unforced_count_slave | 0 |
| Ndb_api_adaptive_send_deferred_count_slave | 0 |
| Ndb_api_wait_exec_complete_count_replica | 0 |
| Ndb_api_wait_scan_result_count_replica | 0 |
| Ndb_api_wait_meta_request_count_replica | 0 |
| Ndb_api_wait_nanos_count_replica | 0 |
| Ndb_api_bytes_sent_count_replica | 0 |
| Ndb_api_bytes_received_count_replica | 0 |
| Ndb_api_trans_start_count_replica | 0 |
| Ndb_api_trans_commit_count_replica | 0 |
| Ndb_api_trans_abort_count_replica | 0 |
| Ndb_api_trans_close_count_replica | 0 |
| Ndb_api_pk_op_count_replica | 0 |
| Ndb_api_uk_op_count_replica | 0 |
| Ndb_api_table_scan_count_replica | 0 |
| Ndb_api_range_scan_count_replica | 0 |
| Ndb_api_pruned_scan_count_replica | 0 |
| Ndb_api_scan_batch_count_replica | 0 |
| Ndb_api_read_row_count_replica | 0 |
| Ndb_api_trans_local_read_row_count_replica | 0 |
| Ndb_api_adaptive_send_forced_count_replica | 0 |
| Ndb_api_adaptive_send_unforced_count_replica | 0 |
| Ndb_api_adaptive_send_deferred_count_replica | 0 |
| Ndb_api_wait_exec_complete_count_session | 0 |
| Ndb_api_wait_scan_result_count_session | 3 |
| Ndb_api_wait_meta_request_count_session | 6 |
| Ndb_api_wait_nanos_count_session | 2022486 |
| Ndb_api_bytes_sent_count_session | 268 |
| Ndb_api_bytes_received_count_session | 10332 |
| Ndb_api_trans_start_count_session | 1 |
| Ndb_api_trans_commit_count_session | 0 |
| Ndb_api_trans_abort_count_session | 0 |
| Ndb_api_trans_close_count_session | 1 |
| Ndb_api_pk_op_count_session | 0 |
| 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 | 2 |
| Ndb_api_read_row_count_session | 2 |
| Ndb_api_trans_local_read_row_count_session | 2 |
| Ndb_api_adaptive_send_forced_count_session | 1 |
| Ndb_api_adaptive_send_unforced_count_session | 0 |
| Ndb_api_adaptive_send_deferred_count_session | 0 |
+----------------------------------------------+-------------+
90 rows in set (0.00 sec)这些状态变量也可以从性能模式 session_status 和 global_status 表中获得,如下所示
mysql> SELECT * FROM performance_schema.session_status
-> WHERE VARIABLE_NAME LIKE 'ndb_api%';
+----------------------------------------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+----------------------------------------------+----------------+
| Ndb_api_wait_exec_complete_count | 11 |
| Ndb_api_wait_scan_result_count | 14 |
| Ndb_api_wait_meta_request_count | 81 |
| Ndb_api_wait_nanos_count | 119485762051 |
| Ndb_api_bytes_sent_count | 3476 |
| Ndb_api_bytes_received_count | 105372 |
| Ndb_api_trans_start_count | 10 |
| Ndb_api_trans_commit_count | 2 |
| Ndb_api_trans_abort_count | 4 |
| Ndb_api_trans_close_count | 10 |
| Ndb_api_pk_op_count | 6 |
| Ndb_api_uk_op_count | 0 |
| Ndb_api_table_scan_count | 3 |
| Ndb_api_range_scan_count | 1 |
| Ndb_api_pruned_scan_count | 0 |
| Ndb_api_scan_batch_count | 3 |
| Ndb_api_read_row_count | 11 |
| Ndb_api_trans_local_read_row_count | 9 |
| Ndb_api_adaptive_send_forced_count | 5 |
| Ndb_api_adaptive_send_unforced_count | 11 |
| Ndb_api_adaptive_send_deferred_count | 0 |
| Ndb_api_event_data_count | 0 |
| Ndb_api_event_nondata_count | 0 |
| Ndb_api_event_bytes_count | 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_adaptive_send_forced_count_slave | 0 |
| Ndb_api_adaptive_send_unforced_count_slave | 0 |
| Ndb_api_adaptive_send_deferred_count_slave | 0 |
| Ndb_api_wait_exec_complete_count_replica | 0 |
| Ndb_api_wait_scan_result_count_replica | 0 |
| Ndb_api_wait_meta_request_count_replica | 0 |
| Ndb_api_wait_nanos_count_replica | 0 |
| Ndb_api_bytes_sent_count_replica | 0 |
| Ndb_api_bytes_received_count_replica | 0 |
| Ndb_api_trans_start_count_replica | 0 |
| Ndb_api_trans_commit_count_replica | 0 |
| Ndb_api_trans_abort_count_replica | 0 |
| Ndb_api_trans_close_count_replica | 0 |
| Ndb_api_pk_op_count_replica | 0 |
| Ndb_api_uk_op_count_replica | 0 |
| Ndb_api_table_scan_count_replica | 0 |
| Ndb_api_range_scan_count_replica | 0 |
| Ndb_api_pruned_scan_count_replica | 0 |
| Ndb_api_scan_batch_count_replica | 0 |
| Ndb_api_read_row_count_replica | 0 |
| Ndb_api_trans_local_read_row_count_replica | 0 |
| Ndb_api_adaptive_send_forced_count_replica | 0 |
| Ndb_api_adaptive_send_unforced_count_replica | 0 |
| Ndb_api_adaptive_send_deferred_count_replica | 0 |
| Ndb_api_wait_exec_complete_count_session | 0 |
| Ndb_api_wait_scan_result_count_session | 3 |
| Ndb_api_wait_meta_request_count_session | 6 |
| Ndb_api_wait_nanos_count_session | 2022486 |
| Ndb_api_bytes_sent_count_session | 268 |
| Ndb_api_bytes_received_count_session | 10332 |
| Ndb_api_trans_start_count_session | 1 |
| Ndb_api_trans_commit_count_session | 0 |
| Ndb_api_trans_abort_count_session | 0 |
| Ndb_api_trans_close_count_session | 1 |
| Ndb_api_pk_op_count_session | 0 |
| 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 | 2 |
| Ndb_api_read_row_count_session | 2 |
| Ndb_api_trans_local_read_row_count_session | 2 |
| Ndb_api_adaptive_send_forced_count_session | 1 |
| Ndb_api_adaptive_send_unforced_count_session | 0 |
| Ndb_api_adaptive_send_deferred_count_session | 0 |
+----------------------------------------------+----------------+
90 rows in set (0.00 sec)
mysql> SELECT * FROM performance_schema.global_status
-> WHERE VARIABLE_NAME LIKE 'ndb_api%';
+----------------------------------------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+----------------------------------------------+----------------+
| Ndb_api_wait_exec_complete_count | 11 |
| Ndb_api_wait_scan_result_count | 14 |
| Ndb_api_wait_meta_request_count | 88 |
| Ndb_api_wait_nanos_count | 159810484729 |
| Ndb_api_bytes_sent_count | 3616 |
| Ndb_api_bytes_received_count | 107176 |
| Ndb_api_trans_start_count | 10 |
| Ndb_api_trans_commit_count | 2 |
| Ndb_api_trans_abort_count | 4 |
| Ndb_api_trans_close_count | 10 |
| Ndb_api_pk_op_count | 6 |
| Ndb_api_uk_op_count | 0 |
| Ndb_api_table_scan_count | 3 |
| Ndb_api_range_scan_count | 1 |
| Ndb_api_pruned_scan_count | 0 |
| Ndb_api_scan_batch_count | 3 |
| Ndb_api_read_row_count | 11 |
| Ndb_api_trans_local_read_row_count | 9 |
| Ndb_api_adaptive_send_forced_count | 5 |
| Ndb_api_adaptive_send_unforced_count | 11 |
| Ndb_api_adaptive_send_deferred_count | 0 |
| Ndb_api_event_data_count | 0 |
| Ndb_api_event_nondata_count | 0 |
| Ndb_api_event_bytes_count | 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_adaptive_send_forced_count_slave | 0 |
| Ndb_api_adaptive_send_unforced_count_slave | 0 |
| Ndb_api_adaptive_send_deferred_count_slave | 0 |
| Ndb_api_wait_exec_complete_count_replica | 0 |
| Ndb_api_wait_scan_result_count_replica | 0 |
| Ndb_api_wait_meta_request_count_replica | 0 |
| Ndb_api_wait_nanos_count_replica | 0 |
| Ndb_api_bytes_sent_count_replica | 0 |
| Ndb_api_bytes_received_count_replica | 0 |
| Ndb_api_trans_start_count_replica | 0 |
| Ndb_api_trans_commit_count_replica | 0 |
| Ndb_api_trans_abort_count_replica | 0 |
| Ndb_api_trans_close_count_replica | 0 |
| Ndb_api_pk_op_count_replica | 0 |
| Ndb_api_uk_op_count_replica | 0 |
| Ndb_api_table_scan_count_replica | 0 |
| Ndb_api_range_scan_count_replica | 0 |
| Ndb_api_pruned_scan_count_replica | 0 |
| Ndb_api_scan_batch_count_replica | 0 |
| Ndb_api_read_row_count_replica | 0 |
| Ndb_api_trans_local_read_row_count_replica | 0 |
| Ndb_api_adaptive_send_forced_count_replica | 0 |
| Ndb_api_adaptive_send_unforced_count_replica | 0 |
| Ndb_api_adaptive_send_deferred_count_replica | 0 |
| Ndb_api_wait_exec_complete_count_session | 0 |
| Ndb_api_wait_scan_result_count_session | 3 |
| Ndb_api_wait_meta_request_count_session | 6 |
| Ndb_api_wait_nanos_count_session | 2022486 |
| Ndb_api_bytes_sent_count_session | 268 |
| Ndb_api_bytes_received_count_session | 10332 |
| Ndb_api_trans_start_count_session | 1 |
| Ndb_api_trans_commit_count_session | 0 |
| Ndb_api_trans_abort_count_session | 0 |
| Ndb_api_trans_close_count_session | 1 |
| Ndb_api_pk_op_count_session | 0 |
| 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 | 2 |
| Ndb_api_read_row_count_session | 2 |
| Ndb_api_trans_local_read_row_count_session | 2 |
| Ndb_api_adaptive_send_forced_count_session | 1 |
| Ndb_api_adaptive_send_unforced_count_session | 0 |
| Ndb_api_adaptive_send_deferred_count_session | 0 |
+----------------------------------------------+----------------+
90 rows in set (0.01 sec)每个 Ndb 对象都有自己的计数器。NDB API 应用程序可以读取计数器的值,以用于优化或监控。对于并发使用多个 Ndb 对象的多线程客户端,还可以从属于给定 Ndb_cluster_connection 的所有 Ndb 对象中获取计数器的汇总视图。
公开了四组计数器。一组仅适用于当前会话;其他三组是全局的。 尽管可以在 mysql 客户端中将它们的值作为会话或全局状态变量获取,但情况并非如此。这意味着在 SHOW STATUS 中指定 SESSION 或 GLOBAL 关键字对 NDB API 统计信息状态变量报告的值没有影响,并且无论是从 session_status 表还是 global_status 表的等效列中获取值,这些变量的值都是相同的。
会话计数器(特定于会话)
会话计数器与(仅)当前会话正在使用的
Ndb对象有关。其他 MySQL 客户端对此类对象的使用不会影响这些计数。为了最大限度地减少与标准 MySQL 会话变量的混淆,我们将对应于这些 NDB API 会话计数器的变量称为 “
_session变量”,并在前面加上下划线。副本计数器(全局)
这组计数器与副本 SQL 线程(如果有)使用的
Ndb对象有关。如果此 mysqld 不充当副本,或者不使用NDB表,则所有这些计数都为 0。我们将相关的状态变量称为 “
_replica变量”(并在前面加上下划线)。注入器计数器(全局)
注入器计数器与二进制日志注入器线程用于侦听集群事件的
Ndb对象有关。即使不写入二进制日志,连接到 NDB 集群的 mysqld 进程也会继续侦听某些事件,例如模式更改。我们将对应于 NDB API 注入器计数器的状态变量称为 “
_injector变量”(并在前面加上下划线)。服务器(全局)计数器(全局)
这组计数器与此 mysqld 当前使用的所有
Ndb对象有关。这包括所有 MySQL 客户端应用程序、副本 SQL 线程(如果有)、二进制日志注入器和NDB实用程序线程。我们将对应于这些计数器的状态变量称为 “全局变量” 或 “mysqld 级变量”。
您可以通过在变量名中另外筛选子字符串 session、replica 或 injector(以及公共前缀 Ndb_api)来获取特定变量集的值。对于 _session 变量,可以按如下所示执行此操作
mysql> SHOW STATUS LIKE 'ndb_api%session';
+----------------------------------------------+---------+
| Variable_name | Value |
+----------------------------------------------+---------+
| Ndb_api_wait_exec_complete_count_session | 0 |
| Ndb_api_wait_scan_result_count_session | 3 |
| Ndb_api_wait_meta_request_count_session | 6 |
| Ndb_api_wait_nanos_count_session | 2022486 |
| Ndb_api_bytes_sent_count_session | 268 |
| Ndb_api_bytes_received_count_session | 10332 |
| Ndb_api_trans_start_count_session | 1 |
| Ndb_api_trans_commit_count_session | 0 |
| Ndb_api_trans_abort_count_session | 0 |
| Ndb_api_trans_close_count_session | 1 |
| Ndb_api_pk_op_count_session | 0 |
| 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 | 2 |
| Ndb_api_read_row_count_session | 2 |
| Ndb_api_trans_local_read_row_count_session | 2 |
| Ndb_api_adaptive_send_forced_count_session | 1 |
| Ndb_api_adaptive_send_unforced_count_session | 0 |
| Ndb_api_adaptive_send_deferred_count_session | 0 |
+----------------------------------------------+---------+
21 rows in set (0.00 sec)要获取 NDB API mysqld 级状态变量的列表,请筛选以 ndb_api 开头并以 _count 结尾的变量名,如下所示
mysql> SELECT * FROM performance_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)状态变量的名称可以很容易地与相应计数器的名称关联起来。下表列出了每个 NDB API 统计计数器,并提供了描述以及与该计数器对应的任何 MySQL 服务器状态变量的名称。
表 25.39 NDB API 统计计数器
| 计数器名称 | 描述 | 状态变量(按统计类型)
|
|---|---|---|
WaitExecCompleteCount |
线程在等待操作执行完成时被阻塞的次数。包括所有 execute() 调用,以及对客户端不可见的 blob 操作和自动递增的隐式执行。 |
|
WaitScanResultCount |
线程在等待基于扫描的信号(如等待其他结果或等待扫描关闭)时被阻塞的次数。 | |
WaitMetaRequestCount |
线程在等待基于元数据的信号时被阻塞的次数;这可能发生在等待 DDL 操作或等待纪元启动(或结束)时。 | |
WaitNanosCount |
花费在等待数据节点的某种类型信号上的总时间(以纳秒为单位)。 | |
BytesSentCount |
发送到数据节点的数据量(以字节为单位) | |
BytesRecvdCount |
从数据节点接收的数据量(以字节为单位) | |
TransStartCount |
已启动的事务数。 | |
TransCommitCount |
已提交的事务数。 | |
TransAbortCount |
已中止的事务数。 | |
TransCloseCount |
已中止的事务数。(此值可能大于 TransCommitCount 和 TransAbortCount 的总和。) |
|
PkOpCount |
基于或使用主键的操作数。此计数包括 blob 部分表操作、隐式解锁操作和自动递增操作,以及通常对 MySQL 客户端可见的主键操作。 | |
UkOpCount |
基于或使用唯一键的操作数。 | |
TableScanCount |
已启动的表扫描次数。这包括对内部表的扫描。 | |
RangeScanCount |
已启动的范围扫描次数。 | |
PrunedScanCount |
已修剪到单个分区的扫描次数。 | |
ScanBatchCount |
接收到的行批次数。(在此上下文中,批次是指来自单个片段的一组扫描结果。) | |
ReadRowCount |
已读取的总行数。包括使用主键、唯一键和扫描操作读取的行。 | |
TransLocalReadRowCount |
从运行事务的同一节点上的数据读取的行数。 | |
DataEventsRecvdCount |
接收到的行更改事件数。 | |
NondataEventsRecvdCount |
接收到的事件数,不包括行更改事件。 | |
EventBytesRecvdCount |
接收到的事件的字节数。 |
要查看已提交事务的所有计数,即所有 TransCommitCount 计数器状态变量,您可以筛选 SHOW STATUS 的结果以获取子字符串 trans_commit_count,如下所示
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)由此,您可以确定当前 mysql 客户端会话中已提交 1 个事务,并且自上次重启以来,此 mysqld 上已提交 2 个事务。
您可以通过比较执行语句前后相应的 _session 状态变量的值,来查看给定 SQL 语句如何递增各种 NDB API 计数器。在本例中,在从 SHOW STATUS 获取初始值后,我们在 test 数据库中创建一个名为 t 的 NDB 表,该表只有一列
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 次主键操作(Ndb_api_pk_op_count_session的“之前”和“之后”值之间的差异,即 6 减 1)。这反映了隐藏主键的创建,这是所有使用NDB存储引擎的表的特征。通过比较
Ndb_api_wait_nanos_count_session的连续值,我们可以看到实现CREATE TABLE语句的 NDB API 操作等待数据节点的响应的时间(706871709 - 820705 = 706051004 纳秒,约 0.7 秒)比INSERT执行的操作(707370418 - 706871709 = 498709 纳秒,约 0.0005 秒)长得多。这些语句在 mysql 客户端中报告的执行时间与这些数字大致相关。在时间分辨率不足(纳秒级)的平台上,由于执行速度非常快的 SQL 语句导致的
WaitNanosCountNDB API 计数器值的微小变化在Ndb_api_wait_nanos_count_session、Ndb_api_wait_nanos_count_replica或Ndb_api_wait_nanos_count的值中可能并不总是可见。INSERT语句递增了ReadRowCount和TransLocalReadRowCountNDB API 统计计数器,这反映在Ndb_api_read_row_count_session和Ndb_api_trans_local_read_row_count_session的值增加中。