Процесс qhb

qhb — сервер базы данных QHB

Синтаксис

qhb [параметр...]

или

qhbmaster [параметр...]

Описание

qhb — это сервер базы данных QHB. Чтобы получить доступ к базе данных, клиентское приложение подключается (по сети или локально) к работающему экземпляру qhb. Затем экземпляр qhb запускает отдельный серверный процесс для обработки соединения.

Один экземпляр qhb всегда управляет данными только одного кластера баз данных. Кластер баз данных — это набор баз данных, который хранится в определенном месте общей файловой системы («область данных»). В системе одновременно может работать несколько экземпляров qhb, если они используют разные области данных и разные коммуникационные порты (см. ниже). Когда qhb запускается, он должен знать местоположение области данных. Местоположение должно быть указано с помощью опции -D или переменной среды PGDATA; значение по умолчанию отсутствует. Как правило, -D или PGDATA указывает непосредственно на каталог области данных, созданный qhb_bootstrap. Другие возможные шаблоны файлов описаны в главе Расположение файлов.

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

Команда qhb также может быть вызвана в однопользовательском режиме. В основном, этот режим используется во время начального создания базы при помощи qhb_bootstrap, но иногда применяется и для отладки или аварийного восстановления. Обратите внимание, что использование однопользовательского режима не совсем подходит для полноценной отладки сервера вследствие отсутствия в нем реалистичного межпроцессного взаимодействия и блокировок. При вызове в однопользовательском режиме из командной оболочки пользователь может вводить запросы, и результаты будут выводиться на экран, но в форме, которая более полезна для разработчиков, чем для конечных пользователей. В этом режиме пользователем сеанса будет считаться пользователь с ID 1, и ему будут предоставлены неявные полномочия суперпользователя. Этому пользователю необязательно существовать на самом деле, поэтому однопользовательский режим можно использовать для ручного восстановления после некоторых видов случайного повреждения системных каталогов.

Параметры

qhb принимает ряд аргументов командной строки. За подробным рассмотрением параметров обратитесь к разделу Конфигурация сервера. Ввод большинства этих параметров можно сохранить, настроив файл конфигурации. Некоторые (безопасные) параметры также можно установить со стороны подключающегося клиента (в зависимости от приложения), чтобы они применялись только для этого сеанса. Например, если установлена переменная среды PGOPTIONS, клиенты на основе libpq передадут эту строку на сервер, который будет интерпретировать ее как параметры командной строки qhb.

Общие параметры

-B количество-буферов

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

-c имя=значение

Устанавливает именованный параметр времени выполнения. Параметры конфигурации, поддерживаемые QHB, описаны в главе Конфигурация сервера. Большинство других параметров командной строки на самом деле являются краткими формами такого назначения параметров. Для установки нескольких параметров -c можно указывать несколько раз.

-C имя

Печатает значение именованного параметра времени выполнения и завершает работу. (Подробности см. выше в описании параметра -c.) Это можно использовать на работающем сервере, при этом будут возвращены значения из qhb.conf с изменениями, вызванными любыми параметрами в этом вызове. Он не отражает параметры, предоставленные при запуске кластера.

Этот параметр предназначен для других программ, которые взаимодействуют с экземпляром сервера (например, qhb_ctl) и запрашивают значения параметров конфигурации. Пользовательские приложения должны вместо этого использовать SHOW или представление pg_settings.

-d уровень-отладки

Устанавливает уровень отладки. Чем выше это значение, тем больше выходных данных отладки записывается в журнал сервера. Значения находятся в диапазоне от 1 до 5. Также для отдельного сеанса возможно передать -d 0, что не даст уровню серверного журнала родительского процесса QHB распространиться на него.

-D каталог-данных

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

-e

Устанавливает формат даты по умолчанию в «European», то есть порядок вводимых значений даты вида DMY. Это также приводит к тому, что в определенных форматах вывода даты день печатается перед месяцем. Подробную информацию см. в разделе Типы даты/времени.

-F

