Вложенный модуль 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 планирует дамп до достижения предела.
Дамп также создается во время операции создания снимка.