Першим кроком до внесення змін або зчитування якоїсь інформації з банку даних 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.