Postgresql Autovacuum Parametreleri Ve Sorgular
Autovacuum özelliğinin açık olup olmadığı aşağıdaki komut ile kontrol edilebilir.
postgres=# SELECT name, setting FROM pg_settings WHERE name=’autovacuum’;
Postgresql veri tabanında dead tuple bilgisini görüntelemek için aşağıdaki komut kullanılabilir.
postgres=# SELECT schemaname, relname, n_live_tup, n_dead_tup, last_autoanalyze, last_autovacuum FROM pg_stat_all_tables ORDER BY last_autovacuum DESC NULLS LAST;
Tablolar üzerinde en son vacuum işleminin ne zaman yapıldığı bilgisi aşağıdaki komutla sorgulanabilir.
SELECT relname, last_vacuum, last_autovacuum FROM pg_stat_user_tables;
Tablo bazında autovacuum işlemini enable yada disable etmek mümkündür. Bunun için çalıştırılması gereken ALTER TABLE komutu aşağıdaki gibidir.
ALTER TABLE table_name SET (autovacuum_enabled = true);
SELECT reloptions FROM pg_class WHERE relname= table_name;
Tabloların kullandıkları disk alanı aşağıdaki komut ile kontrol edilebilir.
SELECT relname AS “table_name”, pg_size_pretty(pg_table_size(pgc.oid)) AS “space_used” FROM pg_class AS pgc LEFT JOIN pg_namespace AS pgns ON (pgns.oid = pgc.relnamespace) WHERE nspname NOT IN (‘pg_catalog’, ‘information_schema’) AND nspname !~ ‘^pg_toast’ AND relkind IN (‘r’) ORDER BY pg_table_size(pgc.oid) DESC LIMIT 1;
Autovacuum parametreleri
autovacuum = on
Autovacuum işleminin aktif olup olmayacağı bilgisi bu parametre ile belirtilir.
Autovacuum_max_workers = 3
Autovacuum işlemi için çalıştırılacak max process sayısını belirtir. Bu parametrenin değişikliği restart gerektirir.
autovacuum_vacuum_threshold = 50
autovacuum_analyze_threshold = 50
autovacuum_vacuum_scale_factor = 0.2
autovacuum_analyze_scale_factor = 0.1
Yukarıdaki parametreler autovacuum ve analyze işlemi yapılacak tabloların belirlenmesinde kullanılır.
Bir Tablo için autovacuum threshold değeri şu formülle hesaplanır = autovacuum_vacuum_scale_factor * number of tuples + autovacuum_vacuum_threshold
Bir Tablo için analyze threshold değeri şu formülle hesaplanır = autovacuum_analyze_scale_factor * number of tuples + autovacuum_analyze_threshold
autovacuum_vacuum_scale_factor = 0.2
autovacuum_vacuum_threshold = 50
autovacuum_analyze_scale_factor = 0.1
autovacuum_analyze_threshold = 50
değerlerine sahip bir veri tabanında 1000 kayıt olan bir tablo için;
(0.2 * 1000) + 50 = 250 ‘den fazla dead tuple olduğunda autovacuum işlemi yapılır.
(0.1 * 1000) + 50 = 150 Toplam insert / update / delete sayısına eriştiğinde analiz işlemi yapılır.
Bir tabloya gelen transaction türlerinin sayıları aşağıdaki gibi kontrol edilebilir. Böyece autovacuum process’in tune edilmesi kolaylaşır.
SELECT n_tup_ins as “inserts”,n_tup_upd as “updates”,n_tup_del as “deletes”, n_live_tup as “live_tuples”, n_dead_tup as “dead_tuples”
FROM pg_stat_user_tables
WHERE schemaname = and relname =;
inserts | updates | deletes | live_tuples | dead_tuples
———+———+———+————-+————-
30 | 40 | 9 | 21 | 39
VACUUM vs FULL VACUUM
Vacuum işleminden sonra fiziksel olarak bir disk alanı elde edilmez ancak full vacuum işleminden sonra diskten bir kazanç elde edilir. Full vacuum tablonun bir kopyasının dead tuple’lar olmadan yeni bir alana kopyalanması işlemidir ve analyze işlemini de içerir.
ÖRNEK
test01 adında tablo oluşturulur ve içinde 10000 kayıt insert edilir.
postgres=# create table test01(id int, id2 int);
CREATE TABLE
postgres=# insert into test01 values(generate_series(1,10000), generate_series(1,10000));
INSERT 0 10000
delete from test01 where id%2=0; komutu ile satırlar silindikten sonra Aşağıdaki komut ile dead tuple sayısı öğrenilir.
postgres=# SELECT schemaname, relname, n_live_tup, n_dead_tup, last_autoanalyze, last_autovacuum FROM pg_stat_all_tables ORDER BY last_autovacuum DESC NULLS LAST;
Daha sonra vacuum işlemi çalıştırılır ve dead tuple sayısı tekrar gözlemlenir.
Delete işleminden sonra Vacuum full işlemi çalıştırılıp tablonun size değerleri önce ve sonrasında kontrol edilirse, disk üzerinde kapladığı alanın azaldığı görülecektir.
- AWS nedir? – Cloud 101 - Mayıs 16, 2024
- Vector Databases - Mayıs 15, 2024
- Data Dünyası Nereye Gidiyor? - Mayıs 8, 2024