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

IBSurgeon kütüphanesi

Firebird performans düşüşü: testler, mitler ve gerçekler

Alexey Kovyazin, 16 Mayıs 2014

Bu makaleyi PDF formatında indirebilirsiniz.

Son zamanlarda IBSurgeon olarak Firebird 2.5.2 ile bir dizi performans testi yaptık. Firebird 2.5.2, Firebird veritabanının en popüler sürümüdür ve kullanıcılarının sıklıkla Firebird performansıyla ilgili soruları vardır.

Veritabanı performansıyla ilgili en önemli endişelerden biri performans düşüşüdür. Birçok kullanıcı, veritabanı uygulamalarının belirli bir eşik değerine ulaştığında performans sorunları yaşadığını iddia eder: bu 3Gb, 5Gb, RAM boyutu, 20Gb vb. olabilir. En yaygın iddia “veritabanı boyutunun RAM boyutundan büyük olmasıdır”: Firebird veritabanı boyutu RAM boyutuna ulaştığında, çok yavaşladığı bildirilir… Bu doğru mu?

Veritabanı büyümesiyle ilgili böyle bir performans düşüşü olup olmadığını kontrol etmek için bir dizi test yapmaya karar verdik. Aynı donanımda aynı yükle veritabanının ömür boyu büyümesini simüle etmeye karar verdik ve bunun için 9Gb ile 30Gb arasında değişen boyutlardaki veritabanlarıyla 11 test çalıştırdık:

Bu testteki Firebird veritabanlarının boyutları

Şekil 1. Testler için veritabanı boyutları

Test donanımı ve Firebird yapılandırması

Test donanımı şu temel özelliklere sahipti:

CPU AMD-FX8350, RAM 16GB, SATA yazılım RAID1 2x4Tb Seagate diskler, İşletim Sistemi Windows Server 2008R2 (2008R2 64 bittir).

Gördüğünüz gibi, bu düşük seviyeli bir donanım yapılandırmasıdır; şu anda (Mayıs 2014) 1000 USD’den daha az bir fiyata satın alınabilir ve tipik düşük seviyeli bir yapılandırma olarak kabul edilebilir - belki büyük SATA diskler hariç, ancak üretici raporuna göre, 1Tb ve 4Tb SATA disklerin hızı neredeyse aynıdır.

Testin amacı tipik bir sistemin performans değişikliklerini ölçmek olduğundan, küçük bir şirketteki durumu tamamen simüle etmek için SuperServer mimarili Firebird (64 bit) kullandık, Classic değil - yıllardır orijinal olarak kurulanı kullanırlar. Bildiğiniz gibi, SuperServer yalnızca 1 CPU çekirdeği kullanır, bu nedenle muhtemelen Classic veya SuperClassic (tüm CPU çekirdeklerini kullanabilen) performans açısından daha iyi sonuçlar gösterebilir, ancak amacımız performans ayarı değildi.

Ancak, tüm Firebird SuperServer kurulumlarına önerdiğimiz belirgin değişikliklerle firebird.conf dosyasını ayarladık: sayfa tamponlarını 10000’e ve sıralama için geçici alanı artırdık.

Tüm test veritabanları, tutarlılık için 16384 sayfa boyutuyla oluşturuldu.

Test

Yükleme

Her test 2 adım içeriyordu: yükleme ve ekleme, güncelleme ve silme işlemleri yapan 20 terminalin simülasyonu.

Yükleme adımı, birkaç tabloya veri ekleyen yükleyici uygulaması (load.exe) tarafından gerçekleştirilir. Şekil 2’de görebileceğiniz gibi, veriler farklı hızlarla yüklenir; ~35Mb/sn’den 1mb/sn’ye kadar değişir.

Firebird veritabanı yükleme hızı

Şekil 2. Veritabanı yükleme hızı (kırmızı grafik)

Bu, Firebird ile değil, yükleyici uygulamasının tasarımıyla ilgilidir: yükleyici veritabanının %70’ini hızlıca ekler ve ardından kalan verileri yavaşça doldurur ve bu tüm boyutlardaki veritabanlarıyla tekrarlanır. Yükleyicinin aynı işlemleri yapması bizim için önemlidir, bu nedenle yükleme hızını ölçmek için ortalama hızını kullanabiliriz.

Yükleyicinin yalnızca veri eklediğini ve dizinlerin yükleme tamamlandıktan sonra oluşturulduğunu söylemek önemlidir.

9 ile 30Gb arasındaki 11 veritabanı için yükleme adımının sonuçlarını içeren tabloya bakalım:

# veritabanı boyutu, gb yükleme süresi, sn SATA yükleme hızı, Mb/sn
1 9,04 2535 3,65166075
2 10,80 3197 3,45924304
3 13,00 4057 3,281242297
4 15,50 4698 3,378458919
5 17,30 5455 3,24751604
6 19,90 6037 3,375451383
7 21,60 6473 3,417024564
8 24,20 7539 3,287014193
9 26,00 7779 3,422547885
10 28,60 8851 3,308823862
11 30,30 9266 3,348499892

