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

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 (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 не включен по умолчанию?

Начиная с версии 1.5.0, 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 в настоящее время поддерживает типы external catalog, которые используют Selena Native File Reader (такие как Parquet/ORC/CSV Reader), включая Hive, Iceberg, Hudi, Delta Lake и Paimon. Каталоги, которые получают доступ к данным на основе JNI (такие как JDBC Catalog), пока не поддерживаются.

примечание

Некоторые каталоги могут использовать различные методы доступа к данным в зависимости от определенных условий (таких как тип файла и статус данных). Например, для catalog Paimon, Selena может автоматически выбирать, использовать ли Native File Reader или JNI для доступа к данным на основе статуса компактирования текущих данных. Когда 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.