Как отключить неактивные соединения в PostgreSQL

соединения в PostgreSQL База данных

Первым шагом при внесении изменений или чтении некоторой информации из банка данных PostgreSQL является установление соединений. С другой стороны, каждая ссылка создавала накладные расходы, связанные с использованием процедуры и хранилища. Вот почему устройство с минимальными ресурсами (чтение, хранилище, оборудование) может поддерживать ограниченную совокупность подключений. Как только ограниченный агрегат выходит далеко за пределы определенной точки, он должен продолжать выдавать ошибки или отказывать в соединениях. В PostgreSQL.conf PostgreSQL неплохо справляется с ограничением ссылок. В этом руководстве мы рассмотрим различные формы состояний, которые могут иметь ссылки PostgreSQL. Мы покажем вам, как определить, активна ли ссылка или была неактивна в течение длительного времени, в этом случае ее можно отключить, чтобы освободить ссылки и ресурсы.

Подключиться к серверу

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

Вначале убедитесь, что pgAdmin4 полностью установлен

После подключения к корневому локальному хосту подключите его к серверу PostgreSQL. Введите пароль для подключения пользователя PostgreSQL 13 Postgres. Нажмите кнопку ОК, чтобы продолжить.

После подключения к корневому локальному хосту подключите его

Теперь вы подключены к серверу PostgreSQL 13. Вы можете увидеть список баз данных, находящихся на сервере, как показано на рисунке ниже. База данных Postgres — это база данных по умолчанию, созданная во время установки PostgreSQL, в то время как «тестовая» база данных была создана пользователем после установки.

Теперь вы подключены к серверу PostgreSQL 13

Состояния подключения

Если связь с PostgreSQL установлена, она может выполнять различные действия, которые приводят к переходам между состояниями. Следует принять рациональное решение о том, работает ли ссылка или она оставалась неактивной / неиспользованной, в зависимости от состояния и продолжительности нахождения в каждом состоянии. Важно отметить, что до тех пор, пока приложение намеренно не закроет соединение, оно будет продолжать работать, тратя ресурсы еще долгое время после отключения клиента. Существует 4 возможных состояния подключения:

  • Активно: это означает, что ссылка установлена ​​и работает.
  • Бездействие: это означает, что ссылка неактивна, поэтому мы должны вести учет их в зависимости от того, как долго они не использовались.
  • Бездействие (в транзакции): это означает, что серверная часть выполняет запрос, хотя на самом деле она простаивает и, возможно, ожидает ввода от конечного клиента.
  • Ожидание в транзакции (прервано): это состояние эквивалентно бездействию в процессе. Однако одно из заявлений завершилось ошибкой. Его можно отследить в зависимости от того, как долго он простаивал.
Читайте также:  Поддерживает ли MySQL материализованные представления?

Определите состояния подключения

Таблицы каталога PostgreSQL предоставляют встроенное представление pg_stat_activity для проверки статистики о том, что делает ссылка или сколько времени она находилась в этом состоянии. Чтобы проверить всю статистику по каждой базе данных и каждому состоянию соединения, откройте инструмент запроса и выполните следующий запрос:

>> SELECT * FROM pg_stat_activity;

Таблицы каталога PostgreSQL предоставляют встроенное

Запрос был реализован плодотворно, и отметка о выполнении показана.

Запрос был реализован плодотворно

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

Когда вы проверите его сторону вывода данных

Чтобы упростить вывод и иметь четкое представление о соединениях, их состояниях, пользователях и серверах в этих состояниях, вы должны выполнить измененный ниже запрос в инструменте запросов. Этот запрос показывает только 5 полей записей для подключений и конкретные данные о них. Столбец «pid» обозначает идентификатор процесса. Столбец «состояние» содержит состояния процессов. А также столбец usename определяет пользователя, который работал над определенным процессом. В столбце «имя данных» указано имя базы данных, в которой выполнялась транзакция. Столбец «datid» обозначает идентификатор базы данных.

>> SELECT pid, state, usename datname, datid, from pg_stat_activity;

Чтобы упростить вывод и иметь четкое представление

На выходе всего записано 8 процессов. Столбец «состояние» показывает, что сейчас работают только 3 процесса. Один хранится в базе данных по умолчанию «Postgres», а два других — в базе данных «test». В то же время пользователь Postgres выполнял эти процессы.

На выходе всего записано 8 процессов

Определите незанятые соединения

«Состояние» кажется единственным значением, которое мы ищем в упомянутых выше результатах. Мы будем использовать эту информацию, чтобы определить, какие процессы или запросы в каком состоянии находятся, а затем копать глубже. Мы можем сократить количество деталей, которые мы ищем, уточнив запрос, что позволит нам подготовить вмешательство в это конкретное соединение. Также мы могли бы сделать это, выбрав только незанятые PID с помощью предложения WHERE и состояний для этих PID. Мы также должны следить за тем, как долго ссылка была неактивной, и следить за тем, чтобы пренебрегаемые ссылки не растратили наши ресурсы. В результате мы будем использовать перефразированную ниже команду, чтобы отображать только записи, относящиеся к процессам, которые в данный момент простаивают:

>> SELECT pid, usename, usesysid, datid, datname, application_name, backend_start,state_change, state FROM pg_stat_activity WHERE state = ‘idle’;

Состояние» кажется единственным значением

Запрос получил только 2 записи данных, в которых состояние было «неактивным», с использованием предложения WHERE. Результат показывает 2 незанятых процесса с определенной информацией о них.

Запрос получил только 2 записи данных

Убить простаивающее соединение

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

>> SELECT pg_terminate_backend(7408);

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

Процесс был великолепно убит.

Процесс был великолепно уби

Теперь проверьте оставшиеся незанятые соединения из запроса ниже.

>> SELECT datid, usename, datname, pid, state FROM pg_stat_activity WHERE state = ‘idle’;

Теперь проверьте оставшиеся незанятые соединения из запроса ниже

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

В выходных данных отображается только

Заключение

Не пропустите ни одного шага, чтобы эффективно отключить неактивные соединения из базы данных PostgreSQL.

Оцените статью
bestprogrammer.ru
Добавить комментарий