Şekil 3. Yükleme süresi ve hızı

Veya, şekil 4’teki grafikte göstermek daha iyidir:

Firebird veritabanı yükleme hızı

Şekil 4. Test sonuçları: yükleme hızı.

Gördüğünüz gibi, oldukça istikrarlı bir grafik var ve yükleme işlemi için ortalama hız 3.3-3.4Mb/sn civarında değişiyor. Veritabanı boyutu RAM boyutundan büyük olduğunda (17.3Gb boyutundaki 5. veritabanından sonra) yükleme hızında azalma belirtisi de yok.

Performans

Yükleme süreleri oldukça umut verici görünüyor, peki gerçek performans sonuçları ne durumda?

Performans sonuçlarına geçmeden önce, simülasyon sürecini hızlıca gözden geçirelim.

Simülasyon 20 iş parçacığı çalıştırır ve her biri rastgele birkaç iş operasyonu gerçekleştirir: yeni sipariş oluşturma, ödeme işleme, stoktaki ürünleri sayma, sipariş teslimatını işleme vb. (ayrıntılar için gerçek saklı prosedürlerin SQL metinlerine bakabilirsiniz). Gördüğünüz gibi, bu soyut bir envanter/satış uygulamasının olağan iş operasyonları setidir.

Test uygulaması saniyedeki iş operasyonu sayısını ölçer ve ortalama bir sayı bildirir. Elbette, bu sayı yapay bir parametredir, ancak karşılaştırma için yeterince iyidir.

Performans testi sonuçları:

# veritabanı boyutu, gb SATA’da performans
1 9,04 494,73
2 10,80 491,94
3 13,00 480,36
4 15,50 469,11
5 17,30 446,42
6 19,90 431,61
7 21,60 426,85
8 24,20 424,5
9 26,00 414,04
10 28,60 409,14
11 30,30 407,97

Şekil 5. Performans testi sonuçlarını içeren tablo.

Veya, sonuçları grafiksel gösterimde görüntülemek daha iyidir:

Firebird veritabanı performansı SATA

Şekil 6. Performans sonuçları grafiği

Gördüğünüz gibi, veritabanı boyutu büyüdükçe yavaş bir performans düşüşü var - veritabanı ne kadar büyükse, (aynı donanımda) o kadar yavaş çalışacaktır. Veritabanı boyutu RAM’den büyük olduğunda da büyük bir performans düşüşü yoktur. Veritabanının 9Gb’den 30Gb’ye büyümesi yaklaşık %20 performans kaybına yol açar.

30Gb Firebird veritabanları artık her yerde ve zamanla büyümeye devam ediyorlar. Ancak, veritabanı performansı daha da büyüdüğünde ne olacak? Yani - DAHA BÜYÜK! Veritabanı GERÇEKTEN BÜYÜK olduğunda performansa ne olacak?

Bay Büyük

Bu soruyu yanıtlamak için test tablosunun en sonuna bakmaya ve aynı donanımda, aynı ayarlarla 1.7Tb (1813 Gb) veritabanıyla test yapmaya karar verdik.

Yükleme

Böylece, böyle bir veritabanı oluşturduk:

Firebird veritabanı performansı 1813Gb (1.7Tb)

Şekil 7. Veritabanı boyutu - şimdi 1813 Gb veritabanıyla

Yükleme 566448 saniye sürdü - 157 saat, 6.55 gün. Bu uzun bir süre, ancak ortalama yükleme hızı… 3.28Mb/sn idi!

# veritabanı boyutu, gb yükleme süresi, sn SATA yükleme hızı, Mb/sn
12 1813,969025 566448 3,279214122

Şekil 8. 1.7Tb Firebird veritabanı için yükleme süresi ve hızı

