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

Shared-data

Этот раздел содержит ответы на часто задаваемые вопросы о shared-data cluster.

Почему не удаётся создать таблицу?​

Проверьте журнал BE (be.INFO), чтобы определить точную причину. Распространённые причины включают:

  • Неправильно настроенные параметры объектного хранилища (например, aws_s3_path, endpoint, authentication).
  • Нестабильность или исключения сервиса объектного хранилища.

Другие ошибки:

Сообщение об ошибке: "Error 1064 (HY000): Unexpected exception: Failed to create shards. INVALID_ARGUMENT: shard info cannot be empty"

Причина: Это часто происходит, когда используется автоматический вывод bucket, в то время как нет живых узлов CN или BE. Эта проблема исправлена в v1.5.2.

Почему создание таблицы занимает слишком много времени?​

Чрезмерное количество bucket (особенно в партиционированных таблицах) заставляет Selena создавать много tablet. Системе необходимо записать файл метаданных tablet для каждого tablet в объектное хранилище, высокая задержка которого может значительно увеличить общее время создания. Вы можете рассмотреть:

  • Уменьшение количества bucket.
  • Увеличение размера пула потоков создания tablet через конфигурацию BE create_tablet_worker_count.
  • Проверку и устранение высокой задержки записи в объектное хранилище.

Почему данные в объектном хранилище не очищаются после удаления таблицы?​

Selena поддерживает два режима DROP TABLE:

  • DROP TABLE xxx: перемещает метаданные таблицы в корзину FE (данные не удаляются).
  • DROP TABLE xxx FORCE: немедленно удаляет метаданные таблицы и данные.

Если очистка не удаётся, проверьте:

  • Использовался ли DROP TABLE xxx FORCE.
  • Не установлены ли слишком высокие параметры хранения в корзине. Параметры включают:
    • Конфигурация FE catalog_trash_expire_second
    • Конфигурация BE trash_file_expire_time_sec
  • Журналы FE на наличие ошибок удаления (например, таймаут RPC). Увеличьте таймаут RPC при необходимости.

Как найти путь хранения данных таблицы в объектном хранилище?​

Выполните следующую команду, чтобы получить путь хранения.

SHOW PROC '/dbs/<database_name>';

Пример:

mysql> SHOW PROC '/dbs/load_benchmark';
+---------+-------------+----------+---------------------+--------------+--------+--------------+--------------------------+--------------+---------------+--------------------------------------------------------------------------------------------------------------+
| TableId | TableName | IndexNum | PartitionColumnName | PartitionNum | State | Type | LastConsistencyCheckTime | ReplicaCount | PartitionType | StoragePath |
+---------+-------------+----------+---------------------+--------------+--------+--------------+--------------------------+--------------+---------------+--------------------------------------------------------------------------------------------------------------+
| 17152 | store_sales | 1 | NULL | 1 | NORMAL | CLOUD_NATIVE | NULL | 64 | UNPARTITIONED | s3://selena-common/xxxxxxxxx-xxxx_load_benchmark-1699408425544/5ce4ee2c-98ba-470c-afb3-8d0bf4795e48/17152 |
+---------+-------------+----------+---------------------+--------------+--------+--------------+--------------------------+--------------+---------------+--------------------------------------------------------------------------------------------------------------+
1 row in set (0.18 sec)

В версиях ранее v1.5.2 данные таблицы рассредоточены в одном каталоге.

Начиная с версии v1.5.2 данные организованы по партициям. Та же команда отображает корневой путь таблицы, который теперь содержит подкаталоги, названные по Partition ID, и каждый каталог партиции содержит подкаталоги data/ (файлы данных сегментов) и meta/ (файлы метаданных tablet).

Почему запросы в shared-data cluster медленные?​

Распространённые причины включают:

  • Промах кэша.
  • Недостаточная компактификация, вызывающая слишком много мелких файлов сегментов и, следовательно, чрезмерный I/O.
  • Плохой параллелизм (например, слишком мало tablet).
  • Неправильные настройки datacache.partition_duration, вызывающие сбои кэширования.

Сначала вам нужно проанализировать Query Profile, чтобы определить основную причину.

Промах кэша​

В shared-data cluster данные хранятся удалённо, поэтому Data Cache имеет решающее значение. Если запросы становятся неожиданно медленными, проверьте метрики Query Profile, такие как CompressedBytesReadRemote и IOTimeRemote.

Промахи кэша могут быть вызваны:

  • Отключением Data Cache при создании таблицы.
  • Недостаточным локальным пространством для кэша.
  • Миграцией tablet из-за эластичного масштабирования.
  • Неправильными настройками datacache.partition_duration, предотвращающими кэширование.

Недостаточная компактификация​

Без адекватной компактификации остаётся много исторических версий данных, увеличивая количество файлов сегментов, к которым происходит доступ во время запросов. Это увеличивает I/O и замедляет запросы.

Вы можете диагностировать недостаточную компактификацию:

  • Проверяя Compaction Score для соответствующих партиций.

    Compaction Score должен оставаться ниже ~10. Чрезмерно высокие Compaction Score часто указывают на сбои компактификации.

  • Просматривая метрики Query Profile, такие как SegmentsReadCount.

    Если количество сегментов высокое, компактификация может отставать или застрять.

