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

- Πώς κάνουμε maintenance Indexes και Statistics σε βάση δεδομένων PostgreSQL - 18 Σεπτέμβριος 2026
- Πώς ενεργοποιούμε το Data Masking σε PostgreSQL - 16 Σεπτέμβριος 2026
- Πώς κάνουμε Bulk Export Import στη PostgreSQL (pg_dump) - 14 Σεπτέμβριος 2026
Όπως έχουμε δει σε προηγούμενα άρθρα, η ομαλή λειτουργία μιας βάσης δεδομένων δεν εξασφαλίζεται μόνο με τους μηχανισμούς 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
Με αυτόν τον τρόπο, εξασφαλίζουμε ότι η βάση δεδομένων παραμένει αποδοτική χωρίς να απαιτείται ανθρώπινη παρέμβαση.

