Вложенный модуль box.stat | Tarantool
Документация на русском языке
поддерживается сообществом

Вложенный модуль 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_max
  • REQUESTS.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 планирует дамп до достижения предела.

    Дамп также создается во время операции создания снимка.

Нашли ответ на свой вопрос?
Обратная связь