PostgreSQL’de WAL Boyutunu Değiştirme

PostgreSQL veritabanında veritabanı değişikliklerinin yazıldığı dosyalara WAL (Write Ahead Log) ismi verilir. Birçok veritabanında farklı adlarda da olsa aynı yapı bulunmaktadır. Veritabanında yazma yükü fazla ise WAL dosyaları çok sık olarak yeni dosyaya geçmektedir (WAL Switch). Bu durum veritabanı performansına olumsuz etki yapar. PostgreSQL veritabanında WAL dosya büyüklükleri varsayılan olarak 16M olarak tanımlanmıştır. Bu günümüz iş yüklerini dikkate aldığımızda hayli küçük kalmaktadır. Bu yazıda WAL dosya boyutlarını nasıl değiştirebileceğimizden bahsedeceğiz. Eğer hiçbir parametre vermeden veritabanı oluşturursak WAL dosyaları için 16M olarak varsayılan boyut verilir. Fakat istersek WAL boyutunu belirleyebiliriz. Komut satırında verilecek boyut MB cinsinden belirtilebilir ve 2 üzeri 0-10 arası değer verilebilir. Verilebilecek segment boyutları şunlardır: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 ve 1024. initdb -D /pgdata/data --wal-segsize=256   Veritabanını başlattıktan sonra WAL boyutunu görebiliriz. $ pg_ctl start -D /pgdata/data $ psql postgres postgres=# show wal_segment_size; wal_segment_size ------------------ 256MB (1 row) Şimdi var olan veritabanında […]

PostgreSQL’de WAL Boyutunu Değiştirme

PostgreSQL veritabanında veritabanı değişikliklerinin yazıldığı dosyalara WAL (Write Ahead Log) ismi verilir. Birçok veritabanında farklı adlarda da olsa aynı yapı bulunmaktadır. Veritabanında yazma yükü fazla ise WAL dosyaları çok sık olarak yeni dosyaya geçmektedir (WAL Switch). Bu durum veritabanı performansına olumsuz etki yapar.

PostgreSQL veritabanında WAL dosya büyüklükleri varsayılan olarak 16M olarak tanımlanmıştır. Bu günümüz iş yüklerini dikkate aldığımızda hayli küçük kalmaktadır. Bu yazıda WAL dosya boyutlarını nasıl değiştirebileceğimizden bahsedeceğiz.

Eğer hiçbir parametre vermeden veritabanı oluşturursak WAL dosyaları için 16M olarak varsayılan boyut verilir. Fakat istersek WAL boyutunu belirleyebiliriz. Komut satırında verilecek boyut MB cinsinden belirtilebilir ve 2 üzeri 0-10 arası değer verilebilir. Verilebilecek segment boyutları şunlardır: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 ve 1024.

initdb -D /pgdata/data --wal-segsize=256

 

Veritabanını başlattıktan sonra WAL boyutunu görebiliriz.

$ pg_ctl start -D /pgdata/data
$ psql postgres
postgres=# show wal_segment_size;
wal_segment_size
------------------
256MB
(1 row)

Şimdi var olan veritabanında WAL büyütmesini nasıl yapabileceğimize bakalım. WAL dosyalarında veri değişiklikleri bulunduğu için, dosyaların bozulması verilerin kaybolmasına neden olur. Bu yüzden WAL dosyaları çok önemlidir. WAL dosyalarının boyutunu büyütebilmek için PostgreSQL kurulumu ile gelen pg_resetwal uygulamasını kullanacağız. Bu uygulama mevcut WAL dosyalarını siler ve istediğimiz boyutta yeni bir WAL dosyası oluşturur. Oracle ortamlarına aşina olan DBA’larin RESET LOGS ile veritabanı açmasına eşdeğerdir. pg_resetwal kullanılmadan önce veritabanının temiz olarak kapatılmış olması büyük önem arz etmektedir. Eğer WAL’larda hala datafile’lara yazılmamız veriler bulunuyorsa (checkpoint tamamlanmamışsa) veritabanı artık açılmaz, veriler bozulur. Dolayısıyla pg_resetwal yapmadan önce, garanti tarafta kalmak açısından veritabanı uzak bağlantıya kapatılıp (listen_address = ‘localhost’ ile), en az iki defa kapatıp açılmasını tavsiye ediyorum.
Gerekli açıklamalardan ve alınmış tedbirlerden sonra, aşağıdaki gibi, WAL dosya boyutlarını istediğimiz gibi ayarlayabiliriz. Örnekte 1GB yapıyoruz.

