PostgreSQL 11: Postgres 9.6'dan Postgres 11'e bölümlemenin evrimi

Herkese harika bir Cuma dilerim! Kursun başlamasına giderek daha az zaman kalıyor "İlişkisel DBMS", bugün konuyla ilgili başka bir yararlı materyalin çevirisini paylaşıyoruz.

Geliştirme aşamasında PostgreSQL 11 Tablo bölümlemesini geliştirmek için bazı etkileyici çalışmalar yapılmıştır. Bölümleme tabloları - bu, PostgreSQL'de oldukça uzun süredir var olan bir işlevdir, ancak tabiri caizse, çok kullanışlı bir işlev haline geldiği sürüm 10'a kadar esasen mevcut değildi. Tablo mirasının bölümleme uygulamamız olduğunu daha önce belirtmiştik ve bu doğrudur. Yalnızca bu yöntem sizi işin çoğunu manuel olarak yapmaya zorladı. Örneğin, INSERT'ler sırasında bölümlere demetlerin eklenmesini istiyorsanız tetikleyicileri bunu sizin yerinize yapacak şekilde yapılandırmanız gerekir. Kalıtım yoluyla bölümleme çok yavaştı ve üstüne ek işlevsellik geliştirmek de zordu.

PostgreSQL 10'da, eski miras yöntemi kullanılarak çözülemeyen birçok sorunu çözmek için tasarlanmış bir özellik olan "bildirimsel bölümlemenin" doğuşunu gördük. Bu, verileri yatay olarak bölmemize olanak tanıyan çok daha güçlü bir araca yol açtı!

Özellik karşılaştırması

PostgreSQL 11, performansı artırmaya ve bölümlenmiş tabloları uygulamalar için daha şeffaf hale getirmeye yardımcı olan etkileyici bir dizi yeni özellik sunuyor.

PostgreSQL 11: Postgres 9.6'dan Postgres 11'e bölümlemenin evrimi
PostgreSQL 11: Postgres 9.6'dan Postgres 11'e bölümlemenin evrimi
PostgreSQL 11: Postgres 9.6'dan Postgres 11'e bölümlemenin evrimi
1. Sınırlayıcı İstisnaları Kullanmak
2. Yalnızca düğümleri ekler
3. Yalnızca bölümlenmemiş bir tabloya referans veren bölümlenmiş bir tablo için
4. Dizinler bölümün tüm anahtar sütunlarını içermelidir
5. Her iki taraftaki bölüm kısıtlamaları eşleşmelidir

Proizvoditelnost

Burada da iyi haberlerimiz var! Yeni yöntem eklendi bölümlerin silinmesi. Bu yeni algoritma sorgu koşuluna bakarak uygun bölümleri belirleyebiliyor WHERE. Önceki algoritma ise koşulu karşılayıp karşılamadığını belirlemek için her bölümü kontrol etti. WHERE. Bu durum bölüm sayısı arttıkça planlama süresinin de artmasına neden oldu.

9.6'da, kalıtım yoluyla bölümlemede, demetlerin bölümlere yönlendirilmesi genellikle demetin doğru bölüme yerleştirilmesi için bir dizi IF ifadesi içeren bir tetikleyici fonksiyonun yazılmasıyla yapılıyordu. Bu işlevlerin yürütülmesi çok yavaş olabilir. Sürüm 10'da eklenen bildirimsel bölümleme ile bu çok daha hızlı çalışır.

100 bölümlü bölümlenmiş bir tablo kullanarak, 10 BIGINT sütunu ve 1 INT sütunu olan bir tabloya 5 milyon satır yükleme performansını değerlendirebiliriz.

PostgreSQL 11: Postgres 9.6'dan Postgres 11'e bölümlemenin evrimi

Dizine alınmış bir kaydı bulmak ve bir kaydı işlemek için DML'yi yürütmek üzere bu tabloyu sorgulama performansı (yalnızca 1 işlemci kullanarak):

PostgreSQL 11: Postgres 9.6'dan Postgres 11'e bölümlemenin evrimi

Burada PG 9.6'dan bu yana her operasyonun performansının önemli ölçüde arttığını görebiliyoruz. İstekler SELECT özellikle sorgu planlaması sırasında birden çok bölümü hariç tutabilenler çok daha iyi görünür. Bu, zamanlayıcının daha önce yapması gereken birçok işi atlayabileceği anlamına gelir. Örneğin artık gereksiz bölümler için yollar yapılmıyor.

Sonuç

Tablo bölümleme PostgreSQL'de çok güçlü bir özellik haline gelmeye başlıyor. Verileri çevrimiçi olarak hızlı bir şekilde görüntülemenize ve yavaş, büyük DML işlemlerinin tamamlanmasını beklemeden çevrimdışına almanıza olanak tanır.. Bu aynı zamanda ilgili verilerin bir arada saklanabileceği, yani ihtiyacınız olan verilere çok daha verimli bir şekilde erişilebileceği anlamına gelir. Bu sürümde yapılan iyileştirmeler, tüm bu özellikler üzerinde yorulmadan çalışan geliştiriciler, gözden geçirenler ve onaylayıcılar olmasaydı mümkün olamazdı.
Hepsine teşekkürler! PostgreSQL 11 harika görünüyor!

İşte çok kısa ama oldukça ilginç bir makale. Yorumlarınızı paylaşın ve kaydolmayı unutmayın Açık gün, kurs programının ayrıntılı olarak ana hatlarıyla anlatılacağı.

Kaynak: habr.com

Yorum ekle