box.stat.memtx()
Показывает активность движка хранения memtx.
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: 0total: 25334read_view: 0...
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: 0total: 1032192...
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: 720avg: 720total: 720user:max: 0avg: 0total: 0system:max: 916avg: 916total: 916mvcc:trackers:max: 0avg: 0total: 0conflicts:max: 0avg: 0total: 0tuples:tracking:stories:count: 0total: 0retained:count: 0total: 0used:stories:count: 6total: 944retained:count: 2total: 119read_view:stories:count: 0total: 0retained:count: 0total: 0...
Обратите внимание на выделенные строки — это память, выделенная для
кортежей категории used.