Перейти к основному содержимому
Версия: 2.0.x

FAQ по Data Cache

Эта тема описывает часто задаваемые вопросы (FAQ) и распространённые проблемы, связанные с Data Cache, а также предоставляет шаги по устранению неполадок и решения этих проблем.

Включение Data Cache

Как убедиться, что Data Cache успешно включён?

В большинстве случаев вы можете проверить, успешно ли включён Data Cache, любым из следующих методов:

  • Выполните SHOW BACKENDS (или SHOW COMPUTE NODES) из вашего SQL-клиента и проверьте значение DataCacheMetrics. Вы можете подтвердить, что Data Cache включён, если квота диска или памяти кэша больше 0.
mysql> show backends \G
*************************** 1. row ***************************
BackendId: 89041
IP: X.X.X.X
HeartbeatPort: 9050
BePort: 9060
HttpPort: 8040
BrpcPort: 8060
LastStartTime: 2025-05-29 14:45:37
LastHeartbeat: 2025-05-29 19:20:32
Alive: true
SystemDecommissioned: false
ClusterDecommissioned: false
TabletNum: 10
DataUsedCapacity: 0.000 B
AvailCapacity: 1.438 TB
TotalCapacity: 1.718 TB
UsedPct: 16.27 %
MaxDiskUsedPct: 16.27 %
ErrMsg:
Version: main-c15b412
Status: {"lastSuccessReportTabletsTime":"2025-05-29 19:20:30"}
DataTotalCapacity: 1.438 TB
DataUsedPct: 0.00 %
CpuCores: 8
MemLimit: 50.559GB
NumRunningQueries: 0
MemUsedPct: 0.50 %
CpuUsedPct: 0.2 %
DataCacheMetrics: Status: Normal, DiskUsage: 44MB/1TB, MemUsage: 0B/0B
Location:
StatusCode: OK
1 row in set (0.00 sec)