Grafikte çok iyi görünüyor: son nokta (#12). Yani, Firebird ekleme algoritmalarında çok iyi sonuçlar gösteriyor.

1813Gb (1.7Tb) için Firebird yükleme hızı

Şekil 9. Yükleme hızı - 12. nokta 1.7Tb Firebird veritabanı içindir

Bay Büyük’ün performansı

Ardından aynı performans testini çalıştırdık - 12. satır 1.7Tb veritabanı içindir.

# veritabanı boyutu, gb SATA’da performans
1 9,04 494,73
2 10,80 491,94
3 13,00 480,36
4 15,50 469,11
5 17,30 446,42
6 19,90 431,61
7 21,60 426,85
8 24,20 424,5
9 26,00 414,04
10 28,60 409,14
11 30,30 407,97
12 1813,969025 169,33

Şekil 10. Performans testi sonuçları - 12. satır 1.7Tb veritabanı içindir

Ve grafikte:

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

Şekil 11. Performans, 12. nokta 1.7Tb veritabanı içindir

Sonuç, Firebird’de yavaş ve istikrarlı bir performans düşüşü olduğunu doğruluyor - veritabanı boyutu 60 kat büyürken (30Gb’den 1813Gb’ye), performans kaybı 2.4 kat oldu (407’den 169 puana).

Veritabanının (aynı düşük seviyeli donanımda) 30Gb’den 1.7Tb’ye büyümesi sık karşılaşılan bir durum değildir, ancak Firebird bu durumda bile çalışacaktır.

Büyük veritabanı ayrıntılı olarak

1.7Tb veritabanını daha iyi anlamak için Bay Büyük veritabanı için veritabanı istatistikleri topladık ve IBAnalyst içinde analiz ettik:

Firebird 1813Gb (1.7Tb) IBAnalyst’te

Şekil 12. IBAnalyst’te 1.7Tb veritabanının tabloları

Gördüğünüz gibi, 2 büyük tablo var - ORDER_LINE (~600 Gb) 6.3 milyar kayıtla ve STOCK (~GB680) 2.1 milyar kayıtla.

Ve bu tablolar için derinliği = 4 olan 2 dizin var - bu, her isteğin gerçek veri okumasından önce dizin sayfalarından 4 okuma yaptığı anlamına gelir. ORDER_LINE_PK dizini 50Gb boyutundadır.

Firebird 1813Gb (1.7Tb) veritabanı için IBAnalyst’te dizinler

Şekil 13. Firebird 1.7Tb veritabanının dizinleri

Devasa kayıt sayısına rağmen, veritabanı istatistikleri iyi görünüyor, bu nedenle Firebird’ün düşük seviyeli donanımda büyük veritabanları için bile oldukça iyi sonuçlar göstermesi şaşırtıcı değil.

Firebird’ü SSD sürücüyle test etme

Düşük seviyeli donanımda Firebird testleri serisini tamamladıktan sonra, veri depolama teknolojisinin diğer ucunda sonuçların ne olacağını kontrol etmeye karar verdik ve aynı sunucuya SSD sürücü kurduk.

Plextor PX-256M M5 Pro SSD sürücüsünü kurduk ve aynı ayarlarla aynı test serisini (1.7Tb veritabanı hariç) çalıştırdık. Sonuçlar SATA cihazlarıyla grafiklere eklendi, aşağıda görebilirsiniz.

Yükleme

Gördüğünüz gibi, SSD’de yükleme süresi SATA ile aynıdır. Bu beklenen bir sonuçtur: sıralı yazma işlemlerinin hızı SATA ve SSD sürücülerde neredeyse aynıdır.

Firebird SSD sürücüde yükleme

Şekil 14. SSD ve SATA’da yükleme

Performans

Performans sonuçlarına bakın:

Firebird SQL performansı SSD sürücüde yükleme

Şekil 15. SSD ve SATA’da performans

Gördüğünüz gibi, rastgele IO işlemleriyle performans SSD sürücü için ~8 kat daha iyi sonuçlar gösteriyor. Müşterilerimizin veritabanlarıyla ilgili deneyimlerimizden SSD’nin gerçek dünya uygulamalarında %30-50 daha hızlı olduğunu biliyorduk, ancak 8 kat artış çok yüksek.

Ancak, bu test yapaydır ve özellikle büyük getirmeler olmadan birçok güncelleme/silme işlemi içeren yüksek yüklü OLTP işlemlerini simüle etmek için tasarlanmıştır. Olağan veritabanı uygulaması her zaman bu modda çalışmaz. Bu, SSD’nin bu özel durumda neden bu kadar yüksek sonuçlar gösterdiğini açıklar.

Özet

Peki, bu testlerden ne öğrendik?

Her şeyden önce - Firebird’ün performansı, bazı boyut kısıtlamalarıyla ilgili büyük düşüşlere sahip değildir. Aynı donanımda performans, veritabanı boyutunun büyümesiyle yavaşça azalacaktır. Bu performans düşüşü, Firebird yapılandırma ayarı veya akıllı donanım yükseltmesiyle telafi edilebilir.

IBSurgeon’un Firebird performans optimizasyon hizmeti sunduğunu belirtmek iyi bir yer - bu gibi testlerden topladığımız deneysel verileri kullanarak Firebird ve InterBase veritabanlarının performansını önemli ölçüde artırabiliriz.

Ayrıca, çok büyük Firebird veritabanlarının (1.7 terabayt) düşük seviyeli donanımda önemli ancak kabul edilebilir bir performans kaybıyla çalışacağını öğrendik.

Ve üçüncü olarak, SSD OLTP uygulamaları için gerçekten iyidir. Muhtemelen şu anda veritabanı performansını yükseltmenin en ucuz yoludur. Elbette, SSD kullanmak kötü sorgu planları ve verimsiz dizinlerle ilgili sorunları çözmez, ancak genel olarak performansı artırabilir.

Devam edecek: 1.7 Terabaytlık Firebird veritabanı hakkında daha fazla ayrıntı.