Bu sayfa makine çevirisidir. İngilizce orijinalini okuyun. English

IBSurgeon kütüphanesi

1.7 Terabyte Firebird SQL veritabanını ayarlama

Alexey Kovyazin, 14-Temmuz-2014

Önceki makalelerimizden hatırlayacağınız gibi, Firebird performans düşüşü hakkındaki mitleri araştırdık ( /tr/articles/firebird-performance-degradation-tests-myths-and-truth/), burada 9Gb’den 30Gb’ye kadar birkaç veritabanı oluşturduk ve ayrıca çok büyük bir Firebird veritabanını (1,7 terabayt) test ettik (/tr/articles/more-details-about-1-7-terabyte-firebird-sql-database/).

Tüm testler aynı donanım üzerinde yapıldı; bu, düşük bütçeli bir yapılandırma: CPU AMD-FX8350, RAM 16GB, SATA yazılım RAID1 2x4Tb HDD Seagate sürücüleri, İşletim Sistemi Windows Server 2008R2 (2008R2 64 bit) ve aynı Firebird yapılandırmasıyla: Firebird 2.5.2 64-bit, SuperServer, artırılmış sayfa tamponları ve TempCacheSize ile. Bu SuperServer yapılandırma dosyasını şu konumdan ücretsiz indirebilirsiniz: /tr/optimized-firebird-configuration/

Sonuç olarak, veritabanı performansının şu görüntüsünü elde ettik:

![Firebird performansı 1813Gb (1.7Tb)](/images/performance/perf7_performance_with 1800Gb_Firebird_database.png)

Şekil 1. 9Gb’den 30Gb’ye ve 1,7Tb’ye performans düşüşü

  1. nokta 30Gb veritabanı için performans işareti ve 12. nokta 1,7 Terabayt veritabanı için - veritabanı boyutu 60 kat büyüdü (30Gb’den 1813Gb’ye), performans kaybı 2,4 kat oldu (407’den 169 puana).

Yani soru şu: aynı donanımda yapılandırma ayarlarıyla Firebird performansını artırabilir miyiz?

Ve cevap: evet!

FirebirdSQL’i Güçlendirme

Hatırlayacağınız gibi, bu testte yoğun INSERT’ler ve daha az yoğun UPDATE’ler gerçekleştiren 20 eşzamanlı bağlantı çalıştırdık.

Tüm SELECT’ler kısa ve iyi tanımlanmış, etkili SQL yürütme planlarıyla, bu yüzden tipik bir OLTP (çevrimiçi işlem işleme) uygulamasıdır. Bu tür uygulamalar için performans açısından en kritik şey paralel işlemedir. Firebird SuperServer 2.5.2 çoklu iş parçacığı işleme için uygun değildir - veritabanı başına yalnızca 1 çekirdeği etkili bir şekilde kullanır ve bu durum SuperServer’ı OLTP uygulamaları için çok iyi bir seçim yapmaz.

Bu yüzden, çoklu iş parçacığı işlemeyi destekleyen ve CPU’nun birden fazla çekirdeğini kullanan Classic veya SuperClassic mimarisine geçmemiz gerekiyor (CPU AMD-FX8350’de 8 çekirdek var).

Ardından, bazı ayarlamalar gerekli, çünkü Firebird için varsayılan yapılandırma test sistemimiz için optimal değil.

firebird.conf içindeki parametrelerin ayarlanması

Sayfa önbelleği

OLTP performansını artırmak için Classic ve SuperClassic mimarilerini denemeye karar verdik. Classic ve SuperClassic için anahtar parametrelerden biri önbellekteki sayfa tampon sayısıdır. SuperServer’ın aksine, Classic ve SuperClassic sayfa önbelleğini bağlantı başına ayırır.

Firebird 2.5’teki mimariler hakkında daha fazla ayrıntı için bu tabloyu inceleyebilirsiniz: http://www.firebirdsql.org/file/fb25.architecture_comparison.pdf

Farklı Firebird Mimarileri için sayfa önbelleği bellek kullanımını hesaplamak için kolay bir formül vardır:

    1. SuperServer - veritabanı başına tek sayfa önbelleği. Varsayılan sayfa önbelleği boyutu 2048 sayfadır, ortak öneri 10000 tampondur. Bizim durumumuzda önbellek 16k (sayfa boyutu) x 10000 ~= 160Mb idi. Bu tüm bağlantılar içindir.
    1. Classic ve SuperClassic - motor her bağlantı için sayfa önbelleği ayırır. Varsayılan boyut 75 sayfadır, yani 16Kb (sayfa boyutu) x 75 = ~= 1,17 Mb, her bağlantı için.

