Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

box.stat.vinyl()

vinyl()

Показывает активность движка хранения vinyl, например box.stat.vinyl().tx содержит количество коммитов и откатов.

Пример:

tarantool> box.stat.vinyl().tx.commit -- one item of the vinyl table---- 1047632...

box.stat.vinyl().disk

Поскольку vinyl является дисковым движком хранения (в отличие от memtx, который является движком хранения в оперативной памяти), он может обрабатывать большие базы данных — но если база данных превышает объем памяти, выделенной для 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.tuple — размер памяти (в байтах), занимаемой всеми выделенными кортежами. Включает кэшированные кортежи и кортежи, на которые есть ссылки в Lua.

  • box.stat.vinyl().memory.tx — транзакционная память. Обычно это значение равно 0.

  • box.stat.vinyl().memory.level0 — область памяти «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().regulator

Регулятор vinyl определяет, когда выполнять или откладывать операции дискового ввода-вывода, группируя активность в пакеты для обеспечения согласованности и эффективности. Регулятор вызывается планировщиком vinyl раз в секунду и обновляет связанные переменные при каждом вызове.

  • box.stat.vinyl().regulator.dump_bandwidth — оценочная средняя скорость выполнения дампов. Изначально это значение равно 10485760 (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().regulator.blocked_writers — количество файберов, заблокированных в ожидании квоты на память L0 vinyl.

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.

    Понятие «дамп» описано в разделе Storing data with vinyl:

    Рано или поздно количество элементов в LSM-дереве превышает размер L0, после чего L0 записывается в файл на диске (называемый «run»), а затем очищается для хранения новых элементов. Эта операция называется «дампом».

    Таким образом, можно предсказать, что дамп произойдет, если размер L0 (который отображается в memory.level0) приближается к максимуму (которым является regulator.dump_watermark) и дамп еще не выполняется. На практике Tarantool старается организовать дамп до достижения этого жесткого ограничения.

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

box.stat.vinyl().tx

Здесь содержится информация о запросах, влияющих на транзакционную активность («tx» здесь — сокращение от «transaction»):

  • 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 — количество активных блокировок интервалов (gap locks) во время выполнения запроса. Описание реализации блокировки интервалов в Tarantool на низком уровне см. в Gap locks in Vinyl transaction manager.
  • box.stat.vinyl().tx.read_views — показывает, перешла ли транзакция в состояние только для чтения, чтобы временно избежать конфликта. Обычно это значение равно 0.