PostgreSQL Buffer Cache Nedir? Nasıl Kurulur?

PostgreSQL Buffer Cache Nedir? Nasıl Kurulur?
14 Ağu 2023

Pg_buffercache, PostgreSQL üzerinde kullanılan ve sorguların performans analizi için oldukça yararlı olabilen, bir verinin ne kadar önbelleğe alındığını görmenizi sağlayan bir PostgreSQL extension’udur. Eğer belirli bir ilişkinin verileri önbelleğe alındıysa, sorgunuzun verileri almak için doğrudan disk üzerindeki verilere erişmesi gerekmez, bunun yerine çok daha hızlı bir şekilde önbellekten bu verilere erişebilir. Pg_buffercache Nedir?

Pg_buffercache, shared buffers içeriğini incelemeyi sağlayan bir PostreSQL extension’udur. Bu extension’u kullanarak belirli bir objenin önbelleğe alınıp alınmadığını anlayabilirsiniz. Ayrıca önbelleğe alma ile alakalı performans sorunlarını gidermenize de yardımcı olabilir.

buffercache

Pg_buffercache Kurulumu

Öncelikle PostgreSQL sunucunuzda contrib paketinin kurulu olması gerekmektedir. Contrip paketi ile birçok PostgreSQL extension’unun source dosyasını sunucunuza almış olursunuz. Daha sonra ise PostgreSQL ile veri tabanına bağlanıp pg_buffercache extension’unu create edebilirsiniz.

 

 

Pg_buffercache Kullanımı

Spesific bir tablo için istatistikleri görüntülemeyi deneyeceğiz. Testlerimiz için PostgreSQL veri tabanında employee adında bir tablo oluşturduk ve içerisine bir milyon satırlık insert gerçekleştirdik. İlk adım olarak tablomuzun relfilenode’unu bulacağız. Tablo ve indeks gibi database objeleri OID’ler üzerinden yönetilirken içerdiği data dosyaları relfilenode değişkeni aracılığıyla yönetilir. Tablo ve indexlerin relfilenode ve OID değeri temelde aynıdır, fakat relfilenode değişkeni TRUNCATE, REINDEX, CLUSTER komutları kullanıldığında değişir. Tablomuzun relfilenode’unu aşağıdaki komutla bulabiliriz:

 

Relfilenode’u bulduktan sonra, OS cache istatistiklerini aşağıdaki sorgu ile görebiliriz:

Bu komut sonucunda aşağıdaki kolonları göreceğiz:

 

Mevcut Veritabanıyla İlişkili Objelerin Kullandığı Buffer (arabellek) Sayısını Görmek

Alttaki sorgu ile mevcut veritabanınızda önbelleğe(cache) alınmış top 10 obje için buffer istatistiklerini alabilirsiniz:

 

 

Veritabanlarının Cache’e (önbellek) Alınmış Block Sayılarını Görmek

Aşağıdaki sorgu ile mevcut veritabanınızın ve eğer varsa diğer veritabanlarınızın cache block sayılarını gözlemleyebilirsiniz:

Pg_buffercache Performance Tuning

Şimdi örnek bir senaryo ile buffer kullanımının performans üzerindeki etkisini gözlemleyeceğiz. Aşağıdaki örnekte ilk olarak veritabanımızı restart ettikten sonra (cold cache) ’employee’ tablosunun pg_buffercache kullanılarak buffer’a (önbelleğe) alınıp alınmadığını kontrol ettik. Gördüğünüz gibi pg_buffercache çıktısında sıfır kayıt var. 

 

Daha sonra ‘explain analyze’ çalıştırdık ve sorgu 255 ms civarında sürdü. (cold cache)

Daha sonra pg_buffercache kullanarak buffer içeriğini kontrol ettik ve bu sefer tablonun buffer’a alındığını gözlemledik. 

 

Daha sonra aynı sorguyu tekrar çalıştırdık ve bu sefer 156 ms’de tamamlandı. (warm cache) 

 

Bu sonuçlara baktığımızda önbelleğe alınan objeler üzerinde çalıştırılan sorguların çok daha hızlı sonuç döndürdüğünü görebiliriz.

Pg_buffercache gibi PostgreSQL özelliklerinin ve uzantılarının etkili bir şekilde kullanımı, veritabanı yönetiminde performansın optimize edilmesi için oldukça önemlidir. 

GTech olarak, sağlık, bankacılık, telekomünikasyon, perakende, enerji, kamu gibi birçok sektörde sistem ve veritabanı yönetimi hizmeti sunuyoruz. Siz de PostgreSQL üzerinde veri önbellekleme, performans analizi veya diğer konularda daha detaylı bilgi sahibi olmak için bizimle iletişime geçebilirsiniz.

Yazar: Mahmut Can Eçanefe, GTech Sistem ve Veritabanı Yönetimi Danışmanı