PostgreSQL 10 Sürümündeki Yenilikler

PostgreSQL Geliştirici Grubu PostgreSQL 10 sürümünü ve yeni eklenen özellikleri duyurdu. Bu sürümde ayrıca, yeni sürüm stratejisinde x.y formatına geçilmesine de karar verildi.  Bu da bir sonraki minör sürümün 10.1 ve bir sonraki majör sürümün 11 olması ve sürümlerin daha hızlı ilerlemesi anlamına da geliyor. Daha önce minör sürümler 9.3.4 gibi çıkıyor, majör sürümler de 9.4 şeklinde duyuruluyordu.

Mantıksal Replikasyon (Logical Replication) – Veri Dağıtımında publish/subscribe Altyapısı

Mantıksal replikasyon ile PostgreSQL replikasyon yeteneklerine veritabanı bazında ve hatta tablo seviyesinde bilgilendirme gönderme yetisini eklemiş oldu. Kullanıcılar artık istedikleri veritabanı kümesine istedikleri seviyede veri replikasyonu yapabilecek ve bu sayede majör sürüm güncellemeleri yaparken sistemleri durdurmak zorunda kalmayacaklar, gereksiz downtime oluşmayacak.

Beyana Dayalı Tablo Bölümlendirme (Declarative Table Partitioning)

Tablo bölümlendirme uzun yıllardır mevcuttu PostgreSQL’de. Ancak bu bölümlendirmelerde kullanıcının bir takım tetikleyiciler (trigger) kullanması, ve kurallara bağımlı olması söz konusuydu. PostgreSQL 10 ile gelen tablo bölümlendirme yapısı ise kullanıcıların kolayca aralık (range) ve liste bazlı bölümlendirilmiş tablolar oluşturmasına izin veriyor. Bu da daha olgun bir bölümlendirme söz dizimi sağlıyor, Bölümlendirme ile ilgili ileri özellikler için bu henüz daha bir başlangıç.

Gelişmiş Paralel Sorgular

PostgreSQL 10, sorguların daha fazla bölümünü paralel çalıştırabilme yeteneğine kavuştu. geliştirmelerin bir bölümü veri tarama esnasında paralel çalışabilme, ve paralel veri tarama (scan) sonrası parçaları birleştirirken optimize edilmiş bir yapıyı kapsıyor. Örneğin paralel sorgular ile bir tablodan yapılan ve sıralama içeren sorgu paralel süreçlerle çalıştırılıyor, dönen veri parçaları sıralamayı bozmadan bir araya getirilerek daha hızlı veri tarama sonuç getirme sağlanıyor.

accounts=# \timing
 Timing is on.
 accounts=# SELECT bid, count(*) FROM account_history WHERE delta > 1000 group by bid;
 ...
 Time: 324.903 ms

Aynı sorguyu 4 paralel sorgu ile çalıştırdığımızda 4.5 kat daha hızlı sonuç kümesi getirebiliyoruz:

accounts=# set max_parallel_workers_per_gather=4;
 SET
 Time: 0.822 ms
 accounts=# SELECT bid, count(*) FROM account_history
 WHERE delta > 1000 GROUP BY bid;
...
Time: 72.864 ms

Örnek Robert Haas Parallel Query v2 den alınmıştır.

Senkron Replikasyonda Çoğunluk Onayıyla İşlem (Quorum Commit)

PostgreSQL 10, senkron replikasyonda çoğunluk kararı ile onaylanmış commit özelliği getiriyor. Bu da birincil veritabanının veri gönderdiği replikalara yazma işleminin tamamlandığına karar vermesi için belirlenen sayıda replikadan onay almasının yeterli olacağını ve işlemleri hızlandıracağını anlatıyor. Bu sayıya veritabanı yöneticisi karar verecek,

PostgreSQL 9.6 sürümünde senkron replikasyonda uzak replikanın veriyi almasından öte, bunun diske yazıldığının garantisini de verebileceği yeni bir yapı gelmişti.

synchronous_commit = 'remote_apply';
synchronous_standby_names = FIRST 2(node1,node2);

