Кэш метаданных
Этот документ относится к версиям до 4.1.x.
В Doris 4.1.x и более поздних версиях кэш внешних метаданных переработан и использует унифицированные ключи конфигурации meta.cache.*. См. раздел «Кэш метаданных» в документации по каждому Catalog.
Для повышения производительности доступа к внешним источникам данных Apache Doris кэширует их метаданные.
Метаданные включают сведения о базах данных, таблицах, столбцах, партициях, снимках, списках файлов и т. д.
В этой статье подробно описаны типы кэшируемых метаданных, стратегии кэширования и соответствующие параметры конфигурации для прежних версий (до 4.1).
Сведения о кэше данных см. в документации по кэшу данных.
Сведения об ограничениях памяти для кэшей внешних метаданных см. в разделе Управление памятью кэша внешних метаданных.
Стратегии кэширования
У большинства кэшей есть следующие три параметра стратегии:
-
Максимальное количество объектов в кэше
Максимальное количество объектов, которое может содержать кэш. Например, можно кэшировать до 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 в прежних версиях.
В Doris 4.1.x+ текущие элементы кэша Hudi также включают 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, что может привести к нестабильной задержке доступа к метаданным и другим проблемам.