Отключает вызовы fsync для повышения производительности, хотя и с риском повреждения данных в случае сбоя системы. Указание этого параметра равнозначно отключению параметра конфигурации fsync. Перед использованием этого параметра прочтите подробную документацию!

-h имя-хоста

Указывает IP-адрес или имя хоста, по которому QHB должен принимать подключения по TCP/IP от клиентских приложений. Значением также может быть список адресов через запятую или символ *, означающий все доступные интерфейсы. Пустое значение указывает, что не принимается ни один IP-адрес, и в этом случае подключение к серверу возможно только через сокеты Unix-домена. По умолчанию принимаются подключения только к локальной рабочей станции. Указание этого параметра равнозначно установке параметра конфигурации listen_addresses.

-i

Позволяет удаленным клиентам подключаться по TCP/IP (интернет-домен). Без этого параметра принимаются только локальные подключения. Он равнозначен установке значения * у параметра listen_addresses в qhb.conf или у параметра -h. Этот параметр считается устаревшим, так как не позволяет получить доступ ко всем функциям listen_addresses. Обычно лучше задать listen_addresses напрямую.

-k каталог

Указывает каталог сокета Unix-домена, в котором QHB должен принимать подключения от клиентских приложений. Значение также может быть разделенным запятыми списком каталогов. Пустое значение указывает, что не принимается ни один сокет Unix-домена, и в этом случае подключение к серверу возможно только через сокеты TCP/IP. Значением по умолчанию обычно является /tmp, но его можно изменить во время сборки. Указание этого параметра равнозначно установке параметра конфигурации unix_socket_directories.

-l

Включает поддержку безопасных подключений с использованием SSL. Чтобы этот параметр был доступен, QHB нужно скомпилировать с поддержкой SSL.

-N максимум-соединений

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

-o дополнительные-параметры

Аргументы в стиле командной строки, указанные в дополнительных- параметрах, передаются всем процессам сервера, запущенным этим процессом QHB.

Пробелы в строке дополнительные-параметры считаются отдельными аргументами, если они не экранированы обратной косой чертой (\); для представления буквального символа обратного слеша следует написать \\. Для указания нескольких аргументов можно использовать -o несколько раз.

Этот параметр считается устаревшим, так как все параметры командной строки для серверных процессов можно указать непосредственно в командной строке qhb.

-p порт

Указывает порт TCP/IP или расширение файла локального сокета домена Unix, на котором QHB должен принимать подключения от клиентских приложений. По умолчанию используется значение переменной среды PGPORT или, если PGPORT не установлен, то по умолчанию используется значение, установленное во время компиляции (обычно 5432). Если вы указываете порт, отличный от порта по умолчанию, то все клиентские приложения должны указывать один и тот же порт, используя либо параметры командной строки, либо PGPORT.

-s

Выводит информацию о времени и другую статистику в конце каждой команды. Это полезно для оценки производительности системы или для настройки количества буферов.

-S рабочая-память

Определяет объем памяти, который будет использоваться внутренними операциями сортировки и хэширования, прежде чем использовать временные файлы на диске. Описание параметра конфигурации work_mem см. в подразделе Память.

-V --version

Показать версию qhb и выйти.

--имя=значение

Устанавливает именованный параметр времени выполнения; является более короткой формой параметра -c.

--describe-config

Этот параметр выводит внутренние переменные конфигурации сервера, описания и значения по умолчанию в формате COPY с разделителями табуляции. Он предназначен в первую очередь для использования инструментами администрирования.

-? --help

Показать справку об аргументах командной строки qhb и выйти.

Параметры для внутреннего использования

Описанные здесь параметры используются в основном для целей отладки, а в некоторых случаях для помощи в восстановлении сильно поврежденных баз данных. Не должно быть никаких причин использовать их в настройке производственной базы данных. Они перечислены здесь только для использования разработчиками системы QHB. Кроме того, эти параметры могут быть изменены или удалены в будущих версиях без предварительного уведомления.

-f { s i o b t n m h }

