Версия:

Вложенный модуль box.stat

Вложенный модуль box.stat

Вложенный модуль box.stat предоставляет доступ к статистике Tarantool’а по запросам и использованию сети.

Используйте box.stat(), чтобы узнать среднее количество запросов в секунду и общее количество запросов с момента запуска с разбивкой по типу запроса.

Используйте box.stat(), чтобы просмотреть статистику сетевой активности: количество отправленных и полученных пакетов, а также общее количество запросов в секунду.

Используйте box.stat.vinyl(), чтобы просмотреть данные по работе движка базы данных vinyl, например: box.stat.vinyl().tx содержит количество коммитов и откатов. Более подробную информацию см. в конце раздела.

Используйте box.stat.reset(), чтобы сбросить статистику box.stat(), box.stat.net(), box.stat.vinyl() и box.space.index.

In the tables that box.stat() and box.stat.net() return: rps stands for «[average number of] requests per second [in the last 5 seconds]», total stands for «total [number processed since the server began]», current stands for «[number of] current [requests in progress, which can be limited by box.cfg.net_msg_max]». «ERROR» is the count of requests that resulted in an error.

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 используется для структур, связанных с индексами. Размер – это количество и размер ключей плюс page_size плюс 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_* содержит объем данных из последних изменений, для которых было произведено слияние. Он подразделяется на 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 планирует дамп до достижения предела.

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