Кэш результатов запросов CedrusData#

Кэш результатов CedrusData ускоряет обработку повторяющихся SQL-запросов за счет сохранения и последующего переиспользования результатов запросов.

Ключевые особенности кэша результатов:

  1. Результаты запросов могут быть сохранены в памяти координатора или файловой системе.

  2. Кэширование может быть включено или отключено для индивидуальных запросов с помощью параметра сессии.

  3. TTL может быть задан как глобально для всех запросов, так и для индивидуальных запросов с помощью параметра сессии.

  4. CedrusData не осуществляет проверку актуальности результатов. Если данные, которые были использованы для выполнения запроса, были изменены после кэширования результата, но до истечения TTL, пользователь может получить устаревший результат.

Результат запроса будет сохранен в кэш при одновременном выполнении следующих условий:

  1. Кэширование включено с помощью параметра конфигурации cedrusdata.result-cache.enabled.

  2. Режим работы кэша cedrusdata.result-cache.mode (параметр сессии cedrusdata_result_cache_mode) имеет значение read_write.

  3. Запрос начинаются с ключевого слова SELECT.

  4. Запрос не обращается к каталогам system и JMX коннекторов.

  5. Кэш имеет достаточно свободного места для сохранения результата запроса.

  6. Результат запроса был прочитан полностью. Приложения могут читать только часть запроса для отображения некоторого количества первых записей. Если запрос был отменен до того, как все записи были прочитаны, результат не будет сохранен в кэш.

Результат запроса может быть прочитан из кэша при одновременном выполнении следующих условий:

  1. Кэширование включено с помощью параметра конфигурации cedrusdata.result-cache.enabled.

  2. Режим работы кэша cedrusdata.result-cache.mode (параметр сессии cedrusdata_result_cache_mode) имеет значение read_write или read.

  3. Кэш содержит результат запроса с идентичными 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

Задает режим работы кэша по умолчанию:

  1. read_write - допускает чтение результатов запроса из кэша, а так же запись результатов незакэшированного запроса в кэш.

  2. read - допускает чтение результатов запроса из кэша, но не записывает в кэш результаты незакэшированных запросов.

  3. 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

Задает место хранения закэшированных результатов:

  1. memory - результаты будут сохранены в памяти координатора. Обеспечивает максимальную производительность, но потребляет память координатора.

  2. 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#

Используется, когда значение 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. Задает размер буфера при записи результатов на диск. Более высокое значение снижает количество системных вызовов файловой системы, но увеличивает потребление памяти.