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

Эксплуатация и обслуживание

Этот раздел содержит ответы на некоторые вопросы, связанные с эксплуатацией и обслуживанием.

Можно ли очистить директорию trash?

Вы можете настроить параметр FE catalog_trash_expire_second, чтобы указать, как долго файлы остаются в директории trash FE (По умолчанию: 24 часа).

Параметр BE trash_file_expire_time_sec контролирует интервалы очистки trash в BE (По умолчанию: 24 часа).

После DROP TABLE или DROP DATABASE данные сначала попадают в trash FE и хранятся один день, в течение которого их можно восстановить с помощью RECOVER. После этого они перемещаются в trash BE, который также хранит их 24 часа.

Есть ли у tablets отношение первичный-вторичный? Если некоторые replicas отсутствуют, как это влияет на запросы?

Если свойство таблицы replicated_storage установлено в true, запись использует механизм первичный-вторичный: данные сначала записываются в первичную replica, а затем синхронизируются с остальными. Несколько replicas обычно не оказывают существенного влияния на производительность запросов.

Могу ли я измерить использование CPU и памяти для задачи через интерфейс мониторинга?

Вы можете проверить поля cpucostns и memcostbytes в fe.audit.log.

Создание materialized view на таблице Unique Key возвращает ошибку "The aggregation type of column[now_time] must be same as the aggregate type of base column in aggregate table". Поддерживает ли таблица Unique Key materialized views?

Ошибка указывает, что тип агрегации materialized view должен соответствовать типу агрегации базовой таблицы. Для таблиц Unique Key вы можете использовать materialized views только для настройки порядка ключей сортировки. Например, если базовая таблица tableA содержит столбцы k1, k2, k3, где k1 и k2 являются ключами сортировки. В то время как ваши запросы содержат условие WHERE k3=x и требуют ускорения через prefix index, вы можете создать materialized view, который использует k3 в качестве первого столбца:

CREATE MATERIALIZED VIEW k3_as_key AS
SELECT k3, k2, k1
FROM tableA;

Как я могу получить метрики объема импорта с точными временными метками? Является ли query_latency метрикой среднего времени отклика?

Метрики импорта на уровне таблицы можно получить из: http://user:password@fe_host:http_port/metrics?type=json&with_table_metrics=all.

Данные на уровне cluster можно получить из: http://fe_host:http_port/api/show_data (приращение должно быть вычислено вручную).

query_latency предоставляет процентильное время отклика запросов.

В чём разница между SHOW PROC '/backends' и SHOW BACKENDS?

SHOW PROC '/backends' получает метаданные с текущего FE и может отставать. В то время как SHOW BACKENDS получает метаданные с Leader FE и является авторитетным.

Есть ли у Selena механизм timeout? Почему некоторые клиентские подключения сохраняются долгое время?

Да. Вы можете настроить системную переменную wait_timeout (По умолчанию: 8 часов), чтобы настроить timeout подключения.

Пример:

SET GLOBAL wait_timeout = 3600;

Может ли GRANT авторизовать несколько таблиц в одном statement?

Нет. Statements типа GRANT <priv> on db1.tb1, db1.tb2 не поддерживаются.

Могу ли я отозвать привилегии на конкретную таблицу, когда предоставлена привилегия ALL TABLES?

Отзыв подмножества привилегий не поддерживается. Рекомендуется предоставлять привилегии на уровне базы данных или таблицы.

Поддерживает ли Selena привилегии на уровне таблицы и строки?

Контроль доступа на уровне таблицы поддерживается. Контроль доступа на уровне строк и столбцов поддерживается в Enterprise-редакции.

Если таблица Primary Key не секционирована, работает ли разделение горячих и холодных данных?

Нет. Разделение горячих и холодных данных основано на партициях.

Могу ли я изменить путь хранения данных, если данные были ошибочно размещены в корневой директории?

Да. Обновите storage_root_path в be.conf, чтобы добавить новый диск, и используйте точки с запятой для разделения путей.

Как проверить версию Selena FE?

Выполните SHOW FRONTENDS; и проверьте поле Version.

Поддерживает ли Selena DELETE с вложенными подзапросами?

Начиная с версии v1.5.2, таблицы Primary Key поддерживают полный синтаксис DELETE WHERE. См. Справочник - DELETE для получения подробной информации.

Для динамических партиций, если я не хочу автоматически очищать старые партиции, могу ли я просто опустить dynamic_partition.start?

Нет. Установите его в очень большое значение.

Если у BE-машины неисправная память и требуется обслуживание, что следует сделать?

Выведите из эксплуатации BE. После ремонта добавьте его обратно в cluster.

Могу ли я обеспечить, чтобы все будущие партиции по умолчанию использовали SSD?

Нет. По умолчанию используется HDD. Требуется ручная настройка.

После добавления новых BE tablets автоматически перебалансировались. Могу ли я немедленно вывести из эксплуатации старые BE?

Да. Вам не нужно ждать завершения перебалансировки. Можно вывести из эксплуатации до двух узлов одновременно.

Повлияет ли добавление новых BE и удаление старых на производительность?

Перебалансировка происходит автоматически и не должна влиять на нормальные операции. Рекомендуется удалять узлы по одному.

Как заменить шесть узлов BE шестью новыми?

Добавьте шесть новых узлов BE, а затем выведите из эксплуатации старые по одному.

Почему количество unhealthy tablets не уменьшается после вывода узла из эксплуатации?

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

Что означает этот лог BE? "tcmalloc: large alloc xxxxxxxx bytes"

Произошел запрос большого выделения памяти, часто вызванный большими запросами. Проверьте соответствующий query_id в be.INFO, чтобы найти SQL.

Вызовет ли миграция tablets после добавления узлов колебания дискового I/O?

Да, временные колебания I/O ожидаются во время балансировки.

Какие методы миграции данных рекомендуются для развертываний в облаке?

  • Для миграции одной таблицы вы можете:
    • Создать внешнюю таблицу Selena, а затем загрузить данные из неё с помощью INSERT INTO SELECT.
    • Прочитать данные из исходного BE с помощью программы на основе Spark-connector и загрузить данные в целевой BE с помощью инкапсулированного STREAM LOAD.
  • Для миграции нескольких таблиц вы можете использовать Backup и Restore. Сначала создайте резервную копию данных из исходного cluster в удаленное хранилище. Затем восстановите данные из удаленного хранилища в целевой cluster.
  • Если ваш cluster использует HDFS в качестве удаленного хранилища, вы можете сначала использовать distcp для миграции файлов данных, а затем использовать Broker Load для загрузки данных в целевой cluster.

Как я могу решить ошибку "failed to create task: disk ... exceed limit usage"?

Диск заполнен. Увеличьте хранилище или очистите trash.

Логи FE показывают "tablet migrate failed". Как это решить?

Скорее всего, это связано с тем, что storage_root_path является HDD, а свойство таблицы storage_medium установлено в SSD. Вы можете установить свойство таблицы в HDD:

ALTER TABLE db.table MODIFY PARTITION (*) SET("storage_medium"="HDD");

Могу ли я мигрировать FE на другую машину, скопировав только метаданные?

Нет. Используйте рекомендуемый метод: добавьте новый узел, а затем удалите старый.

На одном BE диски используются неравномерно (500 ГБ 99%, 2 ТБ 20%). Почему не происходит балансировка?

Балансировка предполагает диски одинакового размера. Используйте диски одинакового размера для обеспечения равномерного распределения.

Если max_backend_down_time_second установлен в 3600, означает ли это, что я должен восстановить неисправный BE в течение одного часа?

Если время простоя BE превышает эту конфигурацию, FE восполнит replicas на другом BE. Когда неисправный BE добавляется обратно в cluster, могут возникнуть большие затраты на перебалансировку.

Существует ли инструмент IDE для экспорта структур таблиц и представлений из производственной среды?

Да. См. olapdb-tool.

Можно ли установить несколько системных переменных в одном SQL (например, timeout и параллелизм)?

Да.

Пример:

SELECT /*+ SET_VAR(query_timeout=1, is_report_success=true, parallel_fragment_exec_instance_num=2) */ COUNT(1)
FROM table;

Следуют ли столбцы VARCHAR в ключах сортировки ограничению префикса в 36 байт?

