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

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

подсказка

Этот документ относится к версиям до 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Кэш объектов может временно отличаться от кэша списков имён
Схема таблицыДля каждого 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 в прежних версиях. В 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, в прежних версиях. В текущих реализациях их не следует рассматривать как отдельный элемент кэша версии 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, что может привести к нестабильной задержке доступа к метаданным и другим проблемам.