Vastus (22.10.2023 19:31): Prügikoristus on vajalik, sest PostgreSQL kasutab multiversioon konkurentsjuhtimist (
multiversion concurrency control), mis tähendab, et rea lugemine ei takista samal ajal selle sama rea muutmist ning rea muutmine ei takista samal ajal selle rea lugemist. See eeldab rea muutmisel või kustutamisel selle vana versiooni säilitamist andmebaasisüsteemi poolt. Vana versioon tuleb säilitada kuni leidub mõni tehing, mis võib vajada selle lugemist. Kui selliseid tehinguid enam ei ole, siis tuleks ridade vanad versioonid kettalt füüsiliselt kustutada ja seda teebki prügikoristus. Prügikoristust saab algatada käsitsi
VACUUM lausega. Lisaks saab sisse lülitada
automaatse prügikoristuse. Prügikoristusega koos saab ka värskendada andmebaasi statistikat. Andmebaasi statistika annab andmebaasisüsteemile infot andmebaasis olevate andmete kohta (nt kui palju ridu on tabelis) ja seda on andmebaasisüsteemil vaja, et koostada võimalikult täpseid täitmisplaane. Seega peaks statistika olema võimalikult täpne ja ajakohane.
Üks võimalus automaatse prügikoristuse toimimise kontrollimiseks on teha päring süsteemikataloogi tabeli põhjal.
SELECT name, setting, short_desc
FROM pg_settings
WHERE name LIKE 'autovacuum%' OR
name='track_counts'
ORDER BY name;
Kui
autovacuum=on ja
track_counts=on, siis on automaatne prügikoristus serveris sisse lülitatud.
- autovacuum_vacuum_threshold - minimaalne muudetud või kustutatud ridade arv, mis käivitab tabeli automaatse prügikoristuse. Vaikimisi 50.
- autovacuum_vacuum_insert_threshold - minimaalne lisatud ridade arv, mis käivitab tabeli automaatse prügikoristuse. Vaikimisi 1000.
- autovacuum_analyze_threshold - minimaalne lisatud, muudetud või kustutatud ridade arv, mis käivitab tabeli statistika automaatse värskendamise. Vaikimisi 50.
Rohkem infot juhtparameetrite kohta on
SIIN.
Järgnev päring leiab iga kasutaja skeemis oleva tabeli kohta, millal viimati selle prügi koristati või statistikat värskendati (käsitsi või automaatselt).
SELECT
schemaname, relname,
last_vacuum, last_autovacuum,
vacuum_count, autovacuum_count,
last_analyze, last_autoanalyze,
analyze_count, autoanalyze_count
FROM pg_stat_user_tables
ORDER BY schemaname, relname;