Запрещает использование определенных методов сканирования и объединения: s и i отключают последовательное и индексное сканирование соответственно, o, b и t отключают сканирование только по индексу, сканирование по растровому индексу и сканирование TID соответственно, а n, m и h отключают соединения с помощью вложенных циклов, слияния и хэширования соответственно.

Ни последовательное сканирование, ни соединение с вложенным циклом нельзя отключить полностью; параметры -fs и -fn просто не позволят оптимизатору использовать эти типы планов, если у того есть какая-либо другая альтернатива.

-n

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

-O

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

-P

Игнорировать системные индексы при чтении системных таблиц, но по-прежнему обновлять индексы при изменении таблиц. Это полезно при восстановлении поврежденных системных индексов.

-t pa[rser] | pl[anner] | e[xecutor]

Выводит статистику по времени выполнения каждого запроса, относящегося к каждому из основных системных модулей. Этот параметр нельзя использовать совместно с параметром -s.

-T

Этот параметр предназначен для отладки проблем, которые приводят к аварийному завершению серверного процесса. Обычная стратегия в этой ситуации состоит в том, чтобы уведомить все другие серверные процессы, что они должны завершиться, а затем повторно инициализировать разделяемую память и семафоры. Это связано с тем, что вызвавший ошибку серверный процесс перед завершением мог повредить некоторое разделяемое состояние. Этот параметр указывает, что qhb остановит все остальные серверные процессы, отправив сигнал SIGSTOP, но не приведет к их завершению. Это позволит системным программистам вручную собрать дампы ядра всех процессов сервера.

-v протокол

Указывает номер версии протокола взаимодействия клиент-сервер, который будет использоваться для конкретного сеанса. Этот параметр предназначен только для внутреннего использования.

-W секунды

При запуске нового серверного процесса после проведения процедуры аутентификации возникает многосекундная задержка. Назначение этого параметра — дать возможность подключиться к серверному процессу с помощью отладчика.

Параметры для однопользовательского режима

Следующие параметры применимы только к однопользовательскому режиму (см. параграф Однопользовательский режим ниже).

--single

Выбирает однопользовательский режим. Этот аргумент должен быть первым в командной строке.

база_данных

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

-E

Выводить все команды на стандартное устройство вывода перед их выполнением.

-j

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

-r имя_файла

Отправляет весь вывод журнала сервера в файл имя_файла. Этот параметр учитывается только в том случае, если он указан в командной строке.

Переменные окружения

PGCLIENTENCODING

Кодировка символов по умолчанию, используемая клиентами. (Клиенты могут переопределить ее индивидуально.) Это значение также можно задать в файле конфигурации.

PGDATA

Местоположение каталога данных кластера по умолчанию.

PGDATESTYLE

Значение по умолчанию для параметра времени выполнения DateStyle. (Использование этой переменной среды устарело.)

PGPORT

Номер порта по умолчанию (желательно установить в файле конфигурации).

Диагностика

Сообщение об ошибке, в котором упоминается semget или shmget, скорее всего означает необходимость настроить ядро для предоставления достаточной разделяемой памяти и семафоров. Переконфигурирование ядра можно отложить, уменьшив значение параметра shared_buffers для снижения потребления разделяемой памяти QHB, и/или уменьшив значение параметра max_connections для снижения затрат на использование семафоров.

Сообщение об ошибке, указывающее на то, что другой сервер уже запущен, следует тщательно проверить, например, с помощью команды

$ ps ax | grep qhb

или

$ ps -ef | grep qhb

в зависимости от ОС. Если вы уверены, что конфликтующий сервер не запущен, можно удалить указанный в сообщении файл блокировки и повторить попытку.

Сообщение об ошибке, указывающее на невозможность привязки к порту, может означать, что этот порт уже используется некоторым процессом, не связанным с QHB. Также эту ошибку можно получить, если завершить работу qhb и немедленно перезапустить его, используя тот же порт; в этом случае следует просто подождать несколько секунд, пока операционная система не закроет порт, прежде чем попытаться снова. Наконец, эту ошибку можно получить, если указать номер порта, который ваша ОС считает зарезервированным. Например, многие версии Unix считают номера портов менее 1024 «доверенными» и разрешают доступ к ним только суперпользователю Unix.

