Перейти к содержимому
Последнее обновление

Кэш метаданных

подсказка

Этот документ относится к версиям до 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Кэш объектов может временно расходиться с кэшем списков имён
Схема таблицыДля каждого Catalogmax_external_schema_cache_num, external_cache_expire_time_seconds_after_access, external_cache_refresh_time_minutesПараметр переопределения для отдельного Catalog в прежних версиях: schema.cache.ttl-second
Значения партиций HiveДля каждого Hive Catalogmax_hive_partition_table_cache_num, external_cache_expire_time_seconds_after_access, external_cache_refresh_time_minutesПараметр переопределения для отдельного Catalog в прежних версиях: partition.cache.ttl-second
Свойства партиций HiveДля каждого Hive Catalogmax_hive_partition_cache_num, external_cache_expire_time_seconds_after_accessВ прежних версиях нет параметра переопределения TTL для отдельного Catalog
Списки файлов HiveДля каждого Hive Catalogmax_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 в прежних версияхДля каждого Catalogmax_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, в прежних версиях. В текущих реализациях их не следует считать отдельным элементом кэша в 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), что может привести к нестабильному времени доступа к метаданным и другим подобным проблемам.