Первым шагом при внесении изменений или чтении некоторой информации из банка данных PostgreSQL является установление соединений. С другой стороны, каждая ссылка создавала накладные расходы, используя процедуру и хранилище. Вот почему устройство с минимальными ресурсами (чтение, хранилище, оборудование) может поддерживать ограниченную совокупность подключений. Как только ограниченный агрегат выходит далеко за пределы точки, он должен продолжать выдавать ошибки или отказывать в соединениях. Внутри PostgreSQL.conf, PostgreSQL неплохо справляется с ограничением ссылок. В этом руководстве мы рассмотрим различные формы состояний, которые могут иметь ссылки PostgreSQL. Мы покажем вам, как определить, активна ли ссылка или была неактивна в течение длительного времени, в этом случае ее можно отключить, чтобы освободить ссылки и ресурсы.
Подключиться к серверу:
Вначале убедитесь, что pgAdmin4 полностью установлен в вашей компьютерной системе. Откройте его из ваших приложений. Вы должны подключить его к localhost, указав пароль.
После подключения к корневому локальному хосту подключите его к серверу PostgreSQL. Введите пароль пользователя PostgreSQL 13 'Postgres для подключения. Нажмите на кнопку ОК, чтобы продолжить.
Теперь вы подключены к серверу PostgreSQL 13. Вы можете увидеть список баз данных, находящихся на сервере, как показано на рисунке ниже. База данных Postgres - это база данных по умолчанию, созданная во время установки PostgreSQL, в то время как «тестовая» база данных была создана пользователем после установки.
Состояния подключения:
Если установлена связь с PostgreSQL, она может выполнять различные действия, которые приводят к переходам между состояниями. Следует принять рациональное решение о том, работает ли ссылка или она оставалась неактивной / неиспользованной, в зависимости от состояния и продолжительности нахождения в каждом состоянии. Важно отметить, что до тех пор, пока приложение не закроет соединение намеренно, оно будет продолжать работать, тратя ресурсы еще долгое время после отключения клиента. Существует 4 возможных состояния подключения:
- Активный: Это означает, что ссылка активна и работает.
- Праздный: Это означает, что ссылка неактивна, поэтому мы должны вести учет их в зависимости от того, как долго они не использовались.
- Простой (в транзакции): Это означает, что серверная часть выполняет запрос, хотя на самом деле она простаивает и, возможно, ожидает ввода от конечного клиента.
- Ожидание в транзакции (прервано): Это состояние эквивалентно бездействию в процессе. Однако одно из объявлений завершилось ошибкой. Его можно отследить в зависимости от того, как долго он простаивал.
Определите состояния подключения:
Таблицы каталога PostgreSQL предоставляют встроенное представление pg_stat_activity для проверки статистики о том, что делает ссылка или сколько времени она находилась в этом состоянии. Чтобы проверить всю статистику по каждой базе данных и каждому состоянию соединения, откройте инструмент запроса и выполните следующий запрос:
>> ВЫБРАТЬ * ИЗ pg_stat_activity;
Запрос был реализован успешно, и была показана записка о выполнении.
Когда вы проверите его сторону вывода данных, вы найдете таблицу с несколькими столбцами, как показано ниже. Вы можете проверить состояния подключений, проверив значения поля «состояние».
Чтобы упростить вывод и иметь четкое представление о соединениях, их состояниях, пользователях и серверах в этих состояниях, вы должны выполнить измененный ниже запрос в инструменте запросов. В этом запросе отображаются только 5 полей записей для подключений и конкретные данные о них. Столбец pid обозначает идентификатор процесса. Столбец "состояние" содержит состояния процессов. Столбец usename определяет пользователя, который работал над определенным процессом. В столбце datname указано имя базы данных, в которой выполнялась транзакция. Столбец datid обозначает идентификатор базы данных.
>> SELECT pid, state, usename datname, datid, from pg_stat_activity;
На выходе всего записано 8 процессов. Столбец "состояние" показывает, что сейчас работают только 3 процесса. Один хранится в базе данных по умолчанию Postgres, а два других - в базе данных test. В то же время пользователь Postgres выполнял эти процессы.
Определите незанятые соединения:
«Состояние» кажется единственным значением, которое мы ищем в упомянутых выше результатах. Мы будем использовать эту информацию, чтобы определить, какие процессы или запросы в каком состоянии находятся, а затем копать глубже. Мы можем сократить количество деталей, которые мы ищем, уточнив запрос, что позволит нам подготовить вмешательство в это конкретное соединение. Мы могли бы сделать это, выбрав только незанятые PID с помощью предложения WHERE и состояния для этих PID. Мы также должны отслеживать, как долго ссылка была неактивной, и следить за тем, чтобы у нас не было забытых ссылок, разбазаривающих наши ресурсы. В результате мы будем использовать перефразированную ниже команду, чтобы отображать только записи, относящиеся к процессам, которые в данный момент простаивают:
>> ВЫБЕРИТЕ pid, usename, usesysid, datid, datname, application_name, backend_start, state_change, state FROM pg_stat_activity WHERE state = 'idle';
Запрос получил только 2 записи данных, в которых состояние было 'idle', с использованием предложения WHERE. Результат показывает 2 незанятых процесса с определенной информацией о них.
Убить простаивающее соединение:
После выявления незанятых подключений, теперь пора их убить. После того, как мы сократили процесс либо в состоянии ожидания, либо в неактивном состоянии намного дольше, мы могли бы использовать простую команду, чтобы легко завершить внутренний механизм, не нарушая активности сервера. Мы должны предоставить идентификатор процесса в запросе в функции завершения.
>> ВЫБРАТЬ pg_terminate_backend (7408);
Процесс был великолепно убит.
Теперь проверьте оставшиеся незанятые соединения из запроса ниже.
>> ВЫБРАТЬ данные, имя пользователя, имя данных, идентификатор, состояние FROM pg_stat_activity WHERE state = 'idle';
Вывод показывает только 1 оставшийся процесс, который простаивает.
Заключение:
Не пропустите ни одного шага, чтобы эффективно уничтожить неактивные соединения из базы данных PostgreSQL.