Açıkçası, sayfa önbelleği boyutu artırılmalıdır, çünkü bağlantı başına 75 sayfa çok düşüktür. Aşağıda sayfa önbelleği boyutu için birkaç farklı değerin sonuçlarını göstereceğiz.

LockHashSlots

Firebird motoru dahili olarak veritabanı içindeki nesneler için kilit talep etmek ve almak üzere kilit tablosunu kullanır ve Classic ve SuperClassic için LockHashSlots parametresi vardır (varsayılan değer 1009’dur). Yüksek yük altında, kilit tablosundaki hash zincirlerini azaltmak için artırılmalıdır. “Yüksek yük” herhangi bir gerçek dünya çok kullanıcılı uygulaması gibi görünüyor, bu yüzden tüm testler için 30011 olarak ayarladık.

LockMemSize

LockMemSize parametresi başlangıç kilit tablosu boyutunu ayarlamak için kullanılır (varsayılan değer 1048576’dır). Motor tablo boyutunu ihtiyaç halinde artırabilir. Ancak, kilit tablosunun artırılması, bellek yeniden eşleme yoluyla yapıldığından CPU ve diğer kaynaklar açısından pahalıdır. Bu yüzden, biraz zaman ve CPU kaynağı tasarrufu sağlamak için 7Mb olarak ayarladık.

Test çalıştırmaları

Sayfa önbelleği değerinin çeşitli değerleriyle birkaç test çalıştırması yaptık, sonuçlar şu şekilde:

Sayfa tamponları Classic, test puanları SuperClassic, test puanları
256 299 372
512 371 359
768 362 386
1024 312 387
1500 390 392
2048 285 284

Tablo 1. Classic ve SuperClassic için test çalıştırmaları

Gördüğünüz gibi, Classic ve SuperClassic bu görev için Firebird SuperServer’dan çok daha etkilidir: test sonuçları 169 puandan 300-400’e yükseldi, bu 30Gb veritabanı için elde ettiğimiz sonuçlara yakın!

Sonuçları aşağıdaki grafikte görmek daha iyidir:

Firebird performansı 1813Gb (1.7Tb)

Şekil 2. 1,7 Terabayt veritabanı için test sonuçları

En iyi performansın (hem Classic hem de SuperClassic’te) bağlantı başına 1500 sayfada olduğunu görebilirsiniz, yani bağlantı başına sayfa önbelleği boyutu:

1500x16k ~= 23,4Mb

Bağlantı başına 2000 sayfada performans önemli ölçüde düştü. Görünüşe göre 1500-2000 sayfa civarında, önbelleklemenin avantajı, her sunucu işleminin önbelleklerindeki sayfaları senkronize etmek için kilit tablosu etkileşimlerinin neden olduğu ek yükten daha düşük hale geldi. Açıkçası, daha yüksek bağlantı sayısı için bu daha erken gerçekleşecektir, bu yüzden Classic/SuperClassic sunucuları genellikle 256-512 sayfa gibi sayılarla yapılandırılır.

Ayrıca Classic performansında 768-1000 sayfa önbelleği civarında bir düşüş var - neden olduğundan emin değilim.

Özet

Deneylerimiz, Firebird performansının doğru Firebird mimarisi seçimi (SuperServer, Classic veya SuperClassic) ve belirli mimari için birkaç önemli parametrenin uygun şekilde ayarlanmasıyla artırılabileceğini doğrulamaktadır.

Sonuç olarak, devasa 1,7 Tb Firebird SQL veritabanı düşük donanımda yeterince iyi bir performansla çalışabilir. Bu testlerden pratik bir çıktı olarak, tüm Firebird sürümleri ve tüm mimariler için birkaç yapılandırma dosyası oluşturduk. Elbette, belirli bir uygulama ve/veya donanım için ayarlanmamışlardır, ancak çok mütevazı yük için yapılmış varsayılan yapılandırma dosyalarından daha iyidirler.

Optimize edilmiş Firebird yapılandırma dosyalarının tam seti: /tr/optimized-firebird-configuration/

Sorularınız için çekinmeyin: [email protected]

Sırada ne var?

Firebird 2.5 ve Firebird 3.0 performansını karşılaştıracak, gerçek dünya yük simülasyonu ve çok sayıda bağlantıyla kapsamlı bir test üzerinde çalışıyoruz. Bizi izlemeye devam edin!