21.6.14 Счётчики и переменные статистики 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 | 2 |
| Ndb_api_wait_scan_result_count | 3 |
| Ndb_api_wait_meta_request_count | 101 |
| Ndb_api_wait_nanos_count | 83664697215 |
| Ndb_api_bytes_sent_count | 13608 |
| Ndb_api_bytes_received_count | 142800 |
| Ndb_api_trans_start_count | 2 |
| Ndb_api_trans_commit_count | 1 |
| Ndb_api_trans_abort_count | 0 |
| Ndb_api_trans_close_count | 2 |
| Ndb_api_pk_op_count | 1 |
| Ndb_api_uk_op_count | 0 |
| Ndb_api_table_scan_count | 1 |
| Ndb_api_range_scan_count | 0 |
| Ndb_api_pruned_scan_count | 0 |
| Ndb_api_scan_batch_count | 0 |
| Ndb_api_read_row_count | 1 |
| Ndb_api_trans_local_read_row_count | 1 |
| Ndb_api_adaptive_send_forced_count | 0 |
| Ndb_api_adaptive_send_unforced_count | 3 |
| 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_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 | 0 |
| Ndb_api_event_nondata_count_injector | 0 |
| Ndb_api_event_bytes_count_injector | 0 |
| Ndb_api_wait_exec_complete_count_session | 0 |
| Ndb_api_wait_scan_result_count_session | 0 |
| Ndb_api_wait_meta_request_count_session | 0 |
| Ndb_api_wait_nanos_count_session | 0 |
| Ndb_api_bytes_sent_count_session | 0 |
| Ndb_api_bytes_received_count_session | 0 |
| Ndb_api_trans_start_count_session | 0 |
| Ndb_api_trans_commit_count_session | 0 |
| Ndb_api_trans_abort_count_session | 0 |
| Ndb_api_trans_close_count_session | 0 |
| Ndb_api_pk_op_count_session | 0 |
| Ndb_api_uk_op_count_session | 0 |
| Ndb_api_table_scan_count_session | 0 |
| Ndb_api_range_scan_count_session | 0 |
| Ndb_api_pruned_scan_count_session | 0 |
| Ndb_api_scan_batch_count_session | 0 |
| Ndb_api_read_row_count_session | 0 |
| Ndb_api_trans_local_read_row_count_session | 0 |
| Ndb_api_adaptive_send_forced_count_session | 0 |
| Ndb_api_adaptive_send_unforced_count_session | 0 |
| Ndb_api_adaptive_send_deferred_count_session | 0 |
+----------------------------------------------+-------------+
69 rows in set (0.00 sec)
Эти переменные состояния также доступны из SESSION_STATUS и GLOBAL_STATUS таблиц базы данных INFORMATION_SCHEMA, как показано ниже:
mysql> SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
-> WHERE VARIABLE_NAME LIKE 'ndb_api%';
+----------------------------------------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+----------------------------------------------+----------------+
| Ndb_api_wait_exec_complete_count | 2 |
| Ndb_api_wait_scan_result_count | 3 |
| Ndb_api_wait_meta_request_count | 101 |
| Ndb_api_wait_nanos_count | 74890499869 |
| Ndb_api_bytes_sent_count | 13608 |
| Ndb_api_bytes_received_count | 142800 |
| Ndb_api_trans_start_count | 2 |
| Ndb_api_trans_commit_count | 1 |
| Ndb_api_trans_abort_count | 0 |
| Ndb_api_trans_close_count | 2 |
| Ndb_api_pk_op_count | 1 |
| Ndb_api_uk_op_count | 0 |
| Ndb_api_table_scan_count | 1 |
| Ndb_api_range_scan_count | 0 |
| Ndb_api_pruned_scan_count | 0 |
| Ndb_api_scan_batch_count | 0 |
| Ndb_api_read_row_count | 1 |
| Ndb_api_trans_local_read_row_count | 1 |
| Ndb_api_adaptive_send_forced_count | 0 |
| Ndb_api_adaptive_send_unforced_count | 3 |
| 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_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 | 0 |
| Ndb_api_event_nondata_count_injector | 0 |
| Ndb_api_event_bytes_count_injector | 0 |
| Ndb_api_wait_exec_complete_count_session | 0 |
| Ndb_api_wait_scan_result_count_session | 0 |
| Ndb_api_wait_meta_request_count_session | 0 |
| Ndb_api_wait_nanos_count_session | 0 |
| Ndb_api_bytes_sent_count_session | 0 |
| Ndb_api_bytes_received_count_session | 0 |
| Ndb_api_trans_start_count_session | 0 |
| Ndb_api_trans_commit_count_session | 0 |
| Ndb_api_trans_abort_count_session | 0 |
| Ndb_api_trans_close_count_session | 0 |
| Ndb_api_pk_op_count_session | 0 |
| Ndb_api_uk_op_count_session | 0 |
| Ndb_api_table_scan_count_session | 0 |
| Ndb_api_range_scan_count_session | 0 |
| Ndb_api_pruned_scan_count_session | 0 |
| Ndb_api_scan_batch_count_session | 0 |
| Ndb_api_read_row_count_session | 0 |
| Ndb_api_trans_local_read_row_count_session | 0 |
| Ndb_api_adaptive_send_forced_count_session | 0 |
| Ndb_api_adaptive_send_unforced_count_session | 0 |
| Ndb_api_adaptive_send_deferred_count_session | 0 |
+----------------------------------------------+----------------+
69 rows in set (0.00 sec)
mysql> SELECT * FROM INFORMATION_SCHEMA.GLOBAL_STATUS
-> WHERE VARIABLE_NAME LIKE 'ndb_api%';
+----------------------------------------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+----------------------------------------------+----------------+
| Ndb_api_wait_exec_complete_count | 2 |
| Ndb_api_wait_scan_result_count | 3 |
| Ndb_api_wait_meta_request_count | 101 |
| Ndb_api_wait_nanos_count | 13640285623 |
| Ndb_api_bytes_sent_count | 13608 |
| Ndb_api_bytes_received_count | 142800 |
| Ndb_api_trans_start_count | 2 |
| Ndb_api_trans_commit_count | 1 |
| Ndb_api_trans_abort_count | 0 |
| Ndb_api_trans_close_count | 2 |
| Ndb_api_pk_op_count | 1 |
| Ndb_api_uk_op_count | 0 |
| Ndb_api_table_scan_count | 1 |
| Ndb_api_range_scan_count | 0 |
| Ndb_api_pruned_scan_count | 0 |
| Ndb_api_scan_batch_count | 0 |
| Ndb_api_read_row_count | 1 |
| Ndb_api_trans_local_read_row_count | 1 |
| Ndb_api_adaptive_send_forced_count | 0 |
| Ndb_api_adaptive_send_unforced_count | 3 |
| 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_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 | 0 |
| Ndb_api_event_nondata_count_injector | 0 |
| Ndb_api_event_bytes_count_injector | 0 |
| Ndb_api_wait_exec_complete_count_session | 0 |
| Ndb_api_wait_scan_result_count_session | 0 |
| Ndb_api_wait_meta_request_count_session | 0 |
| Ndb_api_wait_nanos_count_session | 0 |
| Ndb_api_bytes_sent_count_session | 0 |
| Ndb_api_bytes_received_count_session | 0 |
| Ndb_api_trans_start_count_session | 0 |
| Ndb_api_trans_commit_count_session | 0 |
| Ndb_api_trans_abort_count_session | 0 |
| Ndb_api_trans_close_count_session | 0 |
| Ndb_api_pk_op_count_session | 0 |
| Ndb_api_uk_op_count_session | 0 |
| Ndb_api_table_scan_count_session | 0 |
| Ndb_api_range_scan_count_session | 0 |
| Ndb_api_pruned_scan_count_session | 0 |
| Ndb_api_scan_batch_count_session | 0 |
| Ndb_api_read_row_count_session | 0 |
| Ndb_api_trans_local_read_row_count_session | 0 |
| Ndb_api_adaptive_send_forced_count_session | 0 |
| Ndb_api_adaptive_send_unforced_count_session | 0 |
| Ndb_api_adaptive_send_deferred_count_session | 0 |
+----------------------------------------------+----------------+
69 rows in set (0.01 sec)
Каждый объект имеет свои собственные счётчики. Приложения API NDB могут считывать значения счётчиков для использования в оптимизации или мониторинге. Для многопоточных клиентов, которые используют более одного объекта одновременно, также можно получить суммарный вид счётчиков от всех объектов, принадлежащих данному.
Доступно четыре набора таких счётчиков. Один набор относится только к текущей сессии; другие три являются глобальными. Это несмотря на то, что их значения могут быть получены как переменные состояния сессии или глобальные переменные состояния в клиенте mysql. Это означает, что указание ключевого слова SESSION или GLOBAL с SHOW STATUS не влияет на значения, отчётные для переменных состояния статистики API NDB, и значение для каждой из этих переменных одинаково, независимо от того, получено ли оно из соответствующего столбца SESSION_STATUS или GLOBAL_STATUS таблицы.
-
Счётчики сессии (специфичные для сессии)
Счётчики сессии относятся к объектам, используемым (только) текущей сессией. Использование таких объектов другими клиентами MySQL не влияет на эти подсчёты.
Для минимизации путаницы со стандартными переменными сессии MySQL, мы будем ссылаться на переменные, соответствующие этим счётчикам сессии API NDB, как “
_sessionпеременные” с ведущим символом нижнего подчёркивания. -
Счётчики репликации (глобальные)
Этот набор счётчиков относится к объектам, используемым потоком репликации SQL, если таковой имеется. Если данный mysqld не работает в качестве реплики или не использует
NDBтаблицы, то все эти подсчёты равны 0.Мы ссылаемся на соответствующие переменные состояния как на “
_slaveпеременные” (с ведущим символом нижнего подчёркивания). -
Счётчики инжектора (глобальные)
Счётчики инжектора относятся к объекту, используемому для прослушивания событий кластера потоком двоичного лога инжектора. Даже при отсутствии записи двоичного лога, mysqld, подключённые к кластеру NDB, продолжают прослушивать некоторые события, такие как изменения схемы.
Мы ссылаемся на переменные состояния, соответствующие счётчикам инжектора API NDB, как “
_injectorпеременные” (с ведущим символом нижнего подчёркивания). -
Серверные (глобальные) счётчики (глобальные)
Этот набор счётчиков относится ко всем объектам, в настоящее время используемым этим mysqld. Это включает все приложения MySQL-клиентов, поток репликации SQL (если таковой имеется), инжектор двоичного лога и
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 | 2 |
| Ndb_api_wait_scan_result_count_session | 0 |
| Ndb_api_wait_meta_request_count_session | 1 |
| Ndb_api_wait_nanos_count_session | 8144375 |
| Ndb_api_bytes_sent_count_session | 68 |
| Ndb_api_bytes_received_count_session | 84 |
| Ndb_api_trans_start_count_session | 1 |
| Ndb_api_trans_commit_count_session | 1 |
| Ndb_api_trans_abort_count_session | 0 |
| Ndb_api_trans_close_count_session | 1 |
| Ndb_api_pk_op_count_session | 1 |
| Ndb_api_uk_op_count_session | 0 |
| Ndb_api_table_scan_count_session | 0 |
| Ndb_api_range_scan_count_session | 0 |
| Ndb_api_pruned_scan_count_session | 0 |
| Ndb_api_scan_batch_count_session | 0 |
| Ndb_api_read_row_count_session | 1 |
| Ndb_api_trans_local_read_row_count_session | 1 |
+--------------------------------------------+---------+
18 rows in set (0.50 sec)
Чтобы получить список переменных состояния уровня mysqld API NDB, фильтруйте имена переменных, начинающиеся с ndb_api и заканчивающиеся на _count, как показано здесь:
mysql> SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
-> WHERE VARIABLE_NAME LIKE 'ndb_api%count';
+------------------------------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+------------------------------------+----------------+
| NDB_API_WAIT_EXEC_COMPLETE_COUNT | 4 |
| NDB_API_WAIT_SCAN_RESULT_COUNT | 3 |
| NDB_API_WAIT_META_REQUEST_COUNT | 28 |
| NDB_API_WAIT_NANOS_COUNT | 53756398 |
| NDB_API_BYTES_SENT_COUNT | 1060 |
| NDB_API_BYTES_RECEIVED_COUNT | 9724 |
| NDB_API_TRANS_START_COUNT | 3 |
| NDB_API_TRANS_COMMIT_COUNT | 2 |
| NDB_API_TRANS_ABORT_COUNT | 0 |
| NDB_API_TRANS_CLOSE_COUNT | 3 |
| NDB_API_PK_OP_COUNT | 2 |
| NDB_API_UK_OP_COUNT | 0 |
| NDB_API_TABLE_SCAN_COUNT | 1 |
| NDB_API_RANGE_SCAN_COUNT | 0 |
| NDB_API_PRUNED_SCAN_COUNT | 0 |
| NDB_API_SCAN_BATCH_COUNT | 0 |
| NDB_API_READ_ROW_COUNT | 2 |
| NDB_API_TRANS_LOCAL_READ_ROW_COUNT | 2 |
| NDB_API_EVENT_DATA_COUNT | 0 |
| NDB_API_EVENT_NONDATA_COUNT | 0 |
| NDB_API_EVENT_BYTES_COUNT | 0 |
+------------------------------------+----------------+
21 rows in set (0.09 sec)
Не все счётчики отображаются во всех четырёх наборах переменных состояния. Для счётчиков событий 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, соответствующих этому счётчику.
Таблица 21.61 Счётчики статистики API NDB
| Имя счётчика | Описание | Переменные состояния (по типу статистики):
|
|---|
WaitExecCompleteCount | Количество раз, когда поток был заблокирован в ожидании завершения выполнения операции. Включает все вызовы, а также неявные выполнимые операции для операций с BLOB и автоинкрементирования, невидимые для клиентов. | |
|---|---|---|
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 с момента последней перезагрузки.
Вы можете увидеть, как различные счетчики API NDB инкрементируются заданным 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)
Аналогично, вы можете увидеть изменения в счетчиках статистики API NDB, вызванные вставкой строки в 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, мы можем увидеть, что операции API NDB, реализующие запросCREATE TABLE, ожидали гораздо дольше (706871709 - 820705 = 706051004 наносекунды, или приблизительно 0,7 секунды) ответов от узлов данных, чем те, которые выполнялись запросомINSERT(707370418 - 706871709 = 498709 нс или примерно 0,0005 секунды). Время выполнения, указанное для этих запросов в клиенте mysql, примерно соответствует этим цифрам.На платформах без достаточной (наносекундной) разрешающей способности, небольшие изменения в значении счётчика API NDB
WaitNanosCount, вызванные SQL-запросами, выполняющимися очень быстро, могут не всегда быть видны в значенияхNdb_api_wait_nanos_count_session,Ndb_api_wait_nanos_count_slaveилиNdb_api_wait_nanos_count. Запрос
INSERTувеличил оба счётчика статистики API NDBReadRowCountиTransLocalReadRowCount, что отражается на увеличении значенийNdb_api_read_row_count_sessionиNdb_api_trans_local_read_row_count_session.
© 2025 Oracle
Licensed under the GPLv2 License.