Кэш метаданных
Этот документ относится к версиям до 4.1.x.
В Doris 4.1.x и более поздних версиях кэш внешних метаданных переработан и использует единые параметры конфигурации meta.cache.*. См. раздел «Кэш метаданных» в документации по каждому Catalog.
Чтобы повысить производительность доступа к внешним источникам данных, Apache Doris кэширует их метаданные.
Метаданные включают сведения о базах данных, таблицах, столбцах, партициях, снимках, списках файлов и т. д.
В этой статье подробно описаны типы кэшируемых метаданных, стратегии кэширования и соответствующие параметры конфигурации для прежних версий (до 4.1).
Информацию о кэше данных см. в документации по кэшу данных.
Об ограничениях памяти для кэша внешних метаданных в Doris 4.1.4 см. в разделе Управление памятью кэша внешних метаданных.
Стратегии кэширования
Для большинства кэшей используются следующие три параметра стратегии:
-
Максимальное число объектов в кэше
Максимальное число объектов, которое может храниться в кэше. Например, можно кэшировать до 1000 таблиц. Когда число объектов в кэше превышает пороговое значение, часть из них удаляется по стратегии LRU (Least-Recent-Used).
-
Время вытеснения
-
До версии 3.0.6 включительно:
Через определённое время после записи объекта в кэш он автоматически удаляется из кэша. При следующем обращении актуальная информация будет повторно получена из источника данных, а кэш обновится.
Например, пользователь впервые обращается к таблице A в 08:00, и она записывается в кэш. Если время вытеснения составляет 4 часа, то в период 08:00-14:00 пользователь будет обращаться непосредственно к таблице A в кэше, если только она не будет вытеснена из-за нехватки места. После 14:00 объект удаляется из кэша. Если пользователь снова обратится к таблице A, актуальная информация будет получена из источника данных, а кэш обновится.
-
Начиная с версии 3.0.7 включительно:
Начиная с версии 3.0.7, эта стратегия изменена: объект автоматически удаляется из кэша через определённое время после обращения к нему, а не после его записи в кэш. При каждом обращении к объекту в кэше таймер сбрасывается, благодаря чему часто используемые объекты остаются в кэше.
Например, пользователь впервые обращается к таблице A в 08:00, и она записывается в кэш. Если время вытеснения составляет 4 часа, то в период 08:00-14:00 пользователь будет обращаться непосредственно к таблице A в кэше, если только она не будет вытеснена из-за нехватки места. Предположим, пользователь снова обращается к этому объекту в 09:00. Тогда время вытеснения будет отсчитываться заново с 09:00, то есть объект будет удалён в 15:00.
-
-
Минимальное время до обновления
Через определённое время после записи объекта в кэш автоматически запускается его обновление.
Например, пользователь впервые обращается к таблице A в 08:00, и она записывается в кэш. Если минимальное время до обновления составляет 10 минут, то в период 08:00-8:10 пользователь будет обращаться непосредственно к таблице A в кэше, если только она не будет вытеснена из-за нехватки места. В 08:10 объект в кэше будет помечен как [готовый к обновлению]. При следующем обращении пользователя к этому объекту по-прежнему будет возвращён текущий объект, но одновременно запустится обновление кэша. Предположим, обновление кэша занимает 1 минуту. Тогда через 1 минуту обращение к кэшу вернёт уже обновлённый объект.
Обратите внимание: обновление кэша запускается [при первом обращении к объекту в кэше после истечения минимального времени до обновления] и выполняется асинхронно. Поэтому, например, минимальное время до обновления в 10 минут не означает, что через 10 минут будет получен актуальный объект.
Эта стратегия отличается от [времени вытеснения]: она в основном регулирует актуальность кэша и позволяет избежать блокировки текущей операции благодаря асинхронному обновлению.
Типы кэшей
В следующих разделах описаны типичные настройки по умолчанию на уровне FE и параметры управления кэшем прежних версий. Их не следует считать полной матрицей элементов кэша для Doris 4.1.x+.
| Категория | Область действия | Основные настройки FE по умолчанию | Примечания |
|---|---|---|---|
| Списки имён баз данных / таблиц | Для каждого Catalog / для каждой базы данных | external_cache_expire_time_seconds_after_access, external_cache_refresh_time_minutes | Используются в SHOW DATABASES / SHOW TABLES |
| Объекты баз данных / таблиц | Для каждого Catalog / для каждой базы данных | max_meta_object_cache_num, external_cache_expire_time_seconds_after_access, external_cache_refresh_time_minutes | Кэш объектов может временно расходиться с кэшем списков имён |
| Схема таблицы | Для каждого Catalog | max_external_schema_cache_num, external_cache_expire_time_seconds_after_access, external_cache_refresh_time_minutes | Параметр переопределения для отдельного Catalog в прежних версиях: schema.cache.ttl-second |
| Значения партиций Hive | Для каждого Hive Catalog | max_hive_partition_table_cache_num, external_cache_expire_time_seconds_after_access, external_cache_refresh_time_minutes | Параметр переопределения для отдельного Catalog в прежних версиях: partition.cache.ttl-second |
| Свойства партиций Hive | Для каждого Hive Catalog | max_hive_partition_cache_num, external_cache_expire_time_seconds_after_access | В прежних версиях нет параметра переопределения TTL для отдельного Catalog |
| Списки файлов Hive | Для каждого Hive Catalog | max_external_file_cache_num, external_cache_expire_time_seconds_after_access, external_cache_refresh_time_minutes | Параметр переопределения для отдельного Catalog в прежних версиях: file.meta.cache.ttl-second |
| Метаданные уровня таблицы Hudi / Iceberg / Paimon в прежних версиях | Для каждого Catalog | max_external_table_cache_num, external_cache_expire_time_seconds_after_access, external_cache_refresh_time_minutes | Для Doris 4.1.x+ сведения о текущих элементах кэша, таких как fs_view, meta_client, view и manifest, см. на страницах соответствующих Catalog |
Списки имён баз данных и таблиц
Список имён баз данных содержит имена всех баз данных в Catalog.
Список имён таблиц содержит имена всех таблиц в базе данных.
Список имён используется только для операций, которым требуется перечисление имён, например для операторов SHOW TABLES или SHOW DATABASES.
У каждого Catalog есть кэш списка имён баз данных. У каждой базы данных есть кэш списка имён таблиц.
-
Максимальное число объектов в кэше
В каждом кэше хранится только одна запись. Поэтому максимальное число объектов в кэше равно 1.
-
Время вытеснения
Фиксированное значение: 86400 секунд. Начиная с версии 3.0.7 задаётся параметром FE
external_cache_expire_time_seconds_after_access, значение по умолчанию составляет 86400 секунд. -
Минимальное время до обновления
Задаётся параметром конфигурации FE
external_cache_expire_time_minutes_after_accessв минутах. Значение по умолчанию составляет 10 минут. Уменьшение этого времени позволяет быстрее видеть в Doris актуальный список имён, но повышает частоту обращений к внешним источникам данных.Начиная с версии 3.0.7 параметр конфигурации переименован в
external_cache_refresh_time_minutes. Значение по умолчанию не изменилось.
Объекты баз данных и таблиц
Кэширует отдельные объекты баз данных и таблиц. Любая операция обращения к базе данных или таблице, например запрос, запись и т. д., получает соответствующий объект из этого кэша.
Обратите внимание: список объектов в этом кэше может не совпадать с кэшем списков имён баз данных и таблиц.
Например, с помощью команды SHOW TABLES вы получаете из кэша списка имён таблицы A, B и C. Предположим, в этот момент во внешний источник данных добавляется таблица D. Тогда SELECT * FROM D сможет обратиться к таблице D, и в кэш [объектов таблиц] будет добавлен объект таблицы D, однако в кэше [списка имён таблиц] по-прежнему могут оставаться A, B, C. Только после обновления кэша [списка имён таблиц] в нём появятся A, B, C, D.
У каждого Catalog есть кэш объектов баз данных. У каждой базы данных есть кэш объектов таблиц.
-
Максимальное число объектов в кэше
Задаётся параметром конфигурации FE
max_meta_object_cache_num, значение по умолчанию составляет 1000. Этот параметр можно настроить в соответствии с числом баз данных в одном Catalog или числом таблиц в одной базе данных. -
Время вытеснения
Фиксированное значение: 86400 секунд. Начиная с версии 3.0.7 задаётся параметром FE
external_cache_expire_time_seconds_after_access, значение по умолчанию составляет 86400 секунд. -
Минимальное время до обновления
Задаётся параметром конфигурации FE
external_cache_expire_time_minutes_after_accessв минутах. Значение по умолчанию составляет 10 минут. Уменьшение этого времени позволяет быстрее видеть в Doris актуальную базу данных или таблицу, но повышает частоту обращений к внешним источникам данных.Начиная с версии 3.0.7 параметр конфигурации переименован в
external_cache_refresh_time_minutes. Значение по умолчанию не изменилось.
Схема таблицы
Кэширует информацию о схеме таблиц, например имена столбцов. Этот кэш в основном используется для загрузки схем таблиц по мере обращения к ним, чтобы не синхронизировать множество ненужных схем таблиц и не занимать память FE.
Этот кэш управляется отдельно для каждого Catalog.
-
Максимальное число объектов в кэше
Задаётся параметром конфигурации FE
max_external_schema_cache_num, значение по умолчанию составляет 10000.Этот параметр можно настроить в соответствии с общим числом таблиц в Catalog.
-
Время вытеснения
Фиксированное значение: 86400 секунд. Начиная с версии 3.0.7 задаётся параметром FE
external_cache_expire_time_seconds_after_access, значение по умолчанию составляет 86400 секунд. -
Минимальное время до обновления
Задаётся параметром конфигурации FE
external_cache_expire_time_minutes_after_accessв минутах. Значение по умолчанию составляет 10 минут. Уменьшение этого времени позволяет быстрее видеть в Doris актуальную схему, но повышает частоту обращений к внешним источникам данных.Начиная с версии 3.0.7 параметр конфигурации переименован в
external_cache_refresh_time_minutes. Значение по умолчанию не изменилось.
Список партиций таблиц Hive Metastore
Используется для кэширования списка партиций таблиц, синхронизируемого из Hive Metastore. Список партиций используется для отсечения партиций при выполнении запросов.
У каждого Hive Catalog есть такой кэш.
-
Максимальное число объектов в кэше
Задаётся параметром конфигурации FE
max_hive_partition_table_cache_num, значение по умолчанию составляет 1000.Этот параметр можно настроить в соответствии с общим числом таблиц в Catalog.
-
Время вытеснения
Фиксированное значение: 28800 секунд. Начиная с версии 3.0.7 задаётся параметром FE
external_cache_expire_time_seconds_after_access, значение по умолчанию составляет 86400 секунд. -
Минимальное время до обновления
Задаётся параметром конфигурации FE
external_cache_expire_time_minutes_after_accessв минутах. Значение по умолчанию составляет 10 минут. Уменьшение этого времени позволяет быстрее видеть в Doris актуальный список партиций, но повышает частоту обращений к внешним источникам данных.Начиная с версии 3.0.7 параметр конфигурации переименован в
external_cache_refresh_time_minutes. Значение по умолчанию не изменилось.
Свойства партиций таблиц Hive Metastore
Используется для кэширования свойств каждой партиции таблицы Hive, таких как формат файлов, корневой путь партиции и т. д. При выполнении каждого запроса после отсечения партиций и получения списка партиций, к которым нужно обратиться, подробные свойства каждой партиции извлекаются из этого кэша.
У каждого Hive Catalog есть такой кэш.
-
Максимальное число объектов в кэше
Задаётся параметром конфигурации FE
max_hive_partition_cache_num, значение по умолчанию составляет 10000.Этот параметр можно настроить в соответствии с общим числом партиций в Catalog, к которым требуется обращаться.
-
Время вытеснения
Фиксированное значение: 28800 секунд. Начиная с версии 3.0.7 задаётся параметром FE
external_cache_expire_time_seconds_after_access, значение по умолчанию составляет 86400 секунд. -
Минимальное время до обновления
Задаётся параметром конфигурации FE
external_cache_expire_time_minutes_after_accessв минутах. Значение по умолчанию составляет 10 минут. Уменьшение этого времени позволяет быстрее видеть в Doris актуальные свойства партиций, но повышает частоту обращений к внешним источникам данных.Начиная с версии 3.0.7 параметр конфигурации переименован в
external_cache_refresh_time_minutes. Значение по умолчанию не изменилось.
Список файлов партиций таблиц Hive Metastore
Используется для кэширования информации о списке файлов в отдельной партиции таблицы Hive. Этот кэш позволяет снизить накладные расходы на операции List файловой системы.
-
Максимальное число объектов в кэше
Задаётся параметром конфигурации FE
max_external_file_cache_num, значение по умолчанию составляет 10000.Этот параметр можно настроить в соответствии с числом файлов, к которым требуется обращаться.
-
Время вытеснения
Значение по умолчанию составляет 28800 секунд. Начиная с версии 3.0.7 задаётся параметром FE
external_cache_expire_time_seconds_after_access, значение по умолчанию составляет 86400 секунд.Если в свойствах Catalog задано свойство
file.meta.cache.ttl-second, используется указанное в нём время.В некоторых случаях файлы данных таблиц Hive часто меняются, и кэш не обеспечивает необходимую актуальность. Можно установить для этого параметра значение 0, чтобы отключить кэш. В этом случае список файлов будет получаться в реальном времени для каждого запроса, что может снизить производительность, но повысит актуальность сведений о файлах.
-
Минимальное время до обновления
Задаётся параметром конфигурации FE
external_cache_expire_time_minutes_after_accessв минутах. Значение по умолчанию составляет 10 минут. Уменьшение этого времени позволяет быстрее видеть в Doris актуальный список файлов, но повышает частоту обращений к внешним источникам данных.Начиная с версии 3.0.7 параметр конфигурации переименован в
external_cache_refresh_time_minutes. Значение по умолчанию не изменилось.
Партиции таблиц Hudi
Краткое описание кэширования метаданных партиций Hudi в прежних версиях.
Текущие элементы кэша Hudi в Doris 4.1.x+ также включают fs_view и meta_client; см. Hudi Catalog.
У каждого Hudi Catalog есть такой кэш.
-
Максимальное число объектов в кэше
Задаётся параметром конфигурации FE
max_external_table_cache_num, значение по умолчанию составляет 1000.Этот параметр можно настроить в соответствии с числом таблиц Hudi.
-
Время вытеснения
Фиксированное значение: 28800 секунд. Начиная с версии 3.0.7 задаётся параметром FE
external_cache_expire_time_seconds_after_access, значение по умолчанию составляет 86400 секунд. -
Минимальное время до обновления
Задаётся параметром конфигурации FE
external_cache_expire_time_minutes_after_accessв минутах. Значение по умолчанию составляет 10 минут. Уменьшение этого времени позволяет быстрее видеть в Doris актуальные свойства партиций Hudi, но повышает частоту обращений к внешним источникам данных.Начиная с версии 3.0.7 параметр конфигурации переименован в
external_cache_refresh_time_minutes. Значение по умолчанию не изменилось.
Информация о таблицах Iceberg
Краткое описание кэширования метаданных таблиц Iceberg в прежних версиях. Объект таблицы загружается и создаётся через Iceberg API. Для Doris 4.1.x+ текущие наблюдаемые элементы кэша описаны в разделе Iceberg Catalog.
У каждого Iceberg Catalog есть такой кэш.
-
Максимальное число объектов в кэше
Задаётся параметром конфигурации FE
max_external_table_cache_num, значение по умолчанию составляет 1000.Этот параметр можно настроить в соответствии с числом таблиц Iceberg.
-
Время вытеснения
Фиксированное значение: 28800 секунд. Начиная с версии 3.0.7 задаётся параметром FE
external_cache_expire_time_seconds_after_access, значение по умолчанию составляет 86400 секунд. -
Минимальное время до обновления
Задаётся параметром конфигурации FE
external_cache_expire_time_minutes_after_accessв минутах. Значение по умолчанию составляет 10 минут. Уменьшение этого времени позволяет быстрее видеть в Doris актуальные свойства таблиц Iceberg, но повышает частоту обращений к внешним источникам данных.Начиная с версии 3.0.7 параметр конфигурации переименован в
external_cache_refresh_time_minutes. Значение по умолчанию не изменилось.
Метаданные снимков Iceberg
Краткое описание метаданных снимков, получаемых из метаданных таблиц Iceberg, в прежних версиях.
В текущих реализациях их не следует считать отдельным элементом кэша в 4.1.x наряду с table, view или manifest.
-
Максимальное число объектов в кэше
Задаётся параметром конфигурации FE
max_external_table_cache_num, значение по умолчанию составляет 1000.Этот параметр можно настроить в соответствии с числом таблиц Iceberg.
-
Время вытеснения
Фиксированное значение: 28800 секунд. Начиная с версии 3.0.7 задаётся параметром FE
external_cache_expire_time_seconds_after_access, значение по умолчанию составляет 86400 секунд. -
Минимальное время до обновления
Задаётся параметром конфигурации FE
external_cache_expire_time_minutes_after_accessв минутах. Значение по умолчанию составляет 10 минут. Уменьшение этого времени позволяет быстрее видеть в Doris актуальные свойства таблиц Iceberg, но повышает частоту обращений к внешним источникам данных.Начиная с версии 3.0.7 параметр конфигурации переименован в
external_cache_refresh_time_minutes. Значение по умолчанию не изменилось.
Обновление кэша
Помимо описанных выше стратегий обновления и вытеснения, пользователи могут обновлять метаданные вручную или по расписанию.
Обновление вручную
Используйте оператор REFRESH, чтобы сделать недействительными метаданные Catalog, базы данных или таблицы.
Актуальный синтаксис, необходимые права и примеры см. в разделе REFRESH.
Краткое описание поведения:
REFRESH CATALOGделает недействительными кэши объектов уровня Catalog и по умолчанию кэши метаданных нижних уровней.REFRESH DATABASEделает недействительными метаданные в одной базе данных.REFRESH TABLEделает недействительными метаданные одной таблицы.- Для
REFRESH CATALOGнастройкаinvalid_cache = falseсохраняет кэши нижних уровней и обновляет только списки объектов и имён.
Обновление по расписанию
Пользователи могут настроить обновление Catalog по расписанию при его создании.
CREATE CATALOG hive PROPERTIES (
'type'='hms',
'hive.metastore.uris' = 'thrift://172.0.0.1:9083',
'metadata_refresh_interval_sec' = '3600'
);
В приведённом примере metadata_refresh_interval_sec означает, что Catalog обновляется каждые 3600 секунд. Это эквивалентно автоматическому выполнению следующей команды раз в 3600 секунд:
REFRESH CATALOG ctl1;
Рекомендации
Кэширование может значительно повысить производительность доступа к метаданным и сократить частые удалённые обращения к ним, которые могут вызывать колебания производительности или создавать нагрузку на сервис метаданных. Однако кэширование также снижает актуальность данных. Например, если время обновления кэша составляет 10 минут, в течение десяти минут можно читать только кэшированные метаданные. Поэтому кэш необходимо настраивать с учётом конкретных условий.
Поведение по умолчанию
В этом разделе описаны основные особенности поведения кэша при настройках по умолчанию, которые могут быть важны пользователям.
- После добавления новой базы данных или таблицы во внешний источник данных к ней можно сразу обращаться в Doris с помощью SELECT. Однако SHOW DATABASES и SHOW TABLES могут её не отображать; необходимо вручную обновить кэш или подождать до 10 минут.
- При добавлении новой партиции во внешний источник данных необходимо вручную обновить кэш или подождать до 10 минут, чтобы запросить данные новой партиции.
- При изменении файлов данных партиции необходимо вручную обновить кэш или подождать до 10 минут, чтобы запросить новые данные партиции.
Отключение кэша схем
Для всех типов внешних Catalog можно отключить кэш схем, чтобы видеть актуальную схему таблицы в реальном времени:
-
Глобальное отключение
-- fe.conf
max_external_schema_cache_num=0 // Disable Schema cache. -
Свойство уровня Catalog для прежних версий
-- Catalog property
"schema.cache.ttl-second" = "0" // Legacy property, supported in 2.1.11 / 3.0.6
После настройки Doris будет видеть актуальную схему таблицы в реальном времени. Однако эта настройка может повысить нагрузку на сервис метаданных.
Отключение кэша метаданных Hive Catalog
Чтобы отключить кэш Hive Catalog и запрашивать данные, обновляемые в реальном времени, можно настроить следующие параметры:
-
Глобальное отключение
-- fe.conf
max_external_file_cache_num=0 // Disable file list cache
max_hive_partition_table_cache_num=0 // Disable partition list cache
max_hive_partition_cache_num=0 // Disable partition property cache -
Свойства уровня Catalog для прежних версий
-- Catalog property
"file.meta.cache.ttl-second" = "0" // Disable file list cache
"partition.cache.ttl-second" = "0" // Disable partition list cache (supported in 2.1.11 / 3.0.6)
После настройки указанных выше параметров:
- Новые партиции во внешнем источнике данных доступны для запросов в реальном времени.
- Изменения в файлах данных партиций доступны для запросов в реальном времени.
- Чтобы видеть изменения свойств партиций, необходимо также отключить кэш свойств партиций.
Однако это увеличит нагрузку от обращений к внешним источникам данных (таким как Hive Metastore и HDFS), что может привести к нестабильному времени доступа к метаданным и другим подобным проблемам.