Модуль cooler¶
Доступно с версии 3.0.0.
Модуль cooler
предоставляет методы для работы с архивацией данных – переносом устаревших кортежей из спейсов memtx в
спейсы vinyl на основе времени жизни кортежей.
Модуль поддерживает:
DDL-операции по созданию спейса vinyl;
задание архивации в миграциях;
просмотр состояния и статистики архивации.
Подробную информацию об архивации данных и пример ее использования можно найти в разделе Архивация данных по их времени жизни.
cooler.init()¶
Инициализировать модуль. Метод вызывается по умолчанию при применении в конфигурации технологической роли roles.cooler.
Параметры: нет
Возвращает: нет
cooler.is_inited()¶
Проверить, была ли выполнена инициализация модуля.
Параметры: нет
Возвращает: true
, если модуль инициализирован, иначе false
cooler.setup(memtx_space_name, options)¶
Настроить архивацию для указанного спейса memtx.
Параметры:
memtx_space_name
(string) – имя спейса memtx;options
(table) – опции архивации:is_cooled_fun_name
(string) – имя хранимой функции-предиката для проверки условия архивации. Значение по умолчанию:<memtx_space_name>_is_cooled
;vinyl_space_name
(string) – имя архивного спейса vinyl. Значение по умолчанию:<memtx_space_name>_cold
;vinyl_params
(table) – параметры спейса vinyl, в частности:bloom_fpr
– коэффициент ложноположительного срабатывания фильтра Блума. Чем ниже значение, тем точнее фильтр, но больше потребление памяти. Значение по умолчанию: 0.05;page_size
– размер страницы при чтении и записи в байтах. Значение по умолчанию: 8192;range_size
– максимальный размер диапазона по умолчанию (в байтах);run_count_per_level
– максимальное количество.run
-файлов на каждом уровне LSM-дерева. Чем больше значение, тем шире LSM-дерево. Значение по умолчанию: 2;run_size_ratio
– соотношение между размерами уровней в LSM-дереве. Чем меньше значение, тем выше LSM-дерево. Значение по умолчанию: 3.5.
Полный список доступных параметров и их подробное описание приведены в документации Tarantool.
Возвращает: нет
Пример:
cooler.setup('user_sessions', {
is_cooled_fun_name = 'user_sessions_is_cooled',
vinyl_space_name = 'user_sessions_vinyl',
vinyl_params = {
bloom_fpr = 0.1,
page_size = 32 * 1024,
run_count_per_level = 8,
run_size_ratio = 4,
},
})
cooler.resetup(memtx_space_name)¶
Пересоздать архивный vinyl-спейс для спейса memtx, в котором был изменен формат. При этом:
старый vinyl-спейс будет переименован в
<vinyl_space_name>_<N>
, гдеN
– счётчик переименований, начинающийся с 1;новый vinyl-спейс будет создан с актуальным форматом и теми же параметрами.
Если форматы спейсов совместимы, функция завершается ошибкой.
Параметры:
memtx_space_name
(string) – имя спейса memtx.
Возвращает: нет
Пример:
-- Создание memtx-спейса
box.schema.space.create('user_sessions', {
engine = 'memtx',
format = {
{ name = 'id', type = 'unsigned' },
{ name = 'status', type = 'string' },
}
})
-- Настройка архивации
cooler.setup('user_sessions', {
vinyl_space_name = 'user_sessions_vinyl',
})
-- Смена формата memtx-спейса (несовместимое изменение)
box.space.user_sessions:format({
{ name = 'id', type = 'unsigned' },
{ name = 'status', type = 'string' },
{ name = 'last_updated', type = 'unsigned', is_nullable = true },
})
-- Повторное создание vinyl-спейса
cooler.resetup('user_sessions')
В результате:
Спейс
user_sessions_vinyl
переименован вuser_sessions_vinyl_1
;Создан новый спейс
user_sessions_vinyl
с теми же опциями и актуальным форматом.
cooler.set_func(memtx_space_name, expr_code)¶
Создать функцию-предикат для проверки условия архивации с именем <memtx_space_name>_is_cooled
.
Параметры:
memtx_space_name
(string) – имя спейса memtx;expr_code
(string) – строка с выражением Lua, которое возвращаетtrue
, если кортеж должен быть архивирован. Для доступа к кортежу в выражении используется переменнаяt
.
Возвращает: нет
Пример
В примере созданы функции requests_is_cooled
и events_is_cooled
:
cooler.set_func('requests', "t.status == '200'")
cooler.set_func('events', "t.last_updated < require('clock').time() - 172800") -- 2 дня
cooler.stats(memtx_space_name, index_name)¶
Вернуть статистику архивации для текущего полного прохода по спейсу.
Если параметры не указаны, возвращается статистика по всем архивируемым спейсам и индексам.
Если указан только параметр memtx_space_name
, вернется статистика по всем индексам указанного спейса.
Если указаны оба параметра, вернется статистика по конкретному индексу.
Параметры:
memtx_space_name
(string) – имя спейса memtx;index_name
(string) – имя индекса, по которому выполняется архивация.
Возвращает:
scan_elapsed
(number) – время с начала полного прохода в секундах;tuples_cooled
(number) – количество архивированных кортежей за текущий проход по спейсу;bytes_cooled
(number) – объем архивированных данных в байтах за текущий проход по спейсу;tuples_scanned
(number) – количество просканированных кортежей за текущий проход по спейсу;bytes_scanned
(number) – объем просканированных данных в байтах за текущий проход по спейсу;avg_rate
(number) – средняя скорость архивации (кортежи в секунду);avg_bytes_rate
(number) – средняя скорость архивации (байты в секунду);tuples_remaining
(number) – оценка оставшихся кортежей до завершения прохода;eta
(number) – оценка времени до завершения прохода в секундах;mismatch_count
(number) – количество несовпадений при проверке кортежей memtx в ходе их переноса в спейс vinyl. После переноса кортежа в спейс vinyl и до его удаления из спейса memtx эти кортежи сравниваются между собой. Если во время переноса кортеж memtx был изменен, в vinyl остаётся предыдущая версия кортежа. В этом случае значениеcooler_mismatches
увеличивается на 1;errors_count
(number) – количество ошибок, возникших во время архивации.
Пример:
-- Статистика по всем архивируемым спейсам
local all_stats = cooler.stats()
-- Результат:
-- {
-- sessions = {
-- primary = { ... },
-- secondary = { ... },
-- },
-- events = { ... },
-- }
-- Статистика архивации спейса sessions
local sessions_stats = cooler.stats('sessions')
-- Результат:
-- {
-- primary = { ... },
-- secondary = { ... },
-- }
-- Статистика архивации спейса sessions по первичному индексу primary
local sessions_primary_stats = cooler.stats('sessions', 'primary')
-- Результат:
-- {
-- scan_elapsed = ...,
-- tuples_cooled = ...,
-- bytes_cooled = ...,
-- ...
-- }
cooler.info(memtx_space_name)¶
Вернуть информацию о параметрах архивирования для спейса.
Если параметр не указан, возвращается информация по всем архивируемым спейсам.
Если параметр memtx_space_name
указан, вернется информация по указанному спейсу.
Параметры:
memtx_space_name
(string) – имя спейса memtx;
Возвращает:
memtx_space
(string) – имя спейса memtx;memtx_tuples_count
(number) – количество кортежей в спейсе memtx;vinyl_space
(string) – имя спейса vinyl;vinyl_params
(table) – параметры спейса vinyl (см. параметры в cooler.setup(memtx_space_name, options)). Полный список доступных параметров vinyl и их подробное описание приведены в документации Tarantool;vinyl_tuples_count
(number) – количество кортежей в спейсе vinyl;vinyl_bytes_count
(number) – размер спейса vinyl в байтах;is_cooled_fun
(string) – имя функции-предиката для проверки условия архивации;cooling_indexes
(table) – имена индексов, по которым выполняется архивация;resetup_count
(number) – количество вызовов метода cooler.resetup() для спейса.
Пример:
-- Информация по всем архивируемым спейсам
local all_info = cooler.info()
-- Результат:
-- {
-- sessions = { ... },
-- events = { ... },
-- }
-- Информация по архивации спейса sessions
local sessions_info = cooler.info('sessions')
-- Результат:
-- {
-- memtx_space = 'sessions',
-- memtx_tuples_count = 100,
-- vinyl_space = 'sessions_cold',
-- ...
-- }