Tag: PostgreSQL wal_level

PostgreSQL’de Write Ahead Logging (WAL) Kavramı

Write Ahead Logging (WAL), veri bütünlüğünü(data integrity) sağlamaya yönelik standart bir yöntemdir. Postgresql, üzerlerinde yapılan, insert/update/delete işlemlerini, bilgilerin asıl tutulduğu diskteki Data Page’lere yazmanın yanında Transaction Log adı verilen log dosyalarına da yazarlar. Hatta verilerin  tutulduğu data page’den önce transaction log’u diske yazar, sonrasında ihtiyaca göre data page’e yazar. Hatta commit edilen uygulama başarılı bir şekilde Commit edildi bilgisini Transcation Log dosyası diske yazıldığında verirler, data Page’lere diske yazılmasını beklemezler. Transaction Log’lar ardışıl disk Page’lerinde oldukları için onların diske yazılması muhtemelen dağınık durumda bulunan Data Page’lerin diske yazılmasından daha hızlı olacaktır.

NOT : PostgreSQL performans için Atomicity ve Durability’den taviz  vermek isteyenlere özel Transcation Log’ların diske yazılma işleminin Asenkron yapılmasına da olanak tanır. Bu durumda Postgresql, Transaction Log’un diske yazılmasını beklemeden Transaction’ın başarılı olduğunu uygulamaya bildirir ancak tam bu sırada sunucu çökmesi durumunda veri kaybı yaşanabilir.

Transaction log, veritabanının önemli bir parçasıdır, çünkü veritabanı yönetim sisteminin bir sistem arızası meydana geldiğinde bile herhangi bir veriyi kaybetmemesi gerekir. Elektrik kesintisi veya sunucu çökmesine neden olan başka bir sunucu arızası gibi arızalar nedeniyle hiçbir verinin kaybolmamasını sağlamak için bir veritabanı sistemindeki tüm değişikliklerin ve eylemlerin bir geçmiş logudur. Log, halihazırda yürütülen her transaction hakkında yeterli bilgi içerdiğinden, veritabanı sunucusunun, sunucu çökmesi durumunda transaction log’daki değişiklikleri ve eylemleri yeniden çalıştırarak veritabanı clusterı kurtarabilmesi gerekir. Veri tabanında transaction log kayıtlarının tutulmadığı durumu düşündüğümüzde, shared buffer poolda değiştirilmiş ama diske henüz değişikliklerin kalıcı olarak yazılmadığı durumlarda bir kesinti veya veri tabanı kapanması olduğunda transactionların tabloya eklediği veriler kaybedilir.

NOT : Bu arada, crash durumunda recovery işleminin nasıl yapıldığına delecek olursak; Her bir checkpoint işleminden sonra transaction log dosyası sıfırlanır ve checkpoint ile ilgili bilgiler pg_control dosyasına yazılır, recovery işlemi yapılacağında sunucu öncelikle pg_control dosyasını ve checkpoint kaydını okur ve checkpoint kaydından sonraki transactionları REDO işleminden geçirir yani wal dosyalarından okur. pg_controldata ile controlfile’ın içine baktığımızda yukarıdada yazdığım gibi en sonki checkpointin LSN yazacaktır.

pg_controldata
(continue reading…)

 1,767 total views,  2 views today


PostgreSQL Mimarisi

Proses Mimarisi

Postgresql, multi-process mimarisine sahip istemci-sunucu tipli ilişkisel veritabanı yönetim sistemidir ve tek bir sunucuda çalışır. İstemci, PostgreSQL sunucusuna bir istek gönderir ve PostgreSQL sunucusu istemci isteğine bir yanıt verir. İstemci ve sunucu genelde farklı sunucularda çalışırken aralarındaki bağlantı TCP/IP ağ bağlantısı üzerinden olur. PostgreSQL sunucusu, istemciden gelen birden çok sessionları eşzamanlı  yönetir, bunu her session için bir proses başlatarak sağlar.

Sunucu prosesi olan postgres prosesi veritabanı dosyalarını yönetir, istemci uygulamalarından gelen bağlantıları kabul eder ve istemci adına eylemler gerçekleştirir. Ana sunucu prosesi olan postgres prosesinin, her yeni bağlantı için yeni bir proses açtığını zaten yukarıda söylemiştik. Bu nedenle istemci ve sunucu prosesleri, ana sunucu prosesinin müdahalesi olmadan birbirleriyle iletişim kurar.  PostgreSQL sunucusu aşağıdaki gibi kabaca dört alt sisteme bölünebilir:

  • Process manager
  • Query processor
  • Utilities
  • Storage manager

Process manager

PostgreSQL’i başlattığımızda başlatılan ilk proses /usr/pgsql-12/bin/postgres daemon prosesidir. Bu prosesin recovery, shared data structures/memory  alanlarını başlatmak, zorunlu ve isteğe bağlı prosesleri başlatmak gibi pek çok sorumluluğu vardır. Bu prosesler aynı zamanda utility prosesler olarak da adlandırılır ve bgwriter, checkpointer, autovacuum launcher, log writer, stats collector prosesleri gibi prosesleri içerir. Ayrıca, daemon prosesi bağlantı isteklerini dinler, istemcilerden bağlantı istekleri alır ve istemci için sunucuda backend prosesi oluşturur. (continue reading…)

 1,373 total views,  2 views today


  • Sertifikasyon



  • Etiketler

  • Topluluklar

                     
                     
  • Copyright © 1996-2010 Mustafa Bektaş Tepe. All rights reserved.
    Türkçeleştirme Blogizma | AltyapıWordPress