有多种与 Ndb 对象执行或影响的操作相关的统计计数器。这些操作包括启动和关闭(或中止)事务;主键和唯一键操作;表扫描、范围扫描和修剪扫描;线程在等待各种操作完成时被阻塞;以及 NDBCLUSTER 发送和接收的数据和事件。每当进行 NDB API 调用或数据被发送到数据节点或从数据节点接收时,这些计数器都会在 NDB 内核中递增。mysqld 将这些计数器作为系统状态变量公开;可以通过 SHOW STATUS 的输出读取其值,或通过查询 Performance Schema 的 session_status 或 global_status 表来读取。通过比较操作 NDB 表的语句前后的值,可以观察 API 级别执行的相应操作,从而了解执行该语句的成本。A number of types of statistical counters relating to actions
performed by or affecting Ndb
objects are available. Such actions include starting and closing
(or aborting) transactions; primary key and unique key operations;
table, range, and pruned scans; threads blocked while waiting for
the completion of various operations; and data and events sent and
received by NDBCLUSTER. The counters are
incremented inside the NDB kernel whenever NDB API calls are made
or data is sent to or received by the data nodes.
mysqld exposes these counters as system status
variables; their values can be read in the output of
SHOW STATUS, or by querying the
Performance Schema session_status or
global_status table. By comparing the
values before and after statements operating on
NDB tables, you can observe the
corresponding actions taken on the API level, and thus the cost of
performing the statement.
您可以使用以下 SHOW STATUS 语句列出所有这些状态变量:You can list all of these status variables using the following
SHOW STATUS statement:
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 表中获得,如下所示:These status variables are also available from the Performance
Schema session_status and
global_status tables, as shown here:
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 对象获得计数器的汇总视图。Each Ndb object has its own
counters. NDB API applications can read the values of the counters
for use in optimization or monitoring. For multithreaded clients
which use more than one Ndb
object concurrently, it is also possible to obtain a summed view
of counters from all Ndb objects
belonging to a given
Ndb_cluster_connection.
这类计数器有四组被暴露出来。一组仅适用于当前会话;另外三组是全局的。尽管其值可以在 mysql 客户端中作为会话或全局状态变量获取。这意味着在 SHOW STATUS 中指定 SESSION 或 GLOBAL 关键字不会影响 NDB API 统计状态变量报告的值,并且无论是从 session_status 还是 global_status 表的相应列获取值,每个变量的值都是相同的。Four sets of these counters are exposed. One set applies to the
current session only; the other 3 are global. This is in
spite of the fact that their values can be obtained as either
session or global status variables in the mysql
client. This means that specifying the
SESSION or GLOBAL keyword
with SHOW STATUS has no effect on
the values reported for NDB API statistics status variables, and
the value for each of these variables is the same whether the
value is obtained from the equivalent column of the
session_status or the
global_status table.
会话计数器(特定于会话)Session counters (session specific)
会话计数器与当前会话使用的
Ndb对象相关。其他 MySQL 客户端使用这些对象不会影响这些计数。Session counters relate to theNdbobjects in use by (only) the current session. Use of such objects by other MySQL clients does not influence these counts.为了尽量减少与标准 MySQL 会话变量的混淆,我们将与这些 NDB API 会话计数器对应的变量称为“
_session变量”,前面带有下划线。In order to minimize confusion with standard MySQL session variables, we refer to the variables that correspond to these NDB API session counters as “_sessionvariables”, with a leading underscore.副本计数器(全局)Replica counters (global)
这一组计数器与副本 SQL 线程使用的
Ndb对象有关(如果有的话)。如果此 mysqld 不作为副本运行,或者不使用NDB表,那么所有这些计数都为 0。This set of counters relates to theNdbobjects used by the replica SQL thread, if any. If this mysqld does not act as a replica, or does not useNDBtables, then all of these counts are 0.我们将相关的状态变量称为 “
_replica变量”(前面带下划线)。We refer to the related status variables as “_replicavariables” (with a leading underscore).注入器计数器(全局)Injector counters (global)
注入器计数器与
Ndb对象相关,该对象由二进制日志注入器线程用于监听集群事件。即使不写入二进制日志,mysqld 进程连接到 NDB 集群后仍会监听某些事件,例如模式更改。Injector counters relate to theNdbobject used to listen to cluster events by the binary log injector thread. Even when not writing a binary log, mysqld processes attached to an NDB Cluster continue to listen for some events, such as schema changes.我们将与 NDB API 注入器计数器对应的状态变量称为 “
_injector变量”(带前导下划线)。We refer to the status variables that correspond to NDB API injector counters as “_injectorvariables” (with a leading underscore).服务器(全局)计数器(全局)Server (Global) counters (global)
这一组计数器与当前由该 mysqld 使用的所有
Ndb对象相关。这包括所有 MySQL 客户端应用程序、副本 SQL 线程(如果有)、二进制日志注入器以及NDB工具线程。This set of counters relates to allNdbobjects currently used by this mysqld. This includes all MySQL client applications, the replica SQL thread (if any), the binary log injector, and theNDButility thread.我们将与这些计数器对应的状态变量称为“全局变量”或“mysqld级变量”。We refer to the status variables that correspond to these counters as “global variables” or “mysqld-level variables”.
您可以通过在变量名中另外筛选子字符串 session、replica 或 injector(以及常见前缀 Ndb_api)来获取特定变量集的值。对于 _session 变量,可以按如下方式操作:You can obtain values for a particular set of variables by
additionally filtering for the substring
session, replica, or
injector in the variable name (along with the
common prefix Ndb_api). For
_session variables, this can be done as shown
here:
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 结尾的变量名,如下所示:To obtain a listing of the NDB API mysqld-level
status variables, filter for variable names beginning with
ndb_api and ending in
_count, like this:
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 状态变量可用:Not all counters are reflected in all 4 sets of status variables.
For the event counters DataEventsRecvdCount,
NondataEventsRecvdCount, and
EventBytesRecvdCount, only
_injector and mysqld-level
NDB API status variables are available:
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 计数器实现,如下所示:_injector status variables are not implemented
for any other NDB API counters, as shown here:
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 服务器状态变量的名称。The names of the status variables can easily be associated with the names of the corresponding counters. Each NDB API statistics counter is listed in the following table with a description as well as the names of any MySQL server status variables corresponding to this counter.
表 25.39 NDB API 统计计数器Table 25.39 NDB API statistics counters
| 计数器名称Counter Name | 说明Description | Status Variables (by statistic type):
|
|---|---|---|
WaitExecCompleteCount |
线程在等待操作执行完成时被阻塞的次数。包括所有execute()调用,以及针对 blob 操作和客户端不可见的自动递增操作的隐式执行。Number of times thread has been blocked while waiting for execution of
an operation to complete. Includes all
execute()
calls as well as implicit executes for blob operations and
auto-increment not visible to clients. |
|
WaitScanResultCount |
线程在等待基于扫描的信号时被阻塞的次数,例如等待更多结果或等待扫描关闭。Number of times thread has been blocked while waiting for a scan-based signal, such waiting for additional results, or for a scan to close. | |
WaitMetaRequestCount |
线程因等待基于元数据的信号而被阻塞的次数;这可能发生在等待 DDL 操作或等待一个纪元开始(或结束)时。Number of times thread has been blocked waiting for a metadata-based signal; this can occur when waiting for a DDL operation or for an epoch to be started (or ended). | |
WaitNanosCount |
等待来自数据节点的某种信号所花费的总时间(以纳秒为单位)。Total time (in nanoseconds) spent waiting for some type of signal from the data nodes. | |
BytesSentCount |
发送到数据节点的数据量(以字节为单位)Amount of data (in bytes) sent to the data nodes | |
BytesRecvdCount |
从数据节点接收的数据量(以字节为单位)Amount of data (in bytes) received from the data nodes | |
TransStartCount |
已启动的事务数量。Number of transactions started. | |
TransCommitCount |
已提交的事务数量。Number of transactions committed. | |
TransAbortCount |
事务中止的数量。Number of transactions aborted. | |
TransCloseCount |
事务中止的数量。(该值可能大于 TransCommitCount 和 TransAbortCount 的总和。)Number of transactions aborted. (This value may be greater than the sum
of TransCommitCount and
TransAbortCount.) |
|
PkOpCount |
基于主键或使用主键的操作次数。此计数包括 blob 部分表操作、隐式解锁操作和自增操作,以及通常对 MySQL 客户端可见的主键操作。Number of operations based on or using primary keys. This count includes blob-part table operations, implicit unlocking operations, and auto-increment operations, as well as primary key operations normally visible to MySQL clients. | |
UkOpCount |
基于或使用唯一键的操作次数。Number of operations based on or using unique keys. | |
TableScanCount |
已启动的表扫描次数。这包括对内部表的扫描。Number of table scans that have been started. This includes scans of internal tables. | |
RangeScanCount |
已启动的范围扫描次数。Number of range scans that have been started. | |
PrunedScanCount |
已被裁剪为单个分区的扫描次数。Number of scans that have been pruned to a single partition. | |
ScanBatchCount |
接收到的行批次数。(在此上下文中,批次 是来自单个片段的一组扫描结果。)Number of batches of rows received. (A batch in this context is a set of scan results from a single fragment.) | |
ReadRowCount |
已读取的行总数。包括使用主键、唯一键和扫描操作读取的行。Total number of rows that have been read. Includes rows read using primary key, unique key, and scan operations. | |
TransLocalReadRowCount |
从运行事务的相同节点读取的行数。Number of rows read from the data same node on which the transaction was being run. | |
DataEventsRecvdCount |
接收到的行变更事件数量。Number of row change events received. |
|
NondataEventsRecvdCount |
接收到的非行变更事件数量。Number of events received, other than row change events. |
|
EventBytesRecvdCount |
接收到的事件字节数。Number of bytes of events received. |
|
要查看已提交事务的所有计数——即所有 TransCommitCount 计数器状态变量——你可以通过 SHOW STATUS 结果中过滤包含 trans_commit_count 子字符串的内容,如下:To see all counts of committed transactions—that is, all
TransCommitCount counter status
variables—you can filter the results of
SHOW STATUS for the substring
trans_commit_count, like this:
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 个事务。From this you can determine that 1 transaction has been committed in the current mysql client session, and 2 transactions have been committed on this mysqld since it was last restarted.
您可以通过比较执行给定 SQL 语句前后相应的 _session 状态变量的值,来查看各种 NDB API 计数器是如何递增的。在此示例中,在从 SHOW
STATUS 获取初始值后,我们在 test 数据库中创建了一个名为 t 的 NDB 表,该表只有一列:You can see how various NDB API counters are incremented by a
given SQL statement by comparing the values of the corresponding
_session status variables immediately before
and after performing the statement. In this example, after getting
the initial values from SHOW
STATUS, we create in the test
database an NDB table, named
t, that has a single column:
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 语句,并观察变化,如下所示(输出中高亮显示了变化的行):Now you can execute a new SHOW
STATUS statement and observe the changes, as shown here
(with the changed rows highlighted in the output):
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 语句,如下所示:Similarly, you can see the changes in the NDB API statistics
counters caused by inserting a row into t:
Insert the row, then run the same SHOW
STATUS statement used in the previous example, as shown
here:
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)
我们可以从这些结果中做出许多观察:We can make a number of observations from these results:
虽然我们创建了
t时没有显式的主键,但在创建过程中进行了 5 次主键操作(通过 “before” 和 “after” 的Ndb_api_pk_op_count_session值的差异,或者 6 减 1 得出)。这反映了隐藏主键的创建,这是所有使用NDB存储引擎的表的一个特性。Although we createdtwith no explicit primary key, 5 primary key operations were performed in doing so (the difference in the “before” and “after” values ofNdb_api_pk_op_count_session, or 6 minus 1). This reflects the creation of the hidden primary key that is a feature of all tables using theNDBstorage engine.通过比较连续的
Ndb_api_wait_nanos_count_session值,我们可以看到,实现CREATE TABLE语句的 NDB API 操作等待来自数据节点的响应所花费的时间要长得多(706871709 - 820705 = 706051004 纳秒,约 0.7 秒),相比之下,执行INSERT的操作(707370418 - 706871709 = 498709 纳秒,大约 0.0005 秒)等待时间明显较短。在 mysql 客户端中报告的这些语句的执行时间大致与这些数据相符。By comparing successive values forNdb_api_wait_nanos_count_session, we can see that the NDB API operations implementing theCREATE TABLEstatement waited much longer (706871709 - 820705 = 706051004 nanoseconds, or approximately 0.7 second) for responses from the data nodes than those executed by theINSERT(707370418 - 706871709 = 498709 ns or roughly .0005 second). The execution times reported for these statements in the mysql client correlate roughly with these figures.在没有足够(纳秒)时间分辨率的平台上,由于 SQL 语句执行非常快导致的
WaitNanosCountNDB API 计数器的微小变化,可能并不总是能在Ndb_api_wait_nanos_count_session、Ndb_api_wait_nanos_count_replica或Ndb_api_wait_nanos_count的值中可见。On platforms without sufficient (nanosecond) time resolution, small changes in the value of theWaitNanosCountNDB API counter due to SQL statements that execute very quickly may not always be visible in the values ofNdb_api_wait_nanos_count_session,Ndb_api_wait_nanos_count_replica, orNdb_api_wait_nanos_count.INSERT语句增加了ReadRowCount和TransLocalReadRowCount两个 NDB API 统计计数器,这在Ndb_api_read_row_count_session和Ndb_api_trans_local_read_row_count_session值的增加中有所反映。TheINSERTstatement incremented both theReadRowCountandTransLocalReadRowCountNDB API statistics counters, as reflected by the increased values ofNdb_api_read_row_count_sessionandNdb_api_trans_local_read_row_count_session.