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

Типичные проблемы при создании таблиц

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

Сценарий 1: синтаксические ошибки в операторе CREATE TABLE​

Если в длинном операторе CREATE TABLE есть синтаксические ошибки, сообщения об ошибках могут быть неполными. Распространённые причины приведены ниже:

ПричинаРекомендации по проверке и исправлению
Ошибка в синтаксической структуреВнимательно прочитайте HELP CREATE TABLE; и сверьте с ним соответствующую синтаксическую структуру
Использование зарезервированных словЕсли пользовательское имя совпадает с зарезервированным словом, заключите его в обратные кавычки `. Рекомендуется заключать в обратные кавычки все пользовательские имена
Китайские или полноширинные символыКитайские символы в кодировке, отличной от utf-8, или скрытые полноширинные символы (например, полноширинные пробелы или знаки препинания) могут вызывать синтаксические ошибки. Для проверки используйте текстовый редактор с функцией отображения невидимых символов

Сценарий 2: при создании таблицы возникает ошибка Failed to create partition [xxx]. Timeout​

Doris создаёт таблицы последовательно, по одному Partition за раз. Если создать Partition не удаётся, выводится указанная выше ошибка.

Даже если оператор CREATE TABLE явно не определяет Partition, Doris создаёт для таблицы неизменяемый Partition по умолчанию. Поэтому при возникновении проблем во время создания таблицы также выводится сообщение Failed to create partition.

Эта ошибка обычно связана с проблемами, возникающими у BE при создании шардов данных (Tablets).

Порядок диагностики​

  1. Определите Backend и Tablet, с которыми связан сбой

    Найдите в fe.log запись Failed to create partition за соответствующий момент времени. Запись содержит ряд пар чисел вида {10001-10010}:

    • Первое число (10001): ID Backend
    • Второе число (10010): ID Tablet

    Приведённый выше пример означает, что создание Tablet с ID 10010 на Backend с ID 10001 завершилось сбоем.

  2. Проверьте журнал BE, чтобы найти сообщение об ошибке

    Откройте журнал be.INFO соответствующего Backend и найдите записи, связанные с ID Tablet, за соответствующий период времени, чтобы определить конкретное сообщение об ошибке.

  3. Устраните проблему с учётом распространённых ошибок

Распространённые причины сбоев при создании Tablet​

Проявление ошибкиВозможная причинаРекомендуемое действие
BE не получил соответствующую задачу (в be.INFO нет записей, связанных с ID Tablet), либо BE успешно создал Tablet, но не смог сообщить об этомПроблемы с сетевым соединением между FE и BEОбратитесь к разделу Установка и развёртывание, чтобы проверить сетевое соединение между FE и BE
Не удалось предварительно выделить памятьДлина одной строки таблицы в байтах превышает 100 KBИзмените схему таблицы, чтобы уменьшить длину данных в одной строке
Too many open filesЧисло открытых файловых дескрипторов превышает системный лимит LinuxИзмените лимит файловых дескрипторов в системе Linux

Настройка тайм-аута создания таблицы​

Если проблема при создании шардов данных заключается только в истечении тайм-аута, его можно увеличить с помощью следующих двух параметров в fe.conf:

ПараметрЗначение по умолчаниюОписание
tablet_create_timeout_second1 секундаТайм-аут создания одного Tablet
max_create_table_timeout_second60 секундМаксимальный тайм-аут всей операции создания таблицы

Общий тайм-аут вычисляется следующим образом:

min(tablet_create_timeout_second * replication_num, max_create_table_timeout_second)

Подробные описания параметров приведены в разделе Конфигурация FE.

Сценарий 3: команда CREATE TABLE долго не возвращает результат​

Команда CREATE TABLE в Doris выполняется синхронно. В настоящее время её тайм-аут задаётся довольно простым способом:

timeout = tablet num * replication num (seconds)

Возможные проявления проблемы и рекомендации:

  • Если создаётся много шардов данных и создание некоторых из них завершается сбоем, ошибка может быть возвращена лишь после длительного ожидания истечения тайм-аута.
  • В обычных условиях оператор CREATE TABLE возвращает результат в течение нескольких секунд или десятков секунд.
  • Если результат не возвращается в течение минуты, сразу отмените операцию и проверьте журналы FE или BE на наличие связанных ошибок.

Дополнительная информация​

Более подробную информацию о разделении данных на разделы можно найти в следующем источнике:

  • См. руководство по команде CREATE TABLE