В приведённом выше примере квота дискового кэша Data Cache составляет 1TB, и в настоящее время используется 44MB; в то время как квота кэша памяти составляет 0B, поэтому кэш памяти не включён.

  • Вы можете получить доступ к BE Web Console (http://${BE_HOST}:${BE_HTTP_PORT}/api/datacache/stat) для проверки текущей квоты Data Cache, коэффициента попадания и других метрик. Вы можете подтвердить, что Data Cache включён, если disk_quota_bytes или mem_quota_bytes больше 0.

Data Cache FAQ - Web Console

Почему Data Cache не включён по умолчанию?

Начиная с версии v1.5.2, BE будет пытаться включить Data Cache при запуске. Однако, если на текущем диске недостаточно свободного места, Data Cache не будет включён автоматически.

Это может быть вызвано следующими ситуациями:

  • Процент: Текущее использование диска высокое.

  • Оставшееся пространство: Размер оставшегося дискового пространства относительно мал.

Поэтому, если Data Cache не включён по умолчанию, вы можете сначала проверить текущее использование диска и при необходимости увеличить ёмкость диска.

Кроме того, вы можете вручную включить Data Cache, настроив квоту кэша в соответствии с текущим доступным дисковым пространством.

# отключить автоматическую настройку Data Cache
datacache_auto_adjust_enable = false
# Установить квоту диска Data Cache вручную
datacache_disk_size = 1T

Использование Data Cache

Какие типы catalog поддерживает Data Cache?

Data Cache в настоящее время поддерживает типы внешних catalog, которые используют Selena Native File Reader (такие как Parquet/ORC/CSV Reader), включая Hive, Iceberg, Hudi, Delta Lake и Paimon. Catalog, которые обращаются к данным на основе JNI (такие как JDBC Catalog), пока не поддерживаются.

примечание

Некоторые catalog могут использовать различные методы доступа к данным в зависимости от определённых условий (таких как тип файла и состояние данных). Например, для Paimon catalog, Selena может автоматически выбирать, использовать ли Native File Reader или JNI для доступа к данным в зависимости от состояния compaction текущих данных. Когда JNI используется для доступа к данным Paimon, ускорение Data Cache не поддерживается.

Как узнать, что запрос попал в кэш?

Вы можете проверить метрики, связанные с Data Cache, в соответствующем профиле запроса. Метрики DataCacheReadBytes и DataCacheReadCounter указывают на состояние попадания в локальный кэш.

 - DataCacheReadBytes: 518.73 MB
- __MAX_OF_DataCacheReadBytes: 4.73 MB
- __MIN_OF_DataCacheReadBytes: 16.00 KB
- DataCacheReadCounter: 684
- __MAX_OF_DataCacheReadCounter: 4
- __MIN_OF_DataCacheReadCounter: 0
- DataCacheReadTimer: 737.357us
- DataCacheWriteBytes: 7.65 GB
- __MAX_OF_DataCacheWriteBytes: 64.39 MB
- __MIN_OF_DataCacheWriteBytes: 0.00
- DataCacheWriteCounter: 7.887K (7887)
- __MAX_OF_DataCacheWriteCounter: 65
- __MIN_OF_DataCacheWriteCounter: 0
- DataCacheWriteTimer: 23.467ms
- __MAX_OF_DataCacheWriteTimer: 62.280ms
- __MIN_OF_DataCacheWriteTimer: 0ns

Почему запрос пропускает кэш, когда Data Cache включён?

Выполните следующие шаги для устранения неполадок:

  1. Проверьте, поддерживает ли Data Cache текущий тип catalog.
  2. Подтвердите, соответствует ли оператор запроса условиям заполнения кэша. В определённых случаях Data Cache будет отклонять заполнение кэша для некоторых запросов. Подробности см. в разделе Правила заполнения Data Cache.

Команда EXPLAIN VERBOSE может быть использована для проверки, запускает ли запрос заполнение кэша. Пример:

mysql> EXPLAIN VERBOSE SELECT col1 FROM hudi_table;
| 0:HudiScanNode |
| TABLE: hudi_table |
| partitions=3/3 |
| cardinality=9084 |
| avgRowSize=2.0 |
| dataCacheOptions={populate: false} |
| cardinality: 9084 |
+-----------------------------------------+

В приведённом выше примере поле populate в разделе dataCacheOptions имеет значение false, что указывает на то, что кэш не будет заполняться для этого запроса.

Чтобы включить Data Cache для таких запросов, вы можете изменить поведение заполнения по умолчанию, установив системную переменную populate_datacache_mode в always.

Попадание в Data Cache

Почему иногда один и тот же запрос нужно выполнить несколько раз, прежде чем полностью попасть в кэш?

В текущей версии Data Cache по умолчанию использует асинхронное заполнение для снижения влияния на производительность запросов. При использовании асинхронного заполнения система будет пытаться кэшировать данные, к которым обращались, в фоновом режиме, не влияя на производительность чтения насколько это возможно. Поэтому выполнение запроса один раз может кэшировать только часть данных. Вам нужно выполнить запрос несколько раз, чтобы кэшировать все данные, необходимые для запроса.

Вы также можете использовать синхронное заполнение кэша, установив enable_datacache_async_populate_mode=false, или заранее прогреть целевые данные с помощью CACHE SELECT.

Почему при том, что все данные в текущем запросе были кэшированы, всё ещё есть небольшое количество данных, к которым обращаются удалённо?

В текущей версии адаптация I/O включена по умолчанию для оптимизации производительности кэша при высокой нагрузке I/O на диск, что может привести к тому, что небольшое количество запросов в некоторых случаях напрямую обращается к удалённому хранилищу.

Вы можете отключить функцию адаптации I/O, установив enable_datacache_io-adapter в false.

Прочее

Как очистить кэшированные данные?

В настоящее время Data Cache не предоставляет прямого интерфейса для очистки кэшированных данных, но вы можете выбрать один из следующих методов для очистки:

  • Вы можете очистить кэшированные данные, удалив все данные (включая файлы блоков и каталоги метаданных) в директории datacache на узлах BE/CN, а затем перезапустив узлы. (Рекомендуется)

  • Если вы хотите избежать перезапуска узлов BE/CN, вы также можете косвенно очистить кэшированные данные путём уменьшения квоты кэша во время работы. Например, если вы ранее установили квоту дискового кэша в 2TB, вы можете сначала уменьшить её до 0 (система автоматически очистит кэшированные данные), а затем снова установить её в 2TB.

Пример:

UPDATE be_configs SET VALUE="0" WHERE NAME="datacache_disk_size" and BE_ID=10005;
UPDATE be_configs SET VALUE="2T" WHERE NAME="datacache_disk_size" and BE_ID=10005;
примечание

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

Как улучшить производительность Data Cache?

С Data Cache Selena по сути обращается к локальной памяти или диску вместо удалённого хранилища. Поэтому производительность напрямую связана с локальной средой кэширования. Если вы обнаружите, что задержка доступа к кэшу высока из-за высокой нагрузки на диск, вы можете рассмотреть улучшение производительности локальной среды кэширования:

  • Приоритетно используйте высокопроизводительные NVME-диски в качестве дисков кэша.

  • Если высокопроизводительные диски недоступны, вы также можете увеличить количество дисков для распределения нагрузки I/O.

  • Увеличьте память сервера узлов BE/CN (а не квоту памяти Data Cache), используя Page Cache операционной системы для уменьшения количества прямых обращений к диску и нагрузки I/O на диск.