Кэш результатов запросов CedrusData#
Кэш результатов CedrusData ускоряет обработку повторяющихся SQL-запросов за счет сохранения и последующего переиспользования результатов запросов.
Ключевые особенности кэша результатов:
Результаты запросов могут быть сохранены в памяти координатора или файловой системе.
Кэширование может быть включено или отключено для индивидуальных запросов с помощью параметра сессии.
TTL может быть задан как глобально для всех запросов, так и для индивидуальных запросов с помощью параметра сессии.
CedrusData не осуществляет проверку актуальности результатов. Если данные, которые были использованы для выполнения запроса, были изменены после кэширования результата, но до истечения TTL, пользователь может получить устаревший результат.
Результат запроса будет сохранен в кэш при одновременном выполнении следующих условий:
Кэширование включено с помощью параметра конфигурации
cedrusdata.result-cache.enabled
.Режим работы кэша
cedrusdata.result-cache.mode
(параметр сессииcedrusdata_result_cache_mode
) имеет значениеread_write
.Запрос начинаются с ключевого слова
SELECT
.Кэш имеет достаточно свободного места для сохранения результата запроса.
Результат запроса был прочитан полностью. Приложения могут читать только часть запроса для отображения некоторого количества первых записей. Если запрос был отменен до того, как все записи были прочитаны, результат не будет сохранен в кэш.
Результат запроса может быть прочитан из кэша при одновременном выполнении следующих условий:
Кэширование включено с помощью параметра конфигурации
cedrusdata.result-cache.enabled
.Режим работы кэша
cedrusdata.result-cache.mode
(параметр сессииcedrusdata_result_cache_mode
) имеет значениеread_write
илиread
.Кэш содержит результат запроса с идентичными SQL, текущими каталогом и схемой, который был запущен текущим пользователем.
Кэш может быть очищен с помощью процедуры system.cedrusdata.clear_result_cache
:
CALL system.cedrusdata.clear_result_cache();
Статистики работы кэша доступны через JMX-бин trino.cedrus.resultcache:name=resultcache
. Например:
SELECT * FROM jmx.current."trino.cedrus.resultcache:name=resultcache";
Статистики работы кэша могут быть очищены с помощью процедуры system.cedrusdata.reset_result_cache_stats
:
CALL system.cedrusdata.reset_result_cache_stats();
cedrusdata.result-cache.enabled
#
Тип: boolean
Значение по умолчанию:
false
Включает кэш результатов.
cedrusdata.result-cache.mode
#
Тип: string
Допустимые значения:
read_write
,read
,disabled
Значение по умолчанию:
read_write
Задает режим работы кэша по умолчанию:
read_write
- допускает чтение результатов запроса из кэша, а также запись результатов незакэшированного запроса в кэш.read
- допускает чтение результатов запроса из кэша, но не записывает в кэш результаты незакэшированных запросов.disabled
- не использовать кэш результатов.
Можно задать режим работы для конкретного запроса с помощью параметра сессии cedrusdata_result_cache_mode
. Например:
SET SESSION cedrusdata_result_cache_mode = 'disabled';
cedrusdata.result-cache.ttl
#
Тип: duration
Минимальное значение:
1s
(одна секунда)Значение по умолчанию:
1h
(один час)
Задает TTL закэшированного результата.
Можно задать TTL для конкретного запроса с помощью параметра сессии cedrusdata_result_cache_ttl
. Например:
SET SESSION cedrusdata_result_cache_ttl = '24h';
cedrusdata.result-cache.max-entry-count
#
Тип: integer
Минимальное значение:
1
Значение по умолчанию:
Integer.MAX_VALUE
Задает максимальное количество закэшированных результатов. При достижении предельного значения новые результаты не будут подлежать кэшированию. Кэширование результатов будет возобновлено после удаления устаревших записей из кэша или при полной очистке кэша.
cedrusdata.result-cache.store.type
#
Тип: string
Допустимые значения:
memory
,file
Значение по умолчанию:
memory
Задает место хранения закэшированных результатов:
memory
- результаты будут сохранены в памяти координатора. Обеспечивает максимальную производительность, но потребляет память координатора.file
- результаты будут сохранены в директории файловой системы. В настоящее время поддерживается только работа с локальной файловой системой координатора. В следующих версиях будет добавлена поддержка работы с распределенными файловыми системами.
cedrusdata.result-cache.store.memory.max-size
#
Тип: data size
Минимальное значение:
1MB
(один мегабайт)Значение по умолчанию:
1GB
(один гигабайт)
Используется, когда значение cedrusdata.result-cache.store.type
равно memory
.
Максимальный размер кэша в памяти.
При достижении предельного размера кэширование прекращается до тех пор, пока не появится свободное место в соответствии с TTL закэшированных записей.
Используйте процедуру system.cedrusdata.clear_result_cache
для форсированной очистки кэша.
cedrusdata.result-cache.store.file.max-size
#
Тип: data size
Минимальное значение:
1MB
(один мегабайт)Значение по умолчанию:
100GB
(сто гигабайт)
Используется, когда значение cedrusdata.result-cache.store.type
равно file
.
Максимальный размер кэша на диске.
При достижении предельного размера кэширование прекращается до тех пор, пока не появится свободное место в соответствии с TTL закэшированных записей.
Используйте процедуру system.cedrusdata.clear_result_cache
для форсированной очистки кэша.
cedrusdata.result-cache.store.file.path
#
Тип: string
Используется, когда значение cedrusdata.result-cache.store.type
равно file
.
Задает путь к директории, в которой будут сохранены закэшированные результаты запросов.
Путь должен быть указан в формате URL.
В настоящий момент поддерживается работа только с локальной файловой системой, поэтому путь должен начинаться с file:///
.
cedrusdata.result-cache.store.file.read-buffer-size
#
Тип: data size
Минимальное значение:
1kB
(один килобайт)Максимальное значение:
1MB
(один мегабайт)Значение по умолчанию:
16kB
(шестнадцать килобайт)
Используется, когда значение cedrusdata.result-cache.store.type
равно file
.
Задает размер буфера при чтении результатов с диска.
Более высокое значение снижает количество системных вызовов файловой системы, но увеличивает потребление памяти.
cedrusdata.result-cache.store.file.write-buffer-size
#
Тип: data size
Минимальное значение:
1kB
(один килобайт)Максимальное значение:
1MB
(один мегабайт)Значение по умолчанию:
16kB
(шестнадцать килобайт)
Используется, когда значение cedrusdata.result-cache.store.type
равно file
.
Задает размер буфера при записи результатов на диск.
Более высокое значение снижает количество системных вызовов файловой системы, но увеличивает потребление памяти.