Типичные проблемы при создании таблиц
В этой статье рассмотрены типичные ситуации, с которыми пользователи могут столкнуться при создании таблиц, их причины и способы устранения проблем.
Сценарий 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).
Порядок диагностики
-
Определите Backend и Tablet, с которыми связан сбой
Найдите в
fe.logзаписьFailed to create partitionза соответствующий момент времени. Запись содержит ряд пар чисел вида{10001-10010}:- Первое число (
10001): ID Backend - Второе число (
10010): ID Tablet
Приведённый выше пример означает, что создание Tablet с ID
10010на Backend с ID10001завершилось сбоем. - Первое число (
-
Проверьте журнал BE, чтобы найти сообщение об ошибке
Откройте журнал
be.INFOсоответствующего Backend и найдите записи, связанные с ID Tablet, за соответствующий период времени, чтобы определить конкретное сообщение об ошибке. -
Устраните проблему с учётом распространённых ошибок
Распространённые причины сбоев при создании 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_second | 1 секунда | Тайм-аут создания одного Tablet |
max_create_table_timeout_second | 60 секунд | Максимальный тайм-аут всей операции создания таблицы |
Общий тайм-аут вычисляется следующим образом:
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