Performansa negatif etki etse dahi, veri kaybına karşı daha dirençli bir yapı olduğu için biz de bazı müşterilerimizde bu özelliği kullanıyorduk. Şimdi ise birden fazla replika varsa bu replikalardan x tanesi onay verirse, yani diske yazdıysa güvenli olarak replikasyon işleminin tamamlandığına karar ver, geri kalanları bekleme sen devam et diyebiliyoruz. Bu da birincil üzerindeki cevap bekleme süresini kısalttığı için performansı arttırıyor.

synchronous_commit = 'remote_apply';
synchronous_standby_names = ANY 2(node1,node2,node3);

FIRST parametresi daha önceki majör sürümde “remote apply” için kullandığımız parametreydi, şimdi ek olarak ANY parametresi ile sıralama olmaksızın herhangi ikisine yazdığında güvenli kabul et replikasyon işlemini diyebiliyoruz.

JSON ve JSONB Alanlar için Full Text Search Desteği

Daha önce JSON desteği konusundaki yazımızı – PostgreSQL – JSON Veri Tipi İşlemleri – okumadıysanız, PostgreSQL’in çok güçlü bir JSON veri tipi desteği olduğunu bilmiyor olabilirsiniz. PostgreSQL Yapısal (Structural) Veritabanı içerisinde çok güçlü bir Şemasız (NOSQL) veri desteği sunuyor. Şimdi ise bu JSON veri tipi olarak tanımladığınız alanlarda Full Text Search desteği var. Bu da arama sorgularının çok daha hızlı yapılabileceği anlamına geliyor.

file_fdw Harici Uygulamayı Çalıştırabiliyor

FDW, yani Foreign Data Wrapper, benim tabirimle PostgreSQL’in Yabancı Veri Paketleyicileri farklı veritabanı veya dosya sistemlere bağlanarak veri almayı, sorgulamayı mümkün hale getiren araçlardır. Bu konuda daha detaylı bilgi almak için: PostgreSQL’in Yabancı Veri Paketleyicileri – Foreign Data Wrappers yazımıza bakabilirsiniz.

CREATE FOREIGN TABLE
   test(a int, b text)
   SERVER csv
   OPTIONS (program 'gunzip -c /tmp/data.czv.gz');

File FDW, sunucunun dosya sistemindeki bir dosya içeriğinden, uygulamanın çıktısından veya artık bu dosyanın farklı bir uygulama ile çalıştırılmasından ortaya çıkan çıktının okunması ve veri olarak içeri alınması, tablo gibi sorgulanabilmesini sağlayan fevkalade bir araç.

The file_fdw module provides the foreign-data wrapper file_fdw, which can be used to access data files in the server’s file system, or to execute programs on the server and read their output. The data file or program output must be in a format that can be read by COPY FROM; see COPY for details. Access to data files is currently read-only. Source: https://www.postgresql.org/docs/current/static/file-fdw.html

SCRAM-SHA-256 Yetkilendirme

Salted Challenge Response Authentication Mechanism (SCRAM) olarak RFC5802 ile tanımlanmış olan yetkilendirme mekanizması, artık rahatlıkla MD5 yerine kullanılabilir. MD5’e göre çok daha güvenli bir parola iletimi yöntemi sunan SCRAM kullanımı için istemci tarafında SCRAM desteğinin olması gerektiğini hatırlatalım.

Yeni İzleme Özellikleri

pg_stat_activity’den daha önce bahsetmiştik. PostgreSQL sistem görünümlerinden birisi olan pg_stat_activity çalışmakta olan tüm PostgreSQL arka plan işlemlerinin bir listesini tutar. Bu işlemlere hangi sorguların çalışmakta olduğu, bağlı olan kullanıcılar ve ne zaman bağlandıkları, çalışmakta olan işlem (transaction) ve sorguların başlangıç zamanı gibi bilgiler dahildir.

PostgreSQL 10 da gelen yeni özelliklerden kaynaklı olarak pg_stat_activity görünümü artık şu bilgileri de içeriyor:

  • auxiliary processes
  • worker processes
  • WAL senders

Daha detaylı PostgreSQL izleme özellikleri için PostgreSQL 101: Aktivite İzleme yazımıza bakabilirsiniz.