Вложенный модуль box.stat
Вложенный модуль box.stat
предоставляет доступ к статистике Tarantool’а по запросам и использованию сети.
Используйте box.stat()
, чтобы узнать среднее количество запросов в секунду и общее количество запросов с момента запуска с разбивкой по типу запроса.
Используйте box.stat.net()
, чтобы просмотреть статистику сетевой активности: количество отправленных и полученных байтов, количество соединений, а также количество активных запросов (текущее, среднее, общее).
Используйте box.stat.vinyl()
, чтобы просмотреть данные по работе движка базы данных vinyl, например: box.stat.vinyl().tx
содержит количество коммитов и откатов. Более подробную информацию см. в конце раздела.
Используйте box.stat.reset()
, чтобы сбросить статистику box.stat()
, box.stat.net()
, box.stat.vinyl()
и box.space.index.
В таблицах, которые возвращает box.stat()
:
total
обозначает «общее число запросов, обработанных в секунду, с момента запуска сервера»,rps
обозначает «среднее число запросов в секунду за последние 5 секунд».
«ERROR» – это счетчик запросов, которые завершились с ошибкой.
В таблицах, которые возвращает box.stat.net()
:
SENT.rps
иRECEIVED.rps
– это среднее количество отправленных/полученных байтов в секунду за последние 5 секундSENT.total
иRECEIVED.total
– общее число байтов, отправленных/полученных с момента запуска сервераCONNECTIONS.rps
– количество подключений, открытых в секунду, за последние 5 секундCONNECTIONS.total
– общее количество подключений, открытых с момента запуска сервераREQUESTS.current
– количество запросов, находящихся в обработке, которое может быть ограничено с помощью box.cfg.net_msg_maxREQUESTS.rps
– число запросов, обработанных в секунду, за последние 5 секундREQUESTS.total
– общее число запросов, обработанных с момента запуска сервера
tarantool> box.stat() -- вернуть 10 таблиц
---
- DELETE:
total: 1873949
rps: 123
SELECT:
total: 1237723
rps: 4099
INSERT:
total: 0
rps: 0
EVAL:
total: 0
rps: 0
CALL:
total: 0
rps: 0
REPLACE:
total: 1239123
rps: 7849
UPSERT:
total: 0
rps: 0
AUTH:
total: 0
rps: 0
ERROR:
total: 0
rps: 0
UPDATE:
total: 0
rps: 0
...
tarantool> box.stat().DELETE -- всего + запросов в секунду из одной таблицы
---
- total: 0
rps: 0
...
tarantool> box.stat.net() -- 4 таблицы
---
- SENT:
total: 0
rps: 0
CONNECTIONS:
current: 0
rps: 0
total: 0
REQUESTS:
current: 0
rps: 0
total: 0
RECEIVED:
total: 0
rps: 0
...
tarantool> box.stat.vinyl().tx.commit -- один пункт из таблицы vinyl
---
- 1047632
...
Ниже приводится подробная информация о пунктах в box.stat.vinyl()
.
Подробная информация о box.stat.vinyl().regulator: Регулятор vinyl’а определяет, когда следует предпринимать или отложить действия по дисковому вводу-выводу, путем группировки действий в пакеты так, чтобы обеспечить согласованность и эффективность. Регулятор вызывается планировщиком vinyl’а раз в секунду и обновляет соответствующие переменные при каждом вызове.
box.stat.vinyl().regulator.dump_bandwidth
представляет собой предполагаемую среднюю скорость создания дампов. Изначально она составляет 10 485 760 (10 мегабайтов в секунду). Только значительные дампы (более одного мегабайта) используются при оценке.box.stat.vinyl().regulator.dump_watermark
– это точка, когда должно произойти создание дампа. Это значение несколько меньше объема памяти, выделенного для деревьев в vinyl’е, которое указано в параметре vinyl_memory.box.stat.vinyl().regulator.write_rate
представляет собой действительную среднюю скорость записи последних данных на диск. Средняя скорость вычисляется в течение 5-секундного интервала, поэтому если за последние 5 секунд ничего не происходило, тоregulator.write_rate = 0
. Скоростьwrite_rate
может замедлиться во время создания дампа, или если пользователь задал предел snap_io_rate_limit.box.stat.vinyl().regulator.rate_limit
– это предел скорости записи в байтах в секунду, который налагается регулятором на основании установленной производительности создания дампов / слияния.
Подробная информация о box.stat.vinyl().disk: Поскольку vinyl является дисковым движком базы данных (в отличие от memtx’а, который представляет собой in-memory движок), он может обрабатывать большие базы данных – однако если база данных больше объема памяти, выделенного для vinyl’а, дисковых операций будет больше.
box.stat.vinyl().disk.data
иbox.stat.vinyl().disk.index
содержат объем данных, который поступил в файлы во вложенной директории vinyl_dir с именами вида{lsn}.run
и{lsn}.index
. Размер файла run зависит от выводаscheduler.dump_*
.box.stat.vinyl().disk.data_compacted
представляет собой общий размер данных, которые хранятся на последнем уровне LSM-дерева, в байтах. При этом не учитывается сжатие диска. Его можно рассматривать как размер места на диске, которое заняли бы пользовательские данные, если бы не было компрессии, индексирования или увеличения спейса, вызванного конструкцией LSM-дерева.
Подробная информация о box.stat.vinyl().memory: Хотя движок базы данных vinyl не является «in-memory», Tarantool’у всё же требуется память для записи буфера и для кэша:
box.stat.vinyl().memory.tuple_cache
содержит количество байтов, используемых для кортежей (данные).box.stat.vinyl().memory.tx
– это транзакционная память, как правило, равная 0.box.stat.vinyl().memory.level0
– это объем памяти уровня 0 «level0», который иногда сокращается до «L0» и представляет собой область, которую vinyl может использовать для хранения данных в оперативной памяти в LSM-дереве.
Таким образом, можно сказать, что «L0 заполняется», когда объем данных в memory.level0
приближается к максимальному, а именно regulator.dump_watermark. Можно ожидать, что «L0 = 0» сразу после создания дампа. Текущий объем в box.stat.vinyl().memory.page_index
и box.stat.vinyl().memory.bloom_filter
используется для структур, связанных с индексами. Размер – это количество и размер ключей плюс vinyl_page_size плюс vinyl_bloom_fpr. Это не счетчик совпадений по фильтру Блума (количество чтений, которых можно избежать, поскольку фильтра Блума предсказывает их наличие в файле типа run) – эта статистика указана в index_object:stat().
Подробная информация о box.stat.vinyl().tx: Информация о запросах, которые влияют на операции транзакций («tx» используется в качестве сокращения слова «транзакция»):
box.stat.vinyl().tx.conflict
содержит счетчик конфликтов, которые вызвали откат транзакции.box.stat.vinyl().tx.commit
– это счетчик коммитов (успешно завершенных транзакций). Он включает в себя неявные коммиты, например, любая вставка вызывает коммит, если она не входит в блок begin-end.box.stat.vinyl().tx.rollback
– это счетчик откатов (невыполненные транзакции). Это не просто счетчик явных запросов box.rollback(), он также включает в себя запросы, которые привели к ошибке. Например, после попытки вставки, в результате которой была выведена ошибка наличия дубликата ключа «Duplicate key exists in unique index», значение счетчикаtx.rollback
увеличивается.box.stat.vinyl().tx.statements
, как правило, будет равен 0.box.stat.vinyl().tx.transactions
содержит количество текущих транзакций.box.stat.vinyl().tx.gap_locks
представляет собой число блокировок разрывов во время выполнения запроса. Чтобы получить низкоуровневое описание имплементации блокировки разрывов в Tarantool’е, см. Блокировка разрывов в менеджере транзакций Vinyl’а.box.stat.vinyl().tx.read_views
показывает, получила ли транзакция статус только для чтения, во избежание временного конфликта. Как правило, 0.
Подробная информация о box.stat.vinyl().scheduler: В основном содержит счетчики, связанные с задачами планировщика по созданию дампов или слиянию: (большинство сбрасываются на 0 при перезапуске сервера или вызове box.stat.reset()):
box.stat.vinyl().scheduler.compaction_*
содержит объем данных из последних изменений, для которых было произведено compacted. Он подразделяется наscheduler.compaction_input
(объем данных текущего слияния),scheduler.compaction_queue
(объем данных в ожидании слияния),scheduler.compaction_time
(общее время, затраченное рабочими потоками на слияние, в секундах) иscheduler.compaction_output
(объем данных после слияния, который, предположительно, меньшеscheduler.compaction_input
).box.stat.vinyl().scheduler.tasks_*
содержит информацию о задачах по созданию дампов или слиянию, разделенную на три категории:scheduler.tasks_inprogress
(текущие),scheduler.tasks_completed
(успешно завершенные)scheduler.tasks_failed
(прерванные из-за ошибки).box.stat.vinyl().scheduler_dump_*
содержит объем данных из последних изменений, для которых был создан дамп, включаяdump_time
(общее время, затраченное рабочими потоками на создание дампов, в секундах) иdump_count
(счетчик созданных дампов),dump_input
иdump_output
.Понятие «дамп» (dump) объясняется в разделе Хранение данных с помощью vinyl:
Рано или поздно количество элементов в дереве превысит размер L0. Тогда L0 записывается в файл на диске (который называется забегом – „run“) и освобождается под новые элементы. Эта операция называется „дамп“ (dump).
Таким образом, можно предсказать создание дампа, если размер L0 (указан в memory.level0) приближается к максимальному (указан в regulator.dump_watermark), и создание дампа еще не началось. На самом деле Tarantool планирует дамп до достижения предела.
Дамп также создается во время операции создания снимка.