Πώς κάνουμε maintenance Indexes και Statistics σε βάση δεδομένων PostgreSQL

Πώς κάνουμε maintenance Indexes και Statistics σε βάση δεδομένων PostgreSQL
Πώς κάνουμε maintenance Indexes και Statistics σε βάση δεδομένων PostgreSQL
Τελευταίες δημοσιεύσεις από Stratos Matzouranis (Προβολή όλων)

Όπως έχουμε δει σε προηγούμενα άρθρα, η ομαλή λειτουργία μιας βάσης δεδομένων δεν εξασφαλίζεται μόνο με τους μηχανισμούς backup και recovery, αλλά απαιτεί και συνεχή συντήρηση. Με την πάροδο του χρόνου και την εκτέλεση καθημερινών συναλλαγών οι πίνακες και τα indexes συσσωρεύουν fragmentation, ενώ τα στατιστικά γίνονται outdated, με αποτέλεσμα την πτώση της απόδοσης. Σε αυτό το άρθρο θα δούμε πώς μπορούμε να διατηρούμε τη βάση δεδομένων σε καλή κατάσταση εκτελώντας manual και αυτοματοποιημένες διαδικασίες συντήρησης.

Statistics maintenance (analyze)

Ο query optimizer της PostgreSQL βασίζεται στα στατιστικά των πινάκων για να αποφασίσει το execution plan που θα ακολουθήσει. Αν τα στατιστικά δεν είναι ενημερωμένα, η βάση δεδομένων μπορεί να επιλέξει λανθασμένα sequential scans αντί για index scans.

Για να ενημερώσουμε τα στατιστικά σε όλη τη βάση δεδομένων, χρησιμοποιούμε το εργαλείο vacuumdb:

sudo -u postgres vacuumdb --all --analyze-in-stages

Rebuild indexes (reindex)

Όταν γίνονται πολλές τροποποιήσεις στους πίνακες, τα indexes χάνουν την αποδοτικότητά τους λόγω fragmentation. Για να τα επαναφέρουμε στην αρχική τους κατάσταση, μπορούμε να τα κάνουμε rebuild.

Για να κάνουμε reindex σε επίπεδο ολόκληρης της βάσης δεδομένων:

sudo -u postgres vacuumdb --all --full

Ή εναλλακτικά, αν θέλουμε να ανακατασκευάσουμε ένα συγκεκριμένο index χωρίς να μπλοκάρουμε τους χρήστες, αξιοποιούμε την αντίστοιχη εντολή CONCURRENTLY:

REINDEX INDEX CONCURRENTLY my_index_name;

*Η επιλογή CONCURRENTLY δεν υποστηρίζεται από το VACUUM FULL, καθώς το τελευταίο κλειδώνει τον πίνακα.

Αυτοματισμός Διαδικασίας Συντήρησης με Cronjob

Επειδή η εκτέλεση αυτών των εργασιών δεν πρέπει να γίνεται χειροκίνητα κατά τις ώρες αιχμής, μπορούμε να τις αυτοματοποιήσουμε προσθέτοντας τις σχετικές ενέργειες στο crontab του χρήστη postgres.

Για να επεξεργαστούμε τα cronjobs, τρέχουμε:

sudo -u postgres crontab -e

Και προσθέτουμε τις εργασίες που θέλουμε να εκτελούνται αυτόματα:

# daily update statistics 02:00
0 2 * * * /usr/pgsql-14/bin/vacuumdb --all --analyze >> /var/log/postgres/maintenance-analyze.log 2>&1

# weekly full vacuum / maintenance Sunday 03:00
0 3 * * 0 /usr/pgsql-14/bin/vacuumdb --all --full >> /var/log/postgres/maintenance-full.log 2>&1

Με αυτόν τον τρόπο, εξασφαλίζουμε ότι η βάση δεδομένων παραμένει αποδοτική χωρίς να απαιτείται ανθρώπινη παρέμβαση.

Μοιράσου το

Αφήστε μία απάντηση