pg_resetwal -D /pgdata/data/ --wal-segsize=1024

 

Veritabanını açalım:

pg_ctl -D /pgdata/data -l dbwal.log start
waiting for server to start.... stopped waiting
pg_ctl: could not start server
Examine the log output.
[postgres@pgadmintest pg_wal]$ cat dbwal.log
2023-07-14 09:53:02.552 +03 [14990] FATAL: "min_wal_size" must be at least twice "wal_segment_size"
2023-07-14 09:53:02.552 +03 [14990] LOG: database system is shut down

 

Veritabanı açılırken bir hata ile kapandı, log kayıtlarının açıkladığı gibi, min_wal_size parametresinin değeri (varsayılan 80MB) ayarlanan wal_segment_size değerinin en az 2 katı olması gerekiyor. Buna ek olarak max_wal_size (varsayılan 1GB) parametresi de checkpoint’leri etkilediğinden en az 4 WAL size kadar olmasını tavsiye ediyorum.
Tüm durumlar için aşağıdaki parametreleri postgresql.conf dosyasına yazmalıyız:

min_wal_size = 2048
max_wal_size = 4096

 

Veritabanını başlatıp, yeni WAL boyutunu görebiliriz.

$ pg_ctl -D /pgdata/data -l dbwal.log start
$ psql postgres
postgres=# show wal_segment_size;
wal_segment_size
------------------
1GB
(1 row)

Gerçek ortamlarda bu işlemin yapılması kesinti gerektireceğinden planlı çalışma kapsamında yapılmalıdır.

Referanslar: pgresetwal

Benzer Yazılar

PostgreSQL’de pg_profile extension ile AWR oluşturma

PostgreSQL 7 ay önce

PostgreSQL veritabanını büyük sistemlerde yük altında kullanmaya başlayınca performansını izlemek ve tuning yapmak kaçınılmazdır. Ancak, PostgreSQL’de performansı izlemek için standart kurulum ile gelen özellikler yeterli değildir. Oracle’de bulunan AWR raporları gibi, sistemi en ince detayına kadar incelemek gerekebilir. Bu ihtiyaç için PostgreSQL için geliştirilen pg_profile extension’ı bulunmaktadır. Veritabanı iş yüklerini ve profilini çıkarabilmek için pg_profile aynı Oracle’de olduğu gibi snapshot’lar ve bu snapshot’lara üzerinden raporlar sunar. Bu yazıda pg_profile’ı nasıl kurup rapor alabileceğimizden bahsedeceğiz. Başka bir yazıda ise rapor incelemesi yapıp, olası tuning ihtimallerini değerlendireceğiz. Extension’a ait github sayfası : pg_profile pg_profile extension’ı kütüphane dosyası kullanmaz, bu yüzeden $PGHOME/lib altında *.so dosyası bulunmaz. Sadece veritabanında extension oluşturularak kullanılabilir. Github sayfasından PostgreSQL sürümüne uygun extension indirilerek sunucuya kopyalanır, sonrasında aşağıdaki gibi kurulur. sudo tar xzf pg_profile–4.2.tar.gz –directory $(pg_config –sharedir)/extension Extension oluşturma: postgres=# CREATE EXTENSION dblink; postgres=# CREATE EXTENSION pg_stat_statements; postgres=# CREATE SCHEMA profile; postgres=# CREATE EXTENSION pg_profile SCHEMA profile; Kullanmaya hazırız. […]

PostgreSQL Logical Decoding (WAL Decoding)

PostgreSQL 8 ay önce

Bu yazıda PostgreSQL’de WAL dosyalarından, veritabanında çalıştırılmış SQL’leri bind değerleri ile birlikte nasıl elde edebileceğimizi inceleyeceğiz. Veritabanında yapılan yanlış DELETE, UPDATE, INSERT işlemleri bu yöntem ile WAL dosyalarından çıkarılarak, hatalı işlemler geri alınabilirler. Logical Decoding özelliği PostgreSQL’e 11 sürümü ile gelmiştir.

0 Yorum

Yorum Yaz

Rastgele