Столбцы VARCHAR обрезаются на основе фактической длины. Только первый столбец получает short-key index. По возможности размещайте ключи сортировки VARCHAR на третьей позиции.

BE не запускается с ошибкой "while lock file". Как с этим справиться?

Процесс BE всё ещё выполняется. Завершите процесс daemon и перезапустите.

Нужно ли клиентам явно подключаться к observer FE для запросов только на чтение?

Нет. Запросы на запись автоматически маршрутизируются к leader FE; observers обслуживают запросы только на чтение.

FE завершается с LOG_FILE_NOT_FOUND из-за слишком большого количества открытых файлов. Как это решить?

Проверьте лимиты дескрипторов файлов ОС, выполнив cat /proc/$pid/limits, и выполните lsof -n -p $fe_pid>/tmp/fe_fd.txt, чтобы проверить используемые дескрипторы файлов.

Есть ли ограничения на количество партиций и buckets?

  • Для партиций лимит по умолчанию 4096 (настраивается через конфигурацию FE max_partitions_in_one_batch).
  • Для buckets нет лимита. Рекомендуемый размер каждого bucket - 1 ГБ.

Как вручную переключить FE leader?

Остановите текущий Leader, и новый leader будет избран автоматически.

Как заменить три узла FE (1 Leader и 2 Follower) новыми машинами?

  1. Добавьте 2 новых Followers в cluster.
  2. Удалите 1 старый Follower.
  3. Добавьте последний новый Follower.
  4. Удалите оставшийся старый Follower.
  5. Удалите старый Leader.

Создание динамических партиций не работает должным образом. Почему?

Проверка динамических партиций выполняется каждые 10 минут. Это поведение контролируется конфигурацией FE dynamic_partition_check_interval_seconds.

Логи FE часто показывают "connect processor exception because,java.io.IOException: Connection reset by peer". Почему?

Скорее всего, это связано с отключениями на стороне клиента, сбросами пула подключений или проблемами с сетью. Проверьте метрики backlog ОС и стабильность сети.

Проверьте, изменились ли следующие метрики:

netstat -s | grep -i LISTEN
netstat -s | grep TCPBacklogDrop
cat /proc/sys/net/core/somaxconn

После выполнения операторов TRUNCATE, когда будет освобождено место для хранения?

Немедленно.

Как проверить, сбалансировано ли распределение buckets?

Выполните следующую команду:

SHOW TABLET FROM db.table PARTITION (<partition_name>);

Как решить ошибку "Fail to get master client from cache"?

Это сбой связи FE-BE. Проверьте доступность IP и портов.

Как мигрировать Selena при изменении IP?

Рекомендуется развертывание в режиме FQDN.

Можно ли преобразовать несекционированную таблицу в секционированную?

Нет. Вы можете создать новую секционированную таблицу и использовать INSERT INTO SELECT для миграции данных.

Могу ли я запросить историю выполнения SQL? Есть ли audit log?

Да. См. fe.audit.log.

Как преобразовать несекционированную таблицу в хранилище SSD?

Выполните следующий SQL:

ALTER TABLE db.tbl MODIFY PARTITION (*) SET ("storage_medium"="SSD");

После выполнения ALTER TABLE ADD COLUMN запросы к information_schema.COLUMNS показывают задержку. Это нормально?

Да. Операции ALTER асинхронные. Проверьте прогресс с помощью SHOW ALTER COLUMN.

Если retention для таблицы с динамическими партициями изменен с 366 на 732 дня, могут ли исторические партиции быть созданы автоматически?

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

  1. Отключите динамические партиции.

    ALTER TABLE db.tbl SET  ("dynamic_partition.enable" = "false");
  2. Вручную добавьте партиции.

    ALTER TABLE db.tbl ADD PARTITIONS START ("2019-01-01") END ("2019-12-31") EVERY (interval 1 day);
  3. Повторно включите динамические партиции.

    ALTER TABLE db.tbl SET  ("dynamic_partition.enable" = "true");

Можно ли мониторить задачи Routine Load и получать оповещения при переключении из Running в Paused?

Да. Selena поддерживает метрики мониторинга для задач Routine Load и может быть подключена к системам оповещений.