Неправильные настройки tablet​

Tablet распределяют данные по Compute Nodes. Плохой выбор bucket или смещённые ключи bucket могут привести к тому, что запросы будут выполняться только на подмножестве узлов.

Рекомендации:

  • Выбирайте столбцы bucket, обеспечивающие сбалансированное распределение.
  • Устанавливайте разумное количество bucket (формула: общий размер данных / (1–5 ГБ)).

Неправильные настройки datacache.partition_duration​

Если это значение установлено слишком маленьким, данные из "холодных" партиций могут не кэшироваться, вызывая повторные удалённые чтения. В Query Profile, если CompressedBytesReadRemote или IOCountRemote не равны нулю, это может быть причиной. Настройте datacache.partition_duration соответствующим образом.

Почему все запросы в warehouse завершаются таймаутом с ошибками типа "Timeout was reached" или "Deadline Exceeded"?​

Проверьте, могут ли Compute Nodes в warehouse получить доступ к endpoint объектного хранилища.

Как получить метаданные tablet в shared-data cluster?​

  1. Получите видимую версию, выполнив:

    SHOW PARTITIONS FROM <table_name>`
  2. Выполните следующий оператор для получения метаданных tablet:

    admin execute on <backend_id>
    'System.print(StorageEngine.get_lake_tablet_metadata_json(<tablet_id>, <version>))'

Почему загрузка медленная при высокочастотном приёме данных?​

Selena сериализует фиксацию транзакций, поэтому высокие скорости приёма могут достигать пределов.

Мониторьте следующие аспекты:

  • Очередь загрузки: Если очередь загрузки заполнена, вы можете увеличить количество потоков I/O worker.
  • Задержка Publish Version: Высокое время публикации вызывает задержки приёма.

Как работает компактификация в shared-data cluster и почему она застревает?​

Ключевые особенности поведения:

  • Компактификация планируется FE и выполняется CN.
  • Каждая компактификация создаёт новую версию и проходит через процесс Write, Commit и Publish.
  • FE не отслеживает задачи компактификации во время выполнения; устаревшие задачи на BE могут блокировать новые.

Для очистки застрявших задач компактификации выполните следующие шаги:

  1. Проверьте информацию о версии партиции и сравните CompactVersion и VisibleVersion.

    SHOW PARTITIONS FROM <table_name>
  2. Проверьте статус задачи компактификации.

    SHOW PROC '/compactions'
    SELECT * FROM information_schema.be_cloud_native_compactions WHERE TXN_ID = <TxnID>
  3. Отмените просроченные задачи.

    a. Отключите компактификацию и миграцию.

    ADMIN SET FRONTEND CONFIG ("lake_compaction_max_tasks" = "0");
    ADMIN SET FRONTEND CONFIG ('tablet_sched_disable_balance' = 'true');
    ADMIN SHOW FRONTEND CONFIG LIKE 'lake_compaction_max_tasks';
    ADMIN SHOW FRONTEND CONFIG LIKE 'tablet_sched_disable_balance';

    b. Перезапустите все узлы BE

    c. Убедитесь, что все компактификации завершились неудачей.

    SHOW PROC '/compactions'

    d. Повторно включите компактификацию и миграцию.

    ADMIN SET FRONTEND CONFIG ("lake_compaction_max_tasks" = "-1");
    ADMIN SET FRONTEND CONFIG ('tablet_sched_disable_balance' = 'false');
    ADMIN SHOW FRONTEND CONFIG LIKE 'lake_compaction_max_tasks';
    ADMIN SHOW FRONTEND CONFIG LIKE 'tablet_sched_disable_balance';

Почему компактификация медленная в Kubernetes shared-data cluster?​

Если приём данных происходит в одном warehouse, а компактификация выполняется в другом (например, default_warehouse), компактификация должна загружать данные между warehouse без кэша, замедляя её.

Решение:

  • Установите конфигурацию BE lake_enable_vertical_compaction_fill_data_cache в true.
  • Выполняйте записи в том же warehouse, где выполняется компактификация.

Почему использование хранилища кажется завышенным в shared-data cluster?​

Использование хранилища в объектном хранилище включает все исторические версии, в то время как вывод SHOW DATA отражает только последнюю версию.

Однако, если разница чрезмерно велика, это может быть вызвано следующими проблемами:

  • Компактификация может отставать.
  • Задачи Vacuum могут накапливаться (проверьте размер очереди).

При необходимости вы можете настроить пулы потоков компактификации или vacuum.

Почему большие запросы завершаются ошибкой "meta does not exist"?​

Запрос может использовать версию данных, которая уже была скомпактифицирована и очищена.

Чтобы решить эту проблему, вы можете увеличить время хранения файлов, изменив конфигурацию FE lake_autovacuum_grace_period_minutes, а затем повторить запрос.

Что вызывает чрезмерное количество мелких файлов в объектном хранилище?​

Чрезмерное количество мелких файлов может вызвать снижение производительности. Распространённые причины включают:

  • Слишком много bucket из-за неправильных настроек bucket.
  • Высокая частота приёма данных, вызывающая очень маленькие отдельные загрузки.

Компактификация в конечном итоге объединит мелкие файлы, но настройка количества bucket и пакетирование приёма помогают предотвратить снижение производительности.