PostgreSQL

Як убити непрацюючі з'єднання в PostgreSQL

Як убити непрацюючі з'єднання в PostgreSQL

Першим кроком до внесення змін або зчитування якоїсь інформації з банку даних PostgreSQL є встановлення зв’язків. З іншого боку, кожне посилання генерує накладні витрати, використовуючи процедуру та сховище. Ось чому пристрій з мінімальними ресурсами (читання, зберігання, апаратне забезпечення) може підтримувати обмежену сукупність з'єднань. Як тільки обмежена сукупність вийде далеко за межі певної точки, їй слід продовжувати кидати помилки або заперечувати з'єднання. У PostgreSQL.conf, PostgreSQL робить гідну роботу з обмеження посилань. У цьому посібнику ми розглянемо різні форми станів, які можуть мати посилання PostgreSQL. Ми покажемо вам, як визначити, чи є посилання активним чи неактивним протягом тривалого часу, тоді як його можна від’єднати, щоб звільнити посилання та ресурси.

Підключення до сервера:

На початку переконайтесь, що pgAdmin4 повністю функціонально встановлений у вашій комп’ютерній системі. Відкрийте його у своїх програмах. Ви повинні зв’язати його з localhost, вказавши пароль.

Після підключення до root localhost підключіть його до сервера PostgreSQL. Введіть пароль для підключення користувача PostgreSQL 13 'Postgres. Натисніть кнопку OK, щоб продовжити.

Тепер ви підключені до сервера PostgreSQL 13. Ви можете побачити список баз даних, що проживають на сервері, як показано на малюнку, доданому нижче. База даних Postgres - це база даних за замовчуванням, створена під час встановлення PostgreSQL, тоді як "тестова" база даних була створена користувачем після встановлення.

Стани з'єднання:

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

Визначте стан з'єднання:

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

>> ВИБЕРІТЬ * З pg_stat_activity;

Запит був реалізований плідно, а також показана примітка про досягнення.

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

Щоб спростити вихідні дані та мати чітке уявлення про з'єднання, їх стани, користувачів та сервери в цих станах, вам слід виконати модифікований нижче запит в інструменті запитів. Цей запит відображає лише 5 полів записів для з’єднань та конкретні дані щодо них. Стовпець 'pid' означає ідентифікатор процесу. У стовпці "стан" містяться стани процесів. Стовпець 'ім'я користувача' визначає користувача, який працював над конкретним процесом. У стовпці 'datname' вказано ім'я бази даних, над якою виконувалася транзакція. Стовпець 'datid' означає ідентифікатор бази даних.

>> ВИБЕРІТЬ pid, стан, ім’я користувача datname, datid, з pg_stat_activity;

Вихід має в цілому 8 записаних процесів. Стовпець "стан" показує, що зараз працює лише 3 процеси. Один утримується за замовчуванням для бази даних 'Postgres, а два інших - у базі даних' test '. Водночас користувач Postgres виконував ці процеси.

Визначте підключення в режимі очікування:

“Стан”, здається, є єдиною цінністю, яку ми шукаємо в рамках вищезазначених результатів. Ми використаємо цю інформацію, щоб визначити, які процеси чи запити знаходяться в яких станах, а потім глибше заглибитися. Ми можемо зменшити деталі, які ми шукаємо, уточнивши запит, дозволяючи нам підготувати втручання щодо цього конкретного зв’язку. Ми могли б зробити це, вибравши лише непрацюючі PID, використовуючи речення WHERE та стани для цих PID. Ми також повинні відстежувати, скільки часу посилання було неактивним, і переконатися, що у нас немає занедбаних посилань, які марно витрачають наші ресурси. Як результат, ми будемо використовувати перефразовану нижче команду для відображення лише записів, що мають відношення до процесів, які в даний час не працюють:

>> ВИБЕРІТЬ pid, ім'я користувача, useysid, datid, ім'я користувача, ім'я_програми, backend_start, state_change, стан FROM pg_stat_activity WHERE state = 'idle';

Запит отримав лише 2 записи даних, де стан був “неактивним”, використовуючи речення WHERE. Результат показує 2 непрацюючі процеси з певною інформацією щодо них.

Припинення зв’язку в режимі очікування:

Після виявлення непрацюючих зв’язків настав час їх убити. Після того, як ми зменшимо процес або у стані затримки, або неактивним набагато довше, ми можемо використовувати просту команду для легкого припинення внутрішнього механізму, не порушуючи діяльності сервера. Ми повинні надати процес `` id '' у запиті у функції термінату.

>> ВИБЕРІТЬ pg_terminate_backend (7408);

Процес був чудово вбитий.

Тепер перевірте залишилися непрацюючі з'єднання з доданого нижче запиту.

>> ВИБЕРІТЬ datid, ім'я користувача, ім'я користувача, pid, стан FROM pg_stat_activity WHERE стан = 'idle';

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

Висновок:

Не пропустіть жодного кроку, щоб ефективно знищити неактивні з’єднання з базою даних PostgreSQL.

Як встановити League of Legends на Ubuntu 14.04
Якщо ви шанувальник League of Legends, то це можливість для вас тестувати League of Legends. Зверніть увагу, що LOL підтримується на PlayOnLinux, якщо...
Встановіть останню стратегічну гру OpenRA на Ubuntu Linux
OpenRA - це ігровий движок Libre / Free Real Time Strategy, який відтворює ранні ігри Вествуда, такі як класичний Command & Conquer: Red Alert. Пошире...
Встановіть найновіший емулятор Dolphin для Gamecube & Wii на Linux
Емулятор Dolphin дозволяє грати у вибрані вами ігри Gamecube та Wii на персональних комп’ютерах Linux (ПК). Будучи вільно доступним і відкритим ігров...