Sobes.tech
Middle

Πώς να εντοπίσετε τις κολλημένες συναλλαγές στο PostgreSQL;

sobes.tech AI

Απάντηση από AI

Στο PostgreSQL, οι κολλημένες συναλλαγές είναι αυτές που παραμένουν για μεγάλο χρονικό διάστημα σε κατάσταση ενεργής ή idle in transaction, χωρίς να ολοκληρωθούν. Για να τις εντοπίσετε, μπορείτε να χρησιμοποιήσετε ένα ερώτημα στον καταλογολογικό πίνακα pg_stat_activity.

Παράδειγμα ερωτήματος για την εύρεση τέτοιων συναλλαγών:

SELECT pid, usename, state, query, xact_start, now() - xact_start AS duration
FROM pg_stat_activity
WHERE state IN ('idle in transaction', 'active')
  AND xact_start IS NOT NULL
  AND now() - xact_start > interval '5 minutes'
ORDER BY duration DESC;

Εδώ, ελέγχουμε τις συναλλαγές που βρίσκονται σε κατάσταση "idle in transaction" ή "active" και διαρκούν περισσότερο από 5 λεπτά. Τέτοιες συναλλαγές μπορούν να μπλοκάρουν άλλες λειτουργίες και να προκαλέσουν παγώματα.

Για πιο βαθιά ανάλυση, μπορείτε να ελέγξετε τα μπλοκαρίσματα μέσω του pg_locks και να τα συσχετίσετε με τις συναλλαγές από το pg_stat_activity.