25.6.16 Счётчики и переменные статистики API 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 API могут читать значения счётчиков для использования в оптимизации или мониторинге. Для многопоточных клиентов, использующих более одного объекта одновременно, также можно получить суммарный просмотр счётчиков от всех объектов, принадлежащих заданному .
Доступны четыре набора таких счётчиков. Один набор относится только к текущей сессии; другие 3 являются глобальными. Это несмотря на то, что их значения можно получить как переменные состояния сессии или глобальные в клиенте mysql. Это означает, что указание ключевого слова SESSION или GLOBAL с SHOW STATUS не влияет на значения, отчётные для переменных состояния статистики API NDB, и значение для каждой из этих переменных одинаково, независимо от того, получено ли оно из соответствующего столбца таблицы session_status или global_status.
-
Счётчики сессии (конкретные для сессии)
Счётчики сессии относятся к объектам, используемым (только) текущей сессией. Использование таких объектов другими клиентами MySQL не влияет на эти подсчёты.
Для минимизации путаницы со стандартными переменными сессии MySQL, мы будем называть переменные, соответствующие этим счётчикам сессии API NDB, “
_sessionпеременные”, с префиксным символом нижнего подчеркивания. -
Счётчики реплики (глобальные)
Этот набор счётчиков относится к объектам, используемым потоком SQL реплики, если таковой имеется. Если mysqld не выполняет роль реплики или не использует таблицы
NDB, то все эти подсчёты равны 0.Мы будем называть соответствующие переменные состояния “
_replicaпеременные” (с префиксным символом нижнего подчеркивания). -
Счётчики инжектора (глобальные)
Счётчики инжектора относятся к объекту, используемому для прослушивания событий кластера потоком инжектора двоичного журнала. Даже при отсутствии записи двоичного журнала mysqld, подключенные к кластеру NDB, продолжают прослушивать некоторые события, такие как изменения схемы.
Мы будем называть переменные состояния, соответствующие счётчикам инжектора API NDB, “
_injectorпеременные” (с префиксным символом нижнего подчеркивания). -
Счётчики сервера (глобальные) (глобальные)
Этот набор счётчиков относится ко всем объектам, которые в настоящее время используются этим mysqld. Сюда входят все приложения 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)
Чтобы получить список переменных состояния уровня mysqld API NDB, отфильтруйте имена переменных, начинающиеся с 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 и переменные состояния API NDB уровня mysqld:
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 переменные состояния не реализованы для других счётчиков API NDB, как показано здесь:
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)
Имена переменных состояния легко связать с именами соответствующих счётчиков. Каждый счётчик статистики API NDB перечислен в следующей таблице с описанием, а также именами любых переменных состояния сервера MySQL, соответствующих этому счётчику.
Таблица 25.39 Счётчики статистики API NDB
| Имя счётчика | Описание | Переменные состояния (по типу статистики):
|
|---|
WaitExecCompleteCount | Количество раз, когда поток был заблокирован в ожидании завершения операции. Включает все вызовы, а также неявные выполнение для операций с блобами и автоматического инкремента, не видимые клиентам. | |
|---|---|---|
WaitScanResultCount | Количество раз, когда поток был заблокирован в ожидании сигнала, основанного на сканировании, например, в ожидании дополнительных результатов или завершения сканирования. | |
WaitMetaRequestCount | Количество раз, когда поток был заблокирован в ожидании сигнала, основанного на метаданных; это может произойти при ожидании операции DDL или начала (или окончания) эпохи. | |
WaitNanosCount | Общее время (в наносекундах), затраченное на ожидание какого-либо сигнала от узлов данных. | |
BytesSentCount | Объем данных (в байтах), отправленный узлам данных | |
BytesRecvdCount | Объем данных (в байтах), полученных от узлов данных | |
TransStartCount | Количество начатых транзакций. | |
TransCommitCount | Количество успешно завершённых транзакций. | |
TransAbortCount | Количество прерванных транзакций. | |
TransCloseCount | Количество прерванных транзакций. (Это значение может быть больше суммы TransCommitCount и TransAbortCount.) | |
PkOpCount | Количество операций, основанных на первичных ключах или использующих их. Это количество включает операции с таблицами с блобами, неявные операции разблокировки и операции автоматического инкремента, а также операции с первичными ключами, обычно видимые для клиентов 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)
Из этого можно определить, что 1 транзакция была завершена в текущей сессии клиента mysql, и 2 транзакции были завершены на этом сервере mysqld с момента последней перезагрузки.
Вы можете увидеть, как различные счётчики NDB API увеличиваются в результате выполнения конкретного SQL-запроса, сравнив значения соответствующих _session переменных состояния непосредственно перед и после выполнения запроса. В этом примере, после получения начальных значений из SHOW
STATUS, мы создаём в базе данных test таблицу NDB с именем t, содержащую один столбец:
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)
Аналогично, вы можете увидеть изменения в счётчиках статистики NDB API, вызванные вставкой строки в таблицу t: вставьте строку, затем выполните тот же запрос 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, мы можем увидеть, что операции NDB API, реализующие запросCREATE TABLE, ожидали ответы от узлов данных значительно дольше (706871709 - 820705 = 706051004 наносекунды, или примерно 0,7 секунды), чем те, которые выполнялись запросомINSERT(707370418 - 706871709 = 498709 нс или примерно 0,0005 секунды). Время выполнения, указанное для этих запросов в клиенте mysql, примерно соответствует этим значениям.На платформах без достаточного разрешения по времени (наносекунды), незначительные изменения в значении счётчика NDB API
WaitNanosCount, вызванные SQL запросами, которые выполняются очень быстро, могут не всегда отображаться в значенияхNdb_api_wait_nanos_count_session,Ndb_api_wait_nanos_count_replicaилиNdb_api_wait_nanos_count. Запрос
INSERTувеличил оба счётчика статистики NDB API,ReadRowCountиTransLocalReadRowCount, что отражено в увеличенных значенияхNdb_api_read_row_count_sessionиNdb_api_trans_local_read_row_count_session.
© 2025 Oracle
Licensed under the GPLv2 License.