Как диагностировать unhealthy replicas?

Выполните следующие операторы для идентификации UnhealthyTablets:

SHOW PROC '/statistic'
SHOW PROC '/statistic/<db_id>'

Затем проанализируйте UnhealthyTablets с помощью SHOW TABLET tablet_id.

Если результат показывает, что две replicas имеют согласованные данные, но одна replica имеет несогласованные данные — это означает, что две из трех replicas успешно завершили запись — это считается успешной записью. Затем вы можете проверить, исправлены ли tablets в UnhealthyTablets. Если они исправлены, это указывает на проблему. Если статус меняется, вы можете настроить частоту загрузки для соответствующей таблицы.

Ошибка: "SyntaxErrorException: Reach limit of connections". Как устранить?

Увеличьте лимиты для каждого пользователя, выполнив следующую команду:

ALTER USER 'jack' SET PROPERTIES ('max_user_connections'='1000');

Также проверьте load balancers и накопление idle connections (wait_timeout).

Как XFS и ext4 влияют на QPS?

Selena обычно работает лучше с XFS.

Через какое время BE считается неработающим и начинается миграция tablets?

  1. Когда Heartbeat (по умолчанию: каждые 5 секунд) не удается 3 раза, BE помечается как не живой.
  2. После этого есть намеренная задержка перед выполнением Clone, которая составляет 60 секунд.
  3. Затем начинается клонирование replicas.

Если BE восстанавливается позже, его replicas удаляются.

Планирование tablets на новых узлах происходит медленно (только 100 за раз). Как настроить?

Настройте следующие конфигурации FE:

ADMIN SET FRONTEND CONFIG ("schedule_slot_num_per_path"="8");
ADMIN SET FRONTEND CONFIG ("max_scheduling_tablets"="1000");
ADMIN SET FRONTEND CONFIG ("max_balancing_tablets"="1000");

Является ли операция BACKUP последовательной? Кажется, изменяется только одна директория HDFS

Операции BACKUP выполняются параллельно, но загрузка в HDFS использует одного worker, что контролируется конфигурацией BE upload_worker_count. Настраивайте это с осторожностью, так как это может повлиять на дисковый I/O и сетевой I/O.

Как решить ошибку FE OOM "OutOfMemoryError: GC overhead limit exceeded"?

Увеличьте память JVM FE.

Как решить ошибку "Cannot truncate a file by broker"?

  1. Проверьте логи broker на наличие сообщений об ошибках.
  2. Проверьте логи предупреждений BE на наличие ошибки "remote file checksum is invalid. remote:**** local: *****".
  3. Найдите удаленный номер в apache_hdfs_broker.log broker для ошибки "receive a check path request, request detail" и определите дублирующиеся файлы.
  4. Удалите или переименуйте проблемные удаленные файлы и повторите попытку.

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

Выполните SHOW PROC '/statistic' и убедитесь, что количество UnhealthyTablet равно нулю.

Как изменить количество replicas для исторических партиций?

Выполните следующую команду:

ALTER TABLE db.tbl MODIFY PARTITION (*) SET("replication_num"="3");

Для таблицы с тремя репликами, если диск узла BE поврежден, будут ли replicas автоматически восстановлены для поддержания трех копий?

Да, если доступно достаточно узлов BE.

Как устранить неполадки, если ошибка "reach limit connections" продолжается даже после увеличения лимитов пользователя?

Проверьте load balancers (ProxySQL, F5), накопление idle connections и уменьшите wait_timeout до 2-4 часов.

Если метаданные FE потеряны, потеряны ли все метаданные cluster?

Метаданные находятся в FE. С только одним FE это невосстановимо. С несколькими FE вы можете повторно добавить неисправный узел, и метаданные будут реплицированы.

Как решить ошибку загрузки "INTERNAL_ERROR, FE leader shows NullPointerException"?

Добавьте опцию JVM -XX:-OmitStackTraceInFastThrow и перезапустите FE, чтобы получить полный stack trace.

Как решить ошибку "The partition column could not be aggregated column" при установке столбца партиции для таблицы Primary Key?

Столбцы партиций должны быть ключевыми столбцами.