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.

Veysel YUKSEL
Latest posts by Veysel YUKSEL (see all)

Veysel YUKSEL

RDBMS ve NoSQL veri tabanı yönetimi ve Big Data teknolojileri.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir