NDB API统计计数器和变量
与 Ndb 对象执行的操作或影响 Ndb 对象的多种类型的统计计数器可用。此类操作包括启动和关闭(或中止)事务;主键和唯一键操作;表、范 围和修剪扫描;在等待各种操作完成时被阻塞的线程;以及 NDBCLUSTER 发送和接收的数据和事件。每当调用 NDB API 或向数据节点发送或接 收数据时,NDB 内核内部都会递增这些计数器。mysqld 将这些计数器作为系统状态变量公开;其值可以在 SHOW STATUS 的输出中读取,或者通 过查询 INFORMATION_SCHEMA.SESSION_STATUS 或 INFORMATION_SCHEMA.GLOBAL_STATUS 表来获取。通过比较操作 NDB 表的语句执行前后计数器 的值,您可以观察到在 API 级别执行的相应操作,从而了解执行该语句的成本。
你可以使用下面的SHOW STATUS语句列出所有这些状态变量:
mysql> SHOW STATUS LIKE 'ndb_api%'; +----------------------------------------------+----------------+ | Variable_name | Value | +----------------------------------------------+----------------+ | Ndb_api_wait_exec_complete_count | 576 | | Ndb_api_wait_scan_result_count | 432 | | Ndb_api_wait_meta_request_count | 1292 | | Ndb_api_wait_nanos_count | 80154431380927 | | Ndb_api_bytes_sent_count | 250968 | | Ndb_api_bytes_received_count | 2080340 | | Ndb_api_trans_start_count | 409 | | Ndb_api_trans_commit_count | 332 | | Ndb_api_trans_abort_count | 2 | | Ndb_api_trans_close_count | 409 | | Ndb_api_pk_op_count | 475 | | Ndb_api_uk_op_count | 0 | | Ndb_api_table_scan_count | 95 | | Ndb_api_range_scan_count | 0 | | Ndb_api_pruned_scan_count | 0 | | Ndb_api_scan_batch_count | 147 | | Ndb_api_read_row_count | 348 | | Ndb_api_trans_local_read_row_count | 108 | | Ndb_api_adaptive_send_forced_count | 225 | | Ndb_api_adaptive_send_unforced_count | 457 | | Ndb_api_adaptive_send_deferred_count | 0 | | Ndb_api_event_data_count | 78 | | Ndb_api_event_nondata_count | 7 | | Ndb_api_event_bytes_count | 26756 | | 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_event_data_count_injector | 78 | | Ndb_api_event_nondata_count_injector | 7 | | Ndb_api_event_bytes_count_injector | 26756 | | Ndb_api_wait_exec_complete_count_session | 131 | | Ndb_api_wait_scan_result_count_session | 142 | | Ndb_api_wait_meta_request_count_session | 480 | | Ndb_api_wait_nanos_count_session | 1672752063 | | Ndb_api_bytes_sent_count_session | 162512 | | Ndb_api_bytes_received_count_session | 1019116 | | Ndb_api_trans_start_count_session | 87 | | Ndb_api_trans_commit_count_session | 64 | | Ndb_api_trans_abort_count_session | 0 | | Ndb_api_trans_close_count_session | 87 | | Ndb_api_pk_op_count_session | 101 | | Ndb_api_uk_op_count_session | 0 | | Ndb_api_table_scan_count_session | 29 | | Ndb_api_range_scan_count_session | 0 | | Ndb_api_pruned_scan_count_session | 0 | | Ndb_api_scan_batch_count_session | 19 | | Ndb_api_read_row_count_session | 55 | | Ndb_api_trans_local_read_row_count_session | 14 | | Ndb_api_adaptive_send_forced_count_session | 76 | | Ndb_api_adaptive_send_unforced_count_session | 88 | | Ndb_api_adaptive_send_deferred_count_session | 0 | +----------------------------------------------+----------------+ 69 rows in set (0.01 sec)
这些状态变量也可以从INFORMATION_SCHEMA数据库的SESSION_STATUS和GLOBAL_STATUS表中获得,如下所示:
mysql> SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME LIKE 'ndb_api%'; ERROR 3167 (HY000): The 'INFORMATION_SCHEMA.SESSION_STATUS' feature is disabled; see the documentation for 'show_compatibility_56'
这个错误是由于MySQL 5.7.6及以上版本中,INFORMATION_SCHEMA.SESSION_STATUS视图已被弃用,默认情况下该功能被禁用导致的?,下面临时
启用一下:
mysql> SET GLOBAL show_compatibility_56=ON; Query OK, 0 rows affected (0.00 sec) mysql> SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME LIKE 'ndb_api%'; +----------------------------------------------+----------------+ | VARIABLE_NAME | VARIABLE_VALUE | +----------------------------------------------+----------------+ | NDB_API_WAIT_EXEC_COMPLETE_COUNT | 576 | | NDB_API_WAIT_SCAN_RESULT_COUNT | 432 | | NDB_API_WAIT_META_REQUEST_COUNT | 1293 | | NDB_API_WAIT_NANOS_COUNT | 80408736595437 | | NDB_API_BYTES_SENT_COUNT | 251028 | | NDB_API_BYTES_RECEIVED_COUNT | 2080368 | | NDB_API_TRANS_START_COUNT | 409 | | NDB_API_TRANS_COMMIT_COUNT | 332 | | NDB_API_TRANS_ABORT_COUNT | 2 | | NDB_API_TRANS_CLOSE_COUNT | 409 | | NDB_API_PK_OP_COUNT | 475 | | NDB_API_UK_OP_COUNT | 0 | | NDB_API_TABLE_SCAN_COUNT | 95 | | NDB_API_RANGE_SCAN_COUNT | 0 | | NDB_API_PRUNED_SCAN_COUNT | 0 | | NDB_API_SCAN_BATCH_COUNT | 147 | | NDB_API_READ_ROW_COUNT | 348 | | NDB_API_TRANS_LOCAL_READ_ROW_COUNT | 108 | | NDB_API_ADAPTIVE_SEND_FORCED_COUNT | 225 | | NDB_API_ADAPTIVE_SEND_UNFORCED_COUNT | 457 | | NDB_API_ADAPTIVE_SEND_DEFERRED_COUNT | 0 | | NDB_API_EVENT_DATA_COUNT | 78 | | NDB_API_EVENT_NONDATA_COUNT | 7 | | NDB_API_EVENT_BYTES_COUNT | 26756 | | 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_EVENT_DATA_COUNT_INJECTOR | 78 | | NDB_API_EVENT_NONDATA_COUNT_INJECTOR | 7 | | NDB_API_EVENT_BYTES_COUNT_INJECTOR | 26756 | | NDB_API_WAIT_EXEC_COMPLETE_COUNT_SESSION | 131 | | NDB_API_WAIT_SCAN_RESULT_COUNT_SESSION | 142 | | NDB_API_WAIT_META_REQUEST_COUNT_SESSION | 481 | | NDB_API_WAIT_NANOS_COUNT_SESSION | 1672988157 | | NDB_API_BYTES_SENT_COUNT_SESSION | 162572 | | NDB_API_BYTES_RECEIVED_COUNT_SESSION | 1019144 | | NDB_API_TRANS_START_COUNT_SESSION | 87 | | NDB_API_TRANS_COMMIT_COUNT_SESSION | 64 | | NDB_API_TRANS_ABORT_COUNT_SESSION | 0 | | NDB_API_TRANS_CLOSE_COUNT_SESSION | 87 | | NDB_API_PK_OP_COUNT_SESSION | 101 | | NDB_API_UK_OP_COUNT_SESSION | 0 | | NDB_API_TABLE_SCAN_COUNT_SESSION | 29 | | NDB_API_RANGE_SCAN_COUNT_SESSION | 0 | | NDB_API_PRUNED_SCAN_COUNT_SESSION | 0 | | NDB_API_SCAN_BATCH_COUNT_SESSION | 19 | | NDB_API_READ_ROW_COUNT_SESSION | 55 | | NDB_API_TRANS_LOCAL_READ_ROW_COUNT_SESSION | 14 | | NDB_API_ADAPTIVE_SEND_FORCED_COUNT_SESSION | 76 | | NDB_API_ADAPTIVE_SEND_UNFORCED_COUNT_SESSION | 88 | | NDB_API_ADAPTIVE_SEND_DEFERRED_COUNT_SESSION | 0 | +----------------------------------------------+----------------+ 69 rows in set, 1 warning (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 | 576 | | NDB_API_WAIT_SCAN_RESULT_COUNT | 432 | | NDB_API_WAIT_META_REQUEST_COUNT | 1293 | | NDB_API_WAIT_NANOS_COUNT | 80505790466465 | | NDB_API_BYTES_SENT_COUNT | 251028 | | NDB_API_BYTES_RECEIVED_COUNT | 2080368 | | NDB_API_TRANS_START_COUNT | 409 | | NDB_API_TRANS_COMMIT_COUNT | 332 | | NDB_API_TRANS_ABORT_COUNT | 2 | | NDB_API_TRANS_CLOSE_COUNT | 409 | | NDB_API_PK_OP_COUNT | 475 | | NDB_API_UK_OP_COUNT | 0 | | NDB_API_TABLE_SCAN_COUNT | 95 | | NDB_API_RANGE_SCAN_COUNT | 0 | | NDB_API_PRUNED_SCAN_COUNT | 0 | | NDB_API_SCAN_BATCH_COUNT | 147 | | NDB_API_READ_ROW_COUNT | 348 | | NDB_API_TRANS_LOCAL_READ_ROW_COUNT | 108 | | NDB_API_ADAPTIVE_SEND_FORCED_COUNT | 225 | | NDB_API_ADAPTIVE_SEND_UNFORCED_COUNT | 457 | | NDB_API_ADAPTIVE_SEND_DEFERRED_COUNT | 0 | | NDB_API_EVENT_DATA_COUNT | 78 | | NDB_API_EVENT_NONDATA_COUNT | 7 | | NDB_API_EVENT_BYTES_COUNT | 26756 | | 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_EVENT_DATA_COUNT_INJECTOR | 78 | | NDB_API_EVENT_NONDATA_COUNT_INJECTOR | 7 | | NDB_API_EVENT_BYTES_COUNT_INJECTOR | 26756 | | NDB_API_WAIT_EXEC_COMPLETE_COUNT_SESSION | 131 | | NDB_API_WAIT_SCAN_RESULT_COUNT_SESSION | 142 | | NDB_API_WAIT_META_REQUEST_COUNT_SESSION | 481 | | NDB_API_WAIT_NANOS_COUNT_SESSION | 1672988157 | | NDB_API_BYTES_SENT_COUNT_SESSION | 162572 | | NDB_API_BYTES_RECEIVED_COUNT_SESSION | 1019144 | | NDB_API_TRANS_START_COUNT_SESSION | 87 | | NDB_API_TRANS_COMMIT_COUNT_SESSION | 64 | | NDB_API_TRANS_ABORT_COUNT_SESSION | 0 | | NDB_API_TRANS_CLOSE_COUNT_SESSION | 87 | | NDB_API_PK_OP_COUNT_SESSION | 101 | | NDB_API_UK_OP_COUNT_SESSION | 0 | | NDB_API_TABLE_SCAN_COUNT_SESSION | 29 | | NDB_API_RANGE_SCAN_COUNT_SESSION | 0 | | NDB_API_PRUNED_SCAN_COUNT_SESSION | 0 | | NDB_API_SCAN_BATCH_COUNT_SESSION | 19 | | NDB_API_READ_ROW_COUNT_SESSION | 55 | | NDB_API_TRANS_LOCAL_READ_ROW_COUNT_SESSION | 14 | | NDB_API_ADAPTIVE_SEND_FORCED_COUNT_SESSION | 76 | | NDB_API_ADAPTIVE_SEND_UNFORCED_COUNT_SESSION | 88 | | NDB_API_ADAPTIVE_SEND_DEFERRED_COUNT_SESSION | 0 | +----------------------------------------------+----------------+ 69 rows in set, 1 warning (0.00 sec)
每个 ndb 对象都有其自身的计数器。NDB API 应用程序可以读取这些计数器的值,用于优化或监控。对于使用多个 Ndb 对象并发运行的多线程 客户端,还可以从属于给定 ndb_cluster_connection 的所有 Ndb 对象中获取计数器的汇总视图。
暴露了四组这样的计数器。一组只适用于当前会话;另外3个是全局性的。尽管它们的值可以在mysql客户端中作为会话或全局状态变量获得。这 意味着使用SHOW STATUS指定SESSION或GLOBAL关键字对NDB API统计状态变量报告的值没有影响,并且这些变量的值无论从SESSION_STATUS或 GLOBAL_STATUS表的等效列中获得的值都是相同的。
.会话计数器(特定于会话)
会话计数器与(仅)当前会话使用的Ndb对象相关。其他MySQL客户端使用这些对象不会影响这些计数。
为了尽量减少与标准MySQL会话变量的混淆,我们将与这些NDB API会话计数器对应的变量称为“_session变量”,前面有下划线。
.从属计数器(全局)
这组计数器与复制从SQL线程使用的Ndb对象相关(如果有的话)。如果这个mysqld不作为复制从,或者不使用NDB表,那么所有这些计数都是0。
我们将相关的状态变量称为“_slave变量”(前面有下划线)。
.注入器计数器(全局)
注入器计数器与用于侦听二进制日志注入器线程的集群事件的Ndb对象相关。即使不写二进制日志,附加到NDB集群的mysqld进程也会继续侦听一 些事件,比如模式更改。
我们把对应于NDB API注入器计数器的状态变量称为“_injector variables”。(以下划线开头)。
.服务器(全局)计数器(全局)
这组计数器与当前mysqld使用的所有Ndb对象相关。这包括所有MySQL客户端应用程序、从SQL线程(如果有的话)、binlog注入器和NDB实用程序 线程。
我们将与这些计数器对应的状态变量称为“全局变量”或“mysqld级变量”。
你可以通过额外过滤变量名中的子字符串session、slave或injector(以及常用的前缀Ndb_api)来获得一组特定变量的值。对于_session变量 ,可以这样做:
mysql> SHOW STATUS LIKE 'ndb_api%session'; +----------------------------------------------+------------+ | Variable_name | Value | +----------------------------------------------+------------+ | Ndb_api_wait_exec_complete_count_session | 131 | | Ndb_api_wait_scan_result_count_session | 142 | | Ndb_api_wait_meta_request_count_session | 481 | | Ndb_api_wait_nanos_count_session | 1672988157 | | Ndb_api_bytes_sent_count_session | 162572 | | Ndb_api_bytes_received_count_session | 1019144 | | Ndb_api_trans_start_count_session | 87 | | Ndb_api_trans_commit_count_session | 64 | | Ndb_api_trans_abort_count_session | 0 | | Ndb_api_trans_close_count_session | 87 | | Ndb_api_pk_op_count_session | 101 | | Ndb_api_uk_op_count_session | 0 | | Ndb_api_table_scan_count_session | 29 | | Ndb_api_range_scan_count_session | 0 | | Ndb_api_pruned_scan_count_session | 0 | | Ndb_api_scan_batch_count_session | 19 | | Ndb_api_read_row_count_session | 55 | | Ndb_api_trans_local_read_row_count_session | 14 | | Ndb_api_adaptive_send_forced_count_session | 76 | | Ndb_api_adaptive_send_unforced_count_session | 88 | | Ndb_api_adaptive_send_deferred_count_session | 0 | +----------------------------------------------+------------+ 21 rows in set (0.00 sec)
要获取NDB API mysqld级别状态变量的列表,请过滤以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 | 578 | | NDB_API_WAIT_SCAN_RESULT_COUNT | 432 | | NDB_API_WAIT_META_REQUEST_COUNT | 1293 | | NDB_API_WAIT_NANOS_COUNT | 81348847300579 | | NDB_API_BYTES_SENT_COUNT | 251124 | | NDB_API_BYTES_RECEIVED_COUNT | 2080408 | | NDB_API_TRANS_START_COUNT | 411 | | NDB_API_TRANS_COMMIT_COUNT | 334 | | NDB_API_TRANS_ABORT_COUNT | 2 | | NDB_API_TRANS_CLOSE_COUNT | 411 | | NDB_API_PK_OP_COUNT | 477 | | NDB_API_UK_OP_COUNT | 0 | | NDB_API_TABLE_SCAN_COUNT | 95 | | NDB_API_RANGE_SCAN_COUNT | 0 | | NDB_API_PRUNED_SCAN_COUNT | 0 | | NDB_API_SCAN_BATCH_COUNT | 147 | | NDB_API_READ_ROW_COUNT | 348 | | NDB_API_TRANS_LOCAL_READ_ROW_COUNT | 108 | | NDB_API_ADAPTIVE_SEND_FORCED_COUNT | 225 | | NDB_API_ADAPTIVE_SEND_UNFORCED_COUNT | 459 | | NDB_API_ADAPTIVE_SEND_DEFERRED_COUNT | 0 | | NDB_API_EVENT_DATA_COUNT | 78 | | NDB_API_EVENT_NONDATA_COUNT | 7 | | NDB_API_EVENT_BYTES_COUNT | 26756 | +--------------------------------------+----------------+ 24 rows in set, 1 warning (0.00 sec)
并非所有计数器都反映在所有4组状态变量中。对于事件计数器DataEventsRecvdCount、NondataEventsRecvdCount和EventBytesRecvdCount,只 有_injector和mysqld级别的NDB API状态变量可用:
mysql> SHOW STATUS LIKE 'ndb_api%event%'; +--------------------------------------+-------+ | Variable_name | Value | +--------------------------------------+-------+ | Ndb_api_event_data_count | 78 | | Ndb_api_event_nondata_count | 7 | | Ndb_api_event_bytes_count | 26756 | | Ndb_api_event_data_count_injector | 78 | | Ndb_api_event_nondata_count_injector | 7 | | Ndb_api_event_bytes_count_injector | 26756 | +--------------------------------------+-------+ 6 rows in set (0.00 sec)
_injector状态变量,如下所示:
mysql> SHOW STATUS LIKE 'ndb_api%injector%'; +--------------------------------------+-------+ | Variable_name | Value | +--------------------------------------+-------+ | Ndb_api_event_data_count_injector | 78 | | Ndb_api_event_nondata_count_injector | 7 | | Ndb_api_event_bytes_count_injector | 26756 | +--------------------------------------+-------+ 3 rows in set (0.00 sec)
要查看所有已提交事务的计数,也就是所有TransCommitCount计数器状态变量,你可以为SHOW STATUS加上子字符串trans_commit_count进行过滤 ,如下所示:
mysql> SHOW STATUS LIKE '%trans_commit_count%'; +------------------------------------+-------+ | Variable_name | Value | +------------------------------------+-------+ | Ndb_api_trans_commit_count | 334 | | Ndb_api_trans_commit_count_slave | 0 | | Ndb_api_trans_commit_count_session | 64 | +------------------------------------+-------+ 3 rows in set (0.00 sec)
由此,你可以确定在当前mysql客户端会话中已经提交了334个事务,并且自上次重新启动以来,这个mysqld上已经提交了64个事务。
通过比较执行语句前后对应的_session状态变量的值,可以看到给定SQL语句如何增加各种NDB API计数器。在这个例子中,在得到SHOW STATUS 的初始值之后,我们在jycs数据库中创建了一个名为t的NDB表,它只有一列:
mysql> SHOW STATUS LIKE 'ndb_api%session%'; +----------------------------------------------+------------+ | Variable_name | Value | +----------------------------------------------+------------+ | Ndb_api_wait_exec_complete_count_session | 131 | | Ndb_api_wait_scan_result_count_session | 142 | | Ndb_api_wait_meta_request_count_session | 481 | | Ndb_api_wait_nanos_count_session | 1672988157 | | Ndb_api_bytes_sent_count_session | 162572 | | Ndb_api_bytes_received_count_session | 1019144 | | Ndb_api_trans_start_count_session | 87 | | Ndb_api_trans_commit_count_session | 64 | | Ndb_api_trans_abort_count_session | 0 | | Ndb_api_trans_close_count_session | 87 | | Ndb_api_pk_op_count_session | 101 | | Ndb_api_uk_op_count_session | 0 | | Ndb_api_table_scan_count_session | 29 | | Ndb_api_range_scan_count_session | 0 | | Ndb_api_pruned_scan_count_session | 0 | | Ndb_api_scan_batch_count_session | 19 | | Ndb_api_read_row_count_session | 55 | | Ndb_api_trans_local_read_row_count_session | 14 | | Ndb_api_adaptive_send_forced_count_session | 76 | | Ndb_api_adaptive_send_unforced_count_session | 88 | | Ndb_api_adaptive_send_deferred_count_session | 0 | +----------------------------------------------+------------+ 21 rows in set (0.00 sec) mysql> use jycs; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> CREATE TABLE t (c INT) ENGINE NDBCLUSTER; Query OK, 0 rows affected (0.08 sec)
现在,您可以执行新的SHOW STATUS语句并观察更改,如下所示(在输出中突出显示更改的行):
mysql> SHOW STATUS LIKE 'ndb_api%session%'; +----------------------------------------------+------------+ | Variable_name | Value | +----------------------------------------------+------------+ | Ndb_api_wait_exec_complete_count_session | 139 | | Ndb_api_wait_scan_result_count_session | 142 | | Ndb_api_wait_meta_request_count_session | 497 | | Ndb_api_wait_nanos_count_session | 1714790150 | | Ndb_api_bytes_sent_count_session | 164632 | | Ndb_api_bytes_received_count_session | 1051308 | | Ndb_api_trans_start_count_session | 91 | | Ndb_api_trans_commit_count_session | 68 | | Ndb_api_trans_abort_count_session | 0 | | Ndb_api_trans_close_count_session | 91 | | Ndb_api_pk_op_count_session | 107 | | Ndb_api_uk_op_count_session | 0 | | Ndb_api_table_scan_count_session | 29 | | Ndb_api_range_scan_count_session | 0 | | Ndb_api_pruned_scan_count_session | 0 | | Ndb_api_scan_batch_count_session | 19 | | Ndb_api_read_row_count_session | 57 | | Ndb_api_trans_local_read_row_count_session | 14 | | Ndb_api_adaptive_send_forced_count_session | 78 | | Ndb_api_adaptive_send_unforced_count_session | 94 | | Ndb_api_adaptive_send_deferred_count_session | 0 | +----------------------------------------------+------------+ 21 rows in set (0.00 sec)
类似地,你可以看到在t中插入一行所引起的NDB API统计计数器的变化:插入行,然后运行与前面示例中相同的SHOW STATUS语句,如下所示:
mysql> INSERT INTO t VALUES (100); Query OK, 1 row affected (0.01 sec) mysql> SHOW STATUS LIKE 'ndb_api%session%'; +----------------------------------------------+------------+ | Variable_name | Value | +----------------------------------------------+------------+ | Ndb_api_wait_exec_complete_count_session | 142 | | Ndb_api_wait_scan_result_count_session | 146 | | Ndb_api_wait_meta_request_count_session | 498 | | Ndb_api_wait_nanos_count_session | 1715762929 | | Ndb_api_bytes_sent_count_session | 164928 | | Ndb_api_bytes_received_count_session | 1051540 | | Ndb_api_trans_start_count_session | 94 | | Ndb_api_trans_commit_count_session | 70 | | Ndb_api_trans_abort_count_session | 0 | | Ndb_api_trans_close_count_session | 94 | | Ndb_api_pk_op_count_session | 109 | | Ndb_api_uk_op_count_session | 0 | | Ndb_api_table_scan_count_session | 30 | | Ndb_api_range_scan_count_session | 0 | | Ndb_api_pruned_scan_count_session | 0 | | Ndb_api_scan_batch_count_session | 19 | | Ndb_api_read_row_count_session | 58 | | Ndb_api_trans_local_read_row_count_session | 15 | | Ndb_api_adaptive_send_forced_count_session | 81 | | Ndb_api_adaptive_send_unforced_count_session | 95 | | Ndb_api_adaptive_send_deferred_count_session | 0 | +----------------------------------------------+------------+ 21 rows in set (0.00 sec)
我们可以从这些结果中得出一些观察结果:
.虽然我们没有使用显式的主键创建t,但在此过程中执行了6个主键操作(Ndb_api_pk_op_count_session的“before”和“after”值之差,即 107减106)。这反映了隐藏主键的创建,这是使用NDB存储引擎的所有表的一个特性。
.通过比较Ndb_api_wait_nanos_count_session的连续值,我们可以看到,实现CREATE TABLE语句的NDB API操作等待数据节点响应的时间 (1714790150-1672988157 = 41801993 纳秒,或大约0.04秒)要比INSERT (1715762929-1714790150 = 972779 纳秒或大约0.001秒)长得多。 mysql客户端中报告的这些语句的执行时间与这些图大致相关。
在没有足够(纳秒)时间分辨率的平台上,由于SQL语句执行非常快而导致的WaitNanosCount NDB API计数器值的微小变化可能并不总是在 Ndb_api_wait_nanos_count_session, Ndb_api_wait_nanos_count_slave或Ndb_api_wait_nanos_count的值中可见。
.INSERT语句增加了NDB API统计计数器的ReadRowCount和TransLocalReadRowCount,正如Ndb_api_read_row_count_session和 Ndb_api_trans_local_read_row_count_session增加的值所反映的那样。