Примечания

Для безопасного и удобного запуска и выключения сервера qhb можно использовать утилиту qhb_ctl.

Если это вообще возможно, не используйте сигнал SIGKILL для остановки основного сервера qhb, иначе этот сервер не освободит системные ресурсы (например, разделяемую память и семафоры), которые он занимал перед остановкой. Такое поведение может вызвать проблемы при запуске нового экземпляра qhb.

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

Сигнал SIGHUP перезагрузит файлы конфигурации сервера. Также возможно отправить SIGHUP на отдельный процесс сервера, но это обычно не имеет смысла.

Чтобы отменить текущий запрос, отправьте сигнал SIGINT процессу, выполняющему эту команду. Чтобы завершить внутренний процесс, отправьте SIGTERM этому процессу. См. также в разделе Функции сигнализации сервера описание функций pg_cancel_backend и pg_terminate_backend, которые являются вызываемыми SQL аналогами этих двух действий.

Сервер qhb использует SIGQUIT, чтобы приказать подчиненным серверным процессам завершиться без обычной очистки. Пользователям нельзя использовать этот сигнал. Также неразумно отправлять SIGKILL на серверный процесс — основной процесс qhb будет интерпретировать это как сбой и заставит все родственные процессы завершиться как часть стандартной процедуры восстановления после сбоя.

Ошибки

Параметр с -- не будут работать на FreeBSD или OpenBSD; используйте вместо них -c. Это ошибка ОС.

Однопользовательский режим

Чтобы запустить сервер в однопользовательском режиме, используйте команду, например

qhb --single -D /var/lib/qhb/data other-options my_database

Укажите правильный путь к каталогу базы данных с помощью -D или задайте переменную среды PGDATA. Также укажите имя конкретной базы данных, в которой вы хотите работать.

Обычно в однопользовательском режиме сервер обрабатывает символ перевода строки как окончание ввода команды; точка с запятой не является синтаксическим разделителем, как в qsql. Чтобы ввести команду, занимающую несколько строк, следует перед каждым символом перевода строки, кроме последнего, использовать обратную косую черту. При этом обратная косая черта и соседний символ перевода строки удаляются из вводимой команды. Обратите внимание, что это происходит даже внутри строкового литерала или комментария.

Но если воспользоваться параметром командной строки -j, одиночный символ перевода строки не завершит ввод команды; вместо него это будет делать последовательность из точки с запятой и двух символов перевода строки. То есть для завершения команды следует ввести точку с запятой, а следом пустую строку. Обратная косая черта с последующим символом перевода строки в этом режиме не имеют специального значения. Опять же, внутри строкового литерала или комментария такая последовательность тоже не работает.

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

Для завершения сеанса введите символ конца файла (EOF, обычно это Ctrl+D). Если после введения последней завершающей последовательности команды вы вводили какой-либо текст, то EOF будет восприниматься как символ завершения команды и для выхода понадобится еще один EOF.

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

Примеры

Чтобы запустить qhb в фоновом режиме, используя значения по умолчанию, введите:

$ nohup qhb >logfile 2>&1 </dev/null &

Чтобы запустить qhb с определенным портом, например 1234, введите:

$ qhb -p 1234

Чтобы подключиться к этому серверу с помощью qsql, укажите этот порт с параметром -p:

$ qsql -p 1234

или установите переменную среды PGPORT:

$ export PGPORT=1234
$ qsql

Именованные параметры времени выполнения можно установить в любом из следующих стилей:

$ qhb -c work_mem=1234
$ qhb --work-mem=1234

Любая из этих форм переопределяет любую настройку для work_mem в qhb.conf. Обратите внимание, что подчеркивания в именах параметров в командной строке могут быть записаны как подчеркивание или тире. За исключением краткосрочных экспериментов, вероятно, лучше отредактировать параметр в qhb.conf, чем задавать его в аргументах командной строки.

См. также

qhb_bootstrap, qhb_ctl