Merhaba,

PostgreSQL wal size deafult olarak 16MB dir. PostgreSQL 11 ile initdb komutuna yeni bir seçenek daha geldi, wal-segsize. PostgreSQL 11 ile birlikte bu değer kurulum sırasında wal dosyalarının boyutu belirlenebilecek. 2 nin katları (1,2,4,8,16,32..) şeklinde MB boyutunda set edilebilir.  Buradaki sınır en fazla 1024 (MB) olarak set edilebilir.

initdb -D /pg_data --wal-segsize=32

Bu yenilik gelmeden önce Robert Haas’ın neden böyle bir değişikliğe gereksinim duyulduğu ile ilgili bir yazısını okudum. Wal dosyasınınn boyutunun 16MB’tan 64MB’a çıkarılmasının çok fark etmeyeceğinden bahsetmişti.

Açıklaması da şöyle:

“max_wal_size=1GB olması demek 64 adet 16MB’lık WAL segment’i demek. 16 adet 64MB’lık WAL segmentine sahip olunması bu değişikliği yapan kişileri çok da etkilemeyecek. Bir günde 32,768 adet WAL segmenti üreten bir PostgreSQL veritabanı (her 2.6 sn civarı WAL dosyasının üretilmesi anlamına gelir bu da) için günde 8,192 WAL segmentinin oluşturulması(günde 10.5 sn eder) daha kolay olacaktır.

Günlük 300,000 WAL segmenti üreten bir sistemde, segment size’ın 4 katına çıkması demek, bir günde 75,000 WAL demektir. Yüksek sayıda yüzlerce WAL dosyası yerine daha düşük sayıda onlarca sayıdaki WAL dosyalarının yönetilmesi daha kolay olacaktır.

WAL segment size’i 1GB yapmak isterseniz günlük 4700 civarı WAL dosyasını üretir, bu da yaklaşık her 18sn demektir.

Çok büyük veritabanlarında gerçekleştirilen işlemlerin ölçeklendirilmesi daha zordur. Dolayısıyla büyük ve küçük veritabanlarını aynı koşullarda yönetemeyiz. 100TB’lık bir veritabanı ile 100MB’lik bir veritabanı aynı WAL segment size’i kullanılarak yönetilmemelidir.”

Bir diğer sebep de WAL dosyaları diske daha düşük sıklıkta yazılıp senkronize olmasıdır. archive_commad’ın her WAL segmentinin oluşturulmasından sonra çağırılmasından dolayı sunucu üzerinde sürekli WAL trafiği oluşacaktır. Daha büyük WAL dosyalarının oluşturulmasıyla bu trafik azaltılabilir. Günlük 300.000 WAL üreten bir sistem için wal segment size’i 16MB yerine daha büyük bir değere sahip olması bunun için de önemlidir.

WAL dosyası boyutunun büyük olması daha büyük veritabanlarında avantaj sağlarken küçük veritabanlarında dezavantaja sebep olacaktır. Bu yüzden wal dosya boyutu initdb sırasında değiştirilebilir.

Performans sebeplerinden dolayı default 16MB dan daha büyük wal size daha kullanışlı olabilir. Daha büyük segment size’ın sağladığı iki fayda var; ilki, arşivleme yapılan kurulumlarda, daha yüksek boyuttaki WAL ile birlikte scriptlerin yazılması daha kolay olacaktır. İkinci sebep ise; WAL dosyaları daha düşük aralıklarda diske yazılmış ve senkronize olacaktır.

archive_command’i kullanmanın birden fazla yolu vardır. cp, scp veya rsync komutlarını kullanabilirsiniz. 16MB’lık 100 adet dosyanın kopyalanması ile 64MB lık 25 adet dosyanın kopyalanması arasındaki farkı örnek ile gösterelim. Paylaşacağım örnekler herkesin sisteminde aynı olmasa da benzer sonuçları verecektir. Dosya aktarımını kendi makinamda oluşturduğum 16MB ve 24MB lik dosyaları yine kendi makinamda olan sanal makinadaki başka bir ortama aktardım.

100 adet 16MB lik dosya oluşturalım.

64MB’lık 25 dosya oluşturalım.

 

16MB’lik dosyayı scp ile 24 sn de aktarabildi.

64MB lik dosyayı scp ile 8sn civarı aktarıyor.

Aynı şekilde rsync de denersek benzer sonuç göreceğiz.

Rsync ile 16MB’lık 100 dosyayı aktarması 3dk kadar sürdü.

Yine rsync ile 64MB’lık 25 dosyanın aktarımını 14sn de yaptı.

No comments

Add Comment

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.
E-Mail addresses will not be displayed and will only be used for E-Mail notifications.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Submitted comments will be subject to moderation before being displayed.