Write Ahead Log
wal_level
type: enum default: replica context: postmaster values: [minimal, replica, logical] restart: Gerektirir
Bu parametre WAL’a ne kadar bilgi yazılacağını belirler. Varsayılan değer
-
-
-
Her düzey, alt düzeylerde kaydedilen tüm bilgileri içerir. Bu parametre yalnızca sunucu başlangıcında ayarlanabilir.
replica
‘dır.-
replica
değeri bir standby sunucu üzerinde çalışan read-only sorgular dahil, WAL archiving ve replikasyon işlemleri için yeterli veriyi sağlar.-
minimal
, bir çökme veya ani kapanma durumunda recover işlemleri için gereken bilgileri garantiye alır. minimal değeri toplu veri operasyonlarıyla ilgili işlemleri (CREATE TABLE AS SELECT, CREATE INDEX) WAL günlüğüne kaydetmeyerek depolama avantajı sağlar.-
logical
, logical decoding ve logical replication için gerekli bilgileri sağlar. logical seviyesi, replica seviyesinde kaydedilen bilgiler ek, WAL’dan mantıksal değişikliklerin ayıklanmasına olanak sağlamak için gerekli bilgileri günlüğe kaydeder. logical seviyesini kullanmak, özellikle birçok tablo REPLICA IDENTITY FULL
olarak yapılandırılmışsa ve fazla UPDATE
ve DELETE
ifadesi yürütülüyorsa WAL hacmini artıracaktır.Her düzey, alt düzeylerde kaydedilen tüm bilgileri içerir. Bu parametre yalnızca sunucu başlangıcında ayarlanabilir.
minimal WAL, verileri base backup ve WAL günlüklerinden yeniden yapılandırmak için yeterli bilgi içermez, bu nedenle WAL archiving ve streaming replication işlemleri için
replica
veya üstü ayar kullanılmalıdır. fsync
type: bool default: on context: sighup
Güncellemelerin diske senkronizasyonunu zorlar. PostgreSQL sunucusu bu parametre açıksa,
fsync, yalnızca postgresql.conf dosyasından veya sunucu komut satırından ayarlanabilir. Bu parametreyi kapatdığınızda
fsync ()
sistem çağrıları veya eşdeğer yöntemler ile değişikliklerin fiziksel olarak diske yazıldığından emin olmaya çalışır. Bu, veritabanı kümesinin bir işletim sistemi veya donanım çökmesinden sonra tutarlı bir duruma geri yüklenebilmesini sağlar.fsync
‘i kapatmak genellikle bir performans avantajı olmasına rağmen bir elektrik kesintisi veya sistem çökmesi durumunda kurtarılamaz veri bozulmasına neden olabilir.fsync, yalnızca postgresql.conf dosyasından veya sunucu komut satırından ayarlanabilir. Bu parametreyi kapatdığınızda
full_page_writes
‘i de kapatmak düşünülebilir. synchronous_commit
type: enum default: on context: user values: [local, remote_write, remote_apply, on, off]
Mevcut transaction’ın senkronizasyon seviyesini ayarlar. Veritabanı sunucusu istemciye bir ‘success’ işareti döndürmeden önce ne kadar WAL işlemenin tamamlanması gerektiğini belirtir. Geçerli değerleri
remote_apply
, on
(varsayılan), remote_write
, local
ve off
.synchronous_commit
ayarlarının yetenekleri:
synchronous_commit setting | local durable commit | standby durable commit after PG crash | standby durable commit after OS crash | standby query consistency |
---|---|---|---|---|
remote_apply | + | + | + | + |
on | + | + | + | - |
remote_write | + | + | - | - |
local | + | - | - | - |
off | - | - | - | - |
wal_sync_method
type: enum default: fdatasync context: sighup values: [fsync, fdatasync, open_sync, open_datasync]
WAL değişikliklerini diske göndermeye zorlamak için kullanılan yöntemi belirtir.
fsync
kapalıysa bu ayar geçersizdir. Olası değerler şunlardır: open_datasync
, fdatasync
, fsync
, fsync_writethrough
, open_sync
. Verilen seçenekler tüm platformlarda mevcut değildir. fdatasync
Linux’ta varsayılan değerdir. Bu parametre yalnızca postgresql.conf dosyasından veya sunucu komut satırından ayarlanabilir. full_page_writes
type: bool default: on context: sighup
PostgreSQL sunucusu bu parametre açık olduğunda her bir disk page’inin tüm içeriğini, ilgili page’in checkpoint’den sonraki ilk değişikliğnde WAL’a yazar. Tüm page’in saklanması, page’in doğru bir şekilde geri yüklenmesini garanti eder ancak WAL’a yazılması gereken veri miktarını artırır. (WAL replay her zaman bir checkpoint’den başlar, bunu bir checkpoint’den sonra her sayfanın ilk değişikliği sırasında yapması yeterlidir. Bu nedenle, tüm page’i yazma maliyetini azaltmanın bir yolu, checkpoint aralığı parametrelerini artırmaktır.)
Bu parametrenin kapatılması çalışmayı hızlandırır ancak bir sistem arızasından sonra kurtarılamayan veri bozulmalarına neden olabilir.
Bu parametrenin kapatılması, point-in-time recovery (PITR) için WAL arşivleme kullanımını etkilemez.
Bu parametre yalnızca postgresql.conf dosyasından ve sunucu komut satırından ayarlanabilir. Varsayılan açıktır.
Bu parametrenin kapatılması çalışmayı hızlandırır ancak bir sistem arızasından sonra kurtarılamayan veri bozulmalarına neden olabilir.
Bu parametrenin kapatılması, point-in-time recovery (PITR) için WAL arşivleme kullanımını etkilemez.
Bu parametre yalnızca postgresql.conf dosyasından ve sunucu komut satırından ayarlanabilir. Varsayılan açıktır.
wal_log_hints
type: bool default: off context: postmaster restart: Gerektirir
Bu parametre
on
değerinde PostgreSQL sunucusu, hint bits olarak bilinen kritik olmayan değişiklikler için bile bir checkpoint’den sonra ilgili page’in ilk değişikliğinde her disk page’inin tüm içeriğini WAL’a yazar. Bu parametre yalnızca sunucu başlangıcında ayarlanabilir. Varsayılan değeri off
‘dur. wal_compression
type: bool default: off context: superuser
Bu parametre
Bu parametrenin açılması kurtarılamaz veri bozulması riskini artırmaz, WAL boyutunu azaltır. Fakat, sıkıştırma ve WAL replay sırasında sıkıştırmanın açılmasından kaynaklı fazladan CPU harcanmasına neden olur.
on
değerinde PostgreSQL sunucusu WAL’a yazılan bir full page görüntüyü sıkıştırır. WAL replay sırasında sıkıştırılmış bir page görüntüsü açılacaktır. Varsayılan değer off
‘dur. Bu ayarı yalnızca süper kullanıcılar değiştirebilir. Bu parametrenin açılması kurtarılamaz veri bozulması riskini artırmaz, WAL boyutunu azaltır. Fakat, sıkıştırma ve WAL replay sırasında sıkıştırmanın açılmasından kaynaklı fazladan CPU harcanmasına neden olur.
wal_init_zero
type: bool default: on context: superuser
on
ayarında (varsayılan), yeni WAL dosyaları ilk kullanımdan önce sıfır ile doldurulur. Böylece, bazı dosya sistemlerinde WAL kayıtları yazılmadan önce alanın tahsis edilmesi sağlanır. wal_recycle
type: bool default: on context: superuser
on
ayarında (varsayılan), WAL dosyalarını yeniden adlandırarak geri kullanımını sağlar. Bu, yeni dosya oluşturma yükünden kurtarır. COW dosya sistemlerinde yenilerini oluşturmak daha hızlı olabildiğinden bu davranışı devre dışı bırakma seçeneği verilmiştir. wal_buffers
type: integer default: -1 min: -1 max: 262143 unit: 8kB context: postmaster restart: Gerektirir
Henüz diske yazılmamış WAL verileri için kullanılan shared memory miktarıdır. Öntanımlı -1 ayarı, shared_buffers’ın 1 / 32’ine eşit boyutu kullanır. Otomatik seçim çok büyük veya küçükse bu değer elle ayarlanabilir. 32kB’den küçük herhangi bir pozitif değer 32kB olarak değerlendirilecektir. Bu değer birim olmadan belirtildiğinde WAL blokları olarak alınır (XLOG_BLCKSZ bayt – 8kB). Öntanımlı -1 ayarı ile seçilen otomatik ayarlama çoğu durumda makul sonuçlar verir. Bu parametre yalnızca sunucu başlangıcında ayarlanabilir.
wal_writer_delay
type: integer default: 200 ms min: 1 max: 10000 unit: ms context: sighup
WAL writer’ın WAL’ı zaman cinsinden ne sıklıkla temizleyeceğini (flush) belirtir. WAL temizledikten sonra asenkron commit edilen bir transaction ile daha erken uyanmadıkça, WAL writer
wal_writer_delay
süresince uyur. Son temizleme, wal_writer_delay
öncesinde gerçekleştiyse ve bu zamandan beri wal_writer_flush_after
değerinden daha az WAL üretildiyse, WAL kayıtları yalnızca işletim sistemine yazılır, diske temizlenmez. Bu değer birimsiz belirtilirse milisaniye olarak alınır. Varsayılan değer 200 milisaniyedir (200 ms). wal_writer_delay
parametresini 10’un katı olmayan bir değere ayarlamak 10’un bir sonraki katına ayarlamakla aynı sonuçları verebilir. Bu parametre yalnızca postgresql.conf dosyasından ve sunucu komut satırından ayarlanabilir. wal_writer_flush_after
type: integer default: 1 MB min: 0 max: 2147483647 unit: 8kB context: sighup
WAL writer’ın volume cinsinden WAL’ı ne sıklıkla temizlediğini belirtir. Son temizleme,
wal_writer_delay
öncesinden gerçekleştiyse ve o zamandan beri wal_writer_flush_after
değerinden daha az WAL üretildiyse, WAL yalnızca işletim sistemine yazılır, diske temizlenmez. wal_writer_flush_after
0 olarak ayarlanmışsa, WAL verileri anında temizlenir. Bu değer birim olmadan belirtilirse WAL blokları olarak alınır. (XLOG_BLCKSZ bayt – 8kB). Öntanımlı değeri 1MB’dir. Bu parametre yalnızca postgresql.conf dosyasından ve sunucu komut satırından ayarlanabilir. wal_skip_threshold
type: integer default: 2 MB min: 0 max: 2147483647 unit: kB context: user
wal_level = minimal
olduğunda ve bir transaction kalıcı bir ilişki oluşturduktan ya da yeniden yazıldıktan sonra commit edildiğinde, bu ayar yeni verilerin nasıl kalıcı hale getirileceğini belirler. Veriler bu ayardan küçükse WAL log’larına yazılır, değilse fsync özelliği kullanılır. Depolamanızın özelliklerine bağlı olarak bu tür commitler eşzamanlı transaction’ları yavaşlatıyorsa bu değeri değiştirmek faydalı olabilir. Bu değer birimsiz belirtilirse kilobayt olarak alınır. Varsayılan, iki megabayttır (2MB). commit_delay
type: integer default: 0 min: 0 max: 100000 context: superuser
Bu parametrenin ayarlanması bir WAL temizliği başlatılmadan önce gecikme süresi ekler. Daha fazla sayıda transaction’ın tek bir WAL temizleme yoluyla commit edilmesini sağlayarak grup commit verimini artırır. fsync devre dışı bırakılırsa gecikme yapılmaz. Bu değer birimsiz belirtilirse, mikrosaniye olarak alınır. commit_delay öntanımlı değeri 0’dır (gecikme yok). Bu ayarı yalnızca süper kullanıcılar değiştirebilir.
commit_siblings
type: integer default: 5 min: 0 max: 1000 context: user
commit_delay’in gecikmeyi gerçekleştirmesi için gerekli minimum eşzamanlı açık transaction sayısını belirtir. Öntanımlı değeri 5 transaction’dır.
Checkpoints
checkpoint_timeout
type: integer default: 5 min min: 30 max: 86400 unit: s context: sighup
Otomatik WAL checkpoint’leri arasında maksimum süreyi belirtir. Bu değer birimsiz belirtilirse, saniye olarak alınır. Geçerli aralık 30 saniye ile 1 gün arasındadır. Varsayılan değeri 5 dakikadır (5min). Bu parametrenin artırılması, crash recovery için gerekli süreyi artırabilir. Bu parametre yalnızca postgresql.conf dosyasından ve sunucu komut satırından ayarlanabilir.
checkpoint_completion_target
type: real default: 0.5 min: 0 max: 1 context: sighup
Total checkpoint süresinin bir bölümü olarak tamamlama hedefini belirtir. Öntanımlı değeri 0,5’tir. Bu parametre yalnızca postgresql.conf dosyasından ve sunucu komut satırından ayarlanabilir.
checkpoint_flush_after
type: integer default: 256 kB min: 0 max: 256 unit: 8kB context: sighup
Bir checkpoint gerçekleştirilirken bu miktardan daha fazla veri yazıldığında, bunları işletim sistemi depolamasına yazmaya zorlar. Bazı platformlarda bu ayarın hiçbir etkisi olmayabilir. Bu değer birimsiz belirtilirse bloklar olarak alınır (BLCKSZ bayt – 8kB). Geçerli aralık zorunlu geri yazmayı devre dışı bırakan 0 ile 2MB arasıdır. Öntanımlı değeri Linux’ta 256kB, diğer sistemlerde 0’dır. Bu parametre yalnızca postgresql.conf dosyasından ve sunucu komut satırından ayarlanabilir.
checkpoint_warning
type: integer default: 30 s min: 0 max: 2147483647 unit: s context: sighup
checkpoint segmentleri bundan daha sık doldurulursa uyarıları etkinleştirir. Bu değer birimsiz belirtilirse saniye olarak alınır. Öntanımlı 30 saniyedir (30s). 0 uyarıyı devre dışı bırakır.
checkpoint_timeout
değeri checkpoint_warning
‘den azsa hiçbir uyarı üretilmez. Bu parametre yalnızca postgresql.conf dosyasından ve sunucu komut satırından ayarlanabilir. min_wal_size
type: integer default: 80 MB min: 2 max: 2147483647 unit: MB context: sighup
WAL disk kullanımı bu ayarın altında kaldığı sürece, eski WAL dosyalarını silmek yerine checkpoint’de tekrar kullanmak için geri dönüştürür. Bu değer birimsiz belirtilirse megabayt olarak alınır. Öntanımlı 80 MB’dir. Bu parametre yalnızca postgresql.conf dosyasından ve sunucu komut satırından ayarlanabilir.
Archiving
archive_mode
type: enum default: off context: postmaster values: [always, on, off] restart: Gerektirir
Bu parametre etkinleştirildiğinde, tamamlanan WAL segmentleri
archive_command
ile arşiv depolamaya gönderilir. off
, on
ve always
modları vardır. Normal çalışmada on
ile always
modu arasında fark yoktur. always
ayarında archive recovery ve standby modunda da WAL arşivleyici etkinleştirilir. always
modunda, arşivden geri yüklenen veya streaming replication ile akışa alınan tüm dosyalar arşivlenir. archive_command
type: string context: sighup
Tamamlanmış bir WAL dosyası segmentini arşivlemek için çalıştırılacak kabuk komutudur. Değerdeki her
%p
arşivlenecek dosyanın path’i, her %f
ise yalnızca dosya adıyla değiştirilir. path kümenin veri diziniyle ilişkilidir. Bu parametre yalnızca postgresql.conf dosyasından ve sunucu komut satırından ayarlanabilir. archive_timeout
type: integer default: 0 s min: 0 max: 1073741823 unit: s context: sighup
archive_command yalnızca tamamlanmış WAL segmentleri için çağrılır. Sunucunuz çok az WAL trafiği oluşturuyorsa bir transaction tamamlanması ile arşiv depolamasına gönderilmesi arasında gecikme olabilir.
archive_timeout
parametresi sunucuyu periyodik olarak yeni bir WAL segment dosyasına geçmeye zorlayacak şekilde ayarlanabilir. Bununla arşivlenmemiş verilerin ne kadar eski olabileceği sınırlandırılır. Zorunlu geçiş nedeniyle erken kapatılan arşivlenmiş dosyaların hala tamamen dolu dosyalarla aynı uzunlukta olduğuna dikkat edin. Bu nedenle, çok kısa archive_timeout
kullanmak pek önerilmez. Bu arşiv depolama alanınızı şişirecektir. 1 dakikalık archive_timeout
ayarları genellikle makuldur. Verilerin primary sunucudan daha hızlı kopyalanması isteniyorsa arşivleme yerine streaming replication kullanılabilir. Bu değer birimsiz belirtilirse saniye olarak alınır. Bu parametre yalnızca postgresql.conf dosyasından ve sunucu komut satırından ayarlanabilir.Archive Recovery
restore_command
type: string context: postmaster restart: Gerektirir
WAL dosya serisinin arşivlenmiş bir bölümünü almak için yürütülecek kabuk komutudur. Bu parametre arşiv kurtarma için gereklidir, streaming replication için isteğe bağlıdır. Verilen string’teki her bir
%f
arşivden alınacak dosyanın adıyla, %p
ise sunucudaki kopya hedef path adı ile değiştirilir. Path adı kümenin veri diziniyle ilişkilidir. Her bir %r
geçerli son yeniden başlatma noktasını içeren dosyanın adıyla değiştirilir. %r
genellikle warm-standby yapılandırmalarında kullanılır bkz. Komut başarılı olduğunda 0 exit status, arşivde bulunmayan dosyaları istediğinde 0 farklı bir değer döndürür. Bu parametre yalnızca sunucu başlangıcında ayarlanabilir.Örnekler:
restore_command = 'cp /mnt/server/archivedir/%f "%p"'
restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"' # Windows
Komutun veritabanı sunucusu kapatmanın bir parçası olarak kullanılan SIGTERM dışında bir sinyalle veya kabuktan kaynaklanan bir hatayla (komut bulunamadı gibi) sonlandırılması durumunda recovery işlemi durdurulur ve sunucu başlatılmaz.
archive_cleanup_command
type: string context: sighup
İsteğe bağlı olan bu parametre, her restartpoint’de yürütülecek kabuk komutunu belirtir.
archive_cleanup_command
‘ın amacı artık standby sunucu tarafından ihtiyaç duyulmayan eski arşivlenmiş WAL dosyalarını temizlemek için bir mekanizma sağlamaktır. Her bir %r
son geçerli restartpoint’i içeren dosyanın adıyla değiştirilir. Bu bilgiler, arşivi mevcut geri yüklemeden yeniden başlatmayı sağlamasında gereken minimum düzeye indirmek için kullanılır. pg_archivecleanup modülü genellikle archive_cleanup_command
‘da single-standby konfigürasyonlar için kullanılır, örneğin:archive_cleanup_command = 'pg_archivecleanup /mnt/server/archivedir %r'
Aynı arşiv dizininden birden fazla standby sunucu restore ediliyorsa, sunuculardan herhangi birinin ihtiyaç duymadığı WAL dosyalarının silinmediğinden emin olun.
Komut 0’dan farklı bir exit status döndürüldüğünde log dosyasına bir uyarı mesajı yazılır. Komutun bir sinyal veya kabuk tarafından bir hatayla sonlandırılması durumunda (komut bulunamadı gibi) fatal error gerçekleşir.
Bu parametre yalnızca postgresql.conf dosyasından ve sunucu komut satırından ayarlanabilir.
archive_cleanup_command
komutu genellikle warm-standby konfigürasyonunda kullanılır bkz. .Komut 0’dan farklı bir exit status döndürüldüğünde log dosyasına bir uyarı mesajı yazılır. Komutun bir sinyal veya kabuk tarafından bir hatayla sonlandırılması durumunda (komut bulunamadı gibi) fatal error gerçekleşir.
Bu parametre yalnızca postgresql.conf dosyasından ve sunucu komut satırından ayarlanabilir.
recovery_end_command
type: string context: sighup
Bu parametre, recovery işleminin sonunda yalnızca bir kez yürütülecek bir kabuk komutunu belirtir. İsteğe bağlı bir parametredir. Amacı, replication ve recovery sonrasında temizleme için bir mekanizma sağlamaktır. Herbir
Komut 0’dan farklı bir exit status döndürdüğünde log dosyasına bir uyarı mesajı yazılır ve veritabanı yine de başlatılır. Komutun bir sinyal veya kabuk tarafından bir hatayla sonlandırılması durumunda (komut bulunamadı gibi) veritabanı başlatmaya devam etmez.
Bu parametre yalnızca postgresql.conf dosyasında ve sunucu komut satırından ayarlanabilir.
%r
, archive_cleanup_command
‘da olduğu gibi geçerli en son yeniden başlatma noktasını içeren dosyanın adıyla değiştirilir.Komut 0’dan farklı bir exit status döndürdüğünde log dosyasına bir uyarı mesajı yazılır ve veritabanı yine de başlatılır. Komutun bir sinyal veya kabuk tarafından bir hatayla sonlandırılması durumunda (komut bulunamadı gibi) veritabanı başlatmaya devam etmez.
Bu parametre yalnızca postgresql.conf dosyasında ve sunucu komut satırından ayarlanabilir.
Recovery Target
Recovery varsayılan olarak WAL log’larının sonuna kadar devam edecektir. Daha öncesinde bir durma noktasını belirtmek için aşağıdaki parametreler kullanılabilir. recovery_target
, recovery_target_lsn
, recovery_target_name
, recovery_target_time
ve recovery_target_xid
‘den en fazla biri kullanılabilir. Yapılandırma dosyasında bunların birden fazlası belirtilirse hata verir. Bu parametreler yalnızca sunucu başlangıcında ayarlanabilir.
recovery_target = 'immediate'
type: string context: postmaster restart: Gerektirir
Bu parametre, recovery işleminin tutarlı bir duruma ulaşılır ulaşılmaz, yani mümkün olan en kısa sürede bitmesi gerektiğini belirtir. ‘immediate’ şu anda izin verilen tek değerdir.
recovery_target_name
type: string context: postmaster restart: Gerektirir
Bu parametre, recovery işleminin devam edeceği adlandırılmış geri yükleme noktasını (
pg_create_restore_point ()
ile oluşturulan) belirtir. recovery_target_time
type: string context: postmaster restart: Gerektirir
Bu parametre, recovery işleminin devam edeceği zaman damgasını belirtir. Parametrenin değeri,
timestamp with time zone
veri tiple ile aynı formatta bir zaman damgasıdır, tek farkı bir saat dilimi kısaltması kullanılamaz (timezone_abbreviations
değişkeni yapılandırma dosyasında ayarlanmadıkça). Tercih edilen stil UTC’den sayısal bir uzaklık kullanmaktır veya tam bir saat dilimi adı yazalabilir, örneğin, Europe/Istanbul
. recovery_target_xid
type: string context: postmaster restart: Gerektirir
Bu parametre, recovery işleminin devam edeceği transaction ID’sini belirtir. Transaction ID’leri transaction başlangıcında sıralı olarak atanmasına rağmen transaction’ların farklı sayısal sırada tamamlanabileceğine dikkat edin. Kurtarılacak transaction’lar, belirtilen transaction’dan önce yapılan commmit’dir.
recovery_target_lsn
type: string context: postmaster restart: Gerektirir
Bu parametre, recovery işleminin devam edeceği write-ahead log konumunun LSN’sini belirtir. Kesin durma noktası ayrıca recovery_target_inclusive’de bağlıdır. Bu parametre,
pg_lsn
sistem veri tipi kullanılarak parse edilir.Bu bölümdeki ayarların yapılmasıyla ilgili ek bilgi için WAL Yapılandırması bölümüne bakın.
Kaynak:
[2]. postgresqlco.nf