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

box.stat.memtx()

memtx()

Показывает активность движка хранения memtx.

box.stat.memtx().data

data показывает, сколько памяти (в байтах) выделено для кортежей memtx:

  • data.garbage — объем неиспользуемой памяти, запланированной к освобождению (освобождается лениво при выделении памяти).

  • data.total — общий объем памяти, выделенной для кортежей данных. Включает data.read_view и data.garbage, а также кортежи, фактически хранящиеся в спейсах memtx.

  • data.read_view — объем памяти, удерживаемой для read view. Включает память, выделенную как для системных read view (снапшот, репликация), так и для пользовательских read view (только в EE-версии). Значение отлично от нуля только при наличии открытых read view.

    Чтобы получить список всех открытых read view, используйте box.read_view.list().

Пример:

tarantool> box.stat.memtx().data---- garbage: 0  total: 25334  read_view: 0...

box.stat.memtx().index

index показывает, сколько памяти (в байтах) выделено для индексации кортежей memtx:

  • index.read_view — объем памяти, удерживаемой для read view. Включает память, выделенную как для системных read view (снапшот, репликация), так и для пользовательских read view (только в EE-версии). Значение отлично от нуля только при наличии открытых read view.

    Чтобы получить список всех открытых read view, используйте box.read_view.list().

  • index.total — общий объем памяти, выделенной для индексации данных. Включает index.read_view и память, используемую для индексации кортежей, фактически хранящихся в спейсах memtx.

Пример:

tarantool> box.stat.memtx().index---- read_view: 0  total: 1032192...

box.stat.memtx().tx

tx показывает статистику менеджера транзакций memtx, который отвечает за транзакции (box.stat.memtx().tx.txn) и управление конкурентным доступом с несколькими версиями (box.stat.memtx().tx.mvcc).

  • box.stat.memtx().tx.txn показывает распределение памяти, связанное с транзакциями.

    Состоит из следующих разделов:

    • statementsинструкции транзакций. Например, если пользователь начинает транзакцию с space:replace{0, 1}, то внутри транзакции эта операция становится инструкцией данной транзакции.

    • user — память, выделенная пользователем в рамках текущей транзакции с помощью функции Tarantool C API box_txn_alloc().

    • system — память, выделенная для внутренних нужд (например, логов) и точек сохранения (savepoints).

      Для каждого раздела Tarantool предоставляет следующую статистику:

      • total — количество байтов, выделенных в memtx для всех транзакций в рамках данного раздела.
      • avg — среднее количество байтов, используемое одной транзакцией (равно total / количество открытых транзакций).
      • max — максимальное количество байтов, используемое одной транзакцией.
  • box.stat.memtx().tx.mvcc показывает распределение памяти, связанное с управлением конкурентным доступом с несколькими версиями (MVCC). MVCC отвечает за изоляцию транзакций. Он выявляет конфликты и гарантирует, что кортежи, не принадлежащие конкретному спейсу, но прочитанные (или потенциально читаемые) некоторой транзакцией, не были удалены.

    Состоит из следующих разделов:

    • trackers — память, выделенная для трекеров чтения транзакций. Как и в предыдущих разделах, Tarantool предоставляет суммарное, среднее и максимальное количество байтов, выделенных для трекеров на одну транзакцию.

    • conflicts — память, выделенная для конфликтов — сущностей, создаваемых при возникновении конфликтов транзакций. Как и в предыдущих разделах, Tarantool предоставляет суммарное, среднее и максимальное количество выделенных байтов.

    • tuples — память, выделенная для хранения кортежей. При использовании MVCC кортежи хранятся с помощью механизма stories (историй). Почти у каждого кортежа есть своя story. Даже кортежи в индексе могут иметь свои stories, поэтому может быть полезно разделять память, выделенную для кортежей, и память, выделенную для stories.

      Все хранимые кортежи делятся на три категории, для каждой из которых предоставляется статистика по памяти:

      • tracking — кортежи, которые не используются ни одной транзакцией напрямую, но MVCC использует их для отслеживания чтения транзакций.

      • used — кортежи, используемые активными транзакциями чтения-записи. Подробный пример приведен ниже.

      • read_view — кортежи, которые не используются активными транзакциями чтения-записи, но используются транзакциями только для чтения.

        Для каждой из трех категорий Tarantool предоставляет два блока статистики:

        • stories — для stories.
        • retained — для удерживаемых кортежей, которые не принадлежат ни одному индексу, но MVCC пока не позволяет их удалить.

        Для каждого блока Tarantool предоставляет следующую статистику:

        • count — количество stories или удерживаемых кортежей.
        • total — количество байтов, выделенных для stories или удерживаемых кортежей.

Пример

Этот пример иллюстрирует статистику по памяти для кортежей категории used в транзакции.

Кластер должен быть запущен с параметром database.use_mvcc_engine, установленным в значение true. Это включает MVCC, благодаря чему box.stat.memtx.tx().mvcc будет содержать ненулевые значения.

Следующий шаг — создать спейс с первичным индексом и начать транзакцию:

box.schema.space.create('test')box.space.test:create_index('pk')box.begin()box.space.test:replace{0, 0}box.space.test:replace{0, string.rep('a', 100)}box.space.test:replace{0, 1}box.space.test:replace{1, 1}box.space.test:replace{2, 1}

В приведенной выше транзакции три кортежа заменяются по ключу 0:

  • {0, 0}
  • {0, 'aa...aa'}
  • {0, 1}

MVCC считает все эти кортежи used, так как они принадлежат текущей транзакции. Также MVCC считает кортежи {0, 0} и {0, 'aa..aa'} retained, поскольку они не принадлежат ни одному индексу (в отличие от {0, 1}), но пока не могут быть удалены.

Вызов box.stat.memtx.tx() в этот момент вернет следующий результат:

tarantool> box.stat.memtx.tx()---- txn:    statements:      max: 720      avg: 720      total: 720    user:      max: 0      avg: 0      total: 0    system:      max: 916      avg: 916      total: 916  mvcc:    trackers:      max: 0      avg: 0      total: 0    conflicts:      max: 0      avg: 0      total: 0    tuples:      tracking:        stories:          count: 0          total: 0        retained:          count: 0          total: 0      used:        stories:          count: 6          total: 944        retained:          count: 2          total: 119      read_view:        stories:          count: 0          total: 0        retained:          count: 0          total: 0...

Обратите внимание на выделенные строки — это память, выделенная для кортежей категории used.