Veri tabanları için yük testi ve kapasite planlamasını nasıl yapıyorsunuz?


34

Bu, veritabanları için kapasite planlaması hakkında kanonik bir sorudur .

İlgili:

Veritabanları için kanonik araçlar ve kapasite planlama yöntemleri oluşturmak istiyorum. Bu kanonik bir soru olarak düşünülmüştür.

Açıkçası, genel iş akışı:

  • Senaryoyu yerine koy
  • İzleme ekle
  • Trafik ekle
  • Sonuçları değerlendir
  • Sonuçlara göre düzelt
  • Durulayın, oldukça mutlu olana kadar tekrarlayın

Farklı web sunucuları, çerçeveleri vb. İçin en iyi uygulamaları ve farklı araçları ve teknikleri tanımlamaktan çekinmeyin.


Bir veritabanı neredeyse hiçbir zaman tek başına bir sistem değildir. Önünde genellikle büyük olan uygulama sunucularının ana bağlamında görülüyor. DB'ler arka uç veri cihazlarıdır. Yani yükü test ederken, bunu göz önünde bulundurmalısınız.
Nils

Yanıtlar:


24

Disk ve RAM Kapasite Planlama

Bir veritabanı sunucusu için disk ve bellek kapasitesini planlamak siyah bir sanattır. Daha fazlası daha iyi. Daha hızlı iyidir.

Genel kurallar olarak aşağıdakileri öneriyorum:

  • HERHANGİ gerekenden daha fazla disk alanı istiyorsunuz .
    Gelecek 3-5 yıl için ne kadar disk alanına ihtiyaç duyacağınıza dair en iyi tahmininizi yapın, ardından ikiye katlayın.
  • Veri tabanı dizinlerinizi bellekte tutmaya, en büyük sorgunuzu en az iki kez ele almaya ve sağlıklı bir işletim sistemi disk önbelleği için yeterli alana sahip olmaya yetecek kadar RAM isteyeceksiniz.
    Dizin boyutu veritabanınıza bağlıdır ve diğer her şey büyük ölçüde veri kümenize ve sorgu / veritabanı yapınıza bağlıdır. Bir öneri olarak "En büyük tablonuzun en az 2 katı büyüklüğünde" önerisini sunacağım, ancak bu öneri, en büyük tablonun onlarca veya yüzlerce gigabayt olabileceği gerçekten büyük veri depolama işlemlerinde bozulduğunu unutmayın.

Her veritabanı satıcısının disk / bellek / işletim sistemi çekirdeğinizi ayarlama performansıyla ilgili bazı talimatları vardır - Dağıtımdan önce bu belgelerle biraz zaman geçirin. Yardımı olacaktır.


İş Yükü Kıyaslama ve Kapasite Planlama

Henüz konuşlandırmadığınızı varsayalım…

Birçok veritabanı sistemi Benchmarking Tools ile birlikte gelir - Örneğin, PostgreSQL , pgBench ile birlikte gelir .
Bu araçlar, veritabanı performansını kıyaslamada ilk durağınız olmalıdır. Mümkünse, veritabanı sunucusunun "ne kadar çalışma" yapabileceğini hissetmek için tüm yeni veritabanı sunucularında çalıştırmalısınız.

Şimdi kıyaslama ABSOLUTELY MEANINGLESSiçin daha gerçekçi bir yaklaşım olarak kabul edebileceğimiz ham bir ölçütle donatıldı: Veritabanı şemasını yükleyin ve onu sahte verilerle dolduran bir program yazın, ardından uygulamanızın sorgularını bu verilere karşı çalıştırın.
Bu, üç önemli şeyi karşılaştırır: 1. Veri tabanı sunucusu (donanım) 2. Veri tabanı sunucusu (yazılım) 3. Veri tabanı tasarımınız ve yukarıdaki (1) ve (2) ile nasıl etkileşime geçtiği.

Bunun, önceden oluşturulmuş basit kıyaslama ölçütlerinden çok daha fazla çaba gerektirdiğini unutmayın pgBench: Doldurma yapmak için bazı kodlar yazmanız gerekir; sorguları yapmak ve yürütme süresini bildirmek için bazı kodlar yazmanız gerekebilir.
Bu tür testler de büyük ölçüde daha doğrudur: Şema ve sorgularınızla çalıştığınızdan, nasıl performans göstereceklerini görebilirsiniz ve size veritabanınızı / sorgularınızı profilleme ve iyileştirme fırsatı sunar.

Bu kıyaslamaların sonuçları, veritabanınızın ideal bir görünümüdür. Güvende olmak için, üretim ortamınızda bu performansın sadece% 50-70'ini elde edeceğinizi varsaymak (gerisi beklenmedik büyüme, donanım hataları, iş yükü değişiklikleri vb. İle başa çıkmanızı sağlayacak bir yastık).


Çok geç! Üretimde!

Sistemleriniz üretime girdikten sonra "kıyaslama" için gerçekten çok geç - Sorgu günlüğü / zamanlamayı kısaca açabilir ve işlerin ne kadar sürdüğünü görebilirsiniz ve kapalı durumdaki büyük veri setlerine karşı bazı "stres testi" sorgularını çalıştırabilirsiniz. saatler. Sistemin CPU, RAM ve I / O (disk bant genişliği) kullanımına bakıp, ne kadar yüklü olduğu hakkında bir fikir edinebilirsiniz.
Ne yazık ki, tüm bunlar size sistemin ne yaptığı hakkında bir fikir vermek ve doygunluğa ne kadar yakın olduğuna dair belirsiz bir kavram vermek.
Bu bizi…


Devam Eden İzleme

Sisteminiz aniden yeni / farklı kullanım şekilleri görüyorsa, dünyadaki tüm kıyaslamalar size yardımcı olmaz.
Daha iyi veya daha kötü veritabanı dağıtımları statik değildir: Geliştiricileriniz bir şeyleri değiştirecek, veri kümeniz büyüyecek (hiç bir zaman küçülmeyecek gibi görünüyor) ve kullanıcılarınız bir şekilde test etmeyi asla tahmin etmediğiniz olayların çılgın kombinasyonlarını oluşturacaklar.

Veritabanınız için uygun kapasite planlaması yapmak için, veri tabanı performansının artık beklentilerinizi karşılamadığında sizi uyaracak bir tür performans izleme uygulaması yapmanız gerekecektir. Bu noktada düzeltici eylemleri göz önünde bulundurabilirsiniz (yeni donanım, DB şeması veya kaynak kullanımını optimize etmek için sorgu değişiklikleri vb.).


Not: Bu, veritabanı donanımınızı boyutlandırmak ve ne kadar kötüye kullanabileceğini bulmak için çok yüksek ve genel bir rehberdir. Belirli bir sistemin ihtiyaçlarınızı karşılayıp karşılamadığı konusunda hala kararsızsanız, bir veritabanı uzmanıyla konuşmalısınız. Dba.stackexchange.com
: Ayrıca özellikle veritabanı yönetimine adanmış bir Stack Exchange sitesi var . Performans ayarlaması hakkında daha fazla tavsiye için soru arşivlerinde arama yapın veya veritabanı motorunuza özgü etiketlere göz atın.


1
Buna ek olarak, günümüzde, SSD'leri takas / disk işlemleri için kullanabilirsiniz. Bu, disklerde büyük geçici tablolar kullanan sorguları hızlandıracaktır. Bu yüzden, daha fazla SSD eklemek, genellikle çok iyi bir fikirdir.
Peter,

2
@Peter, takas alanı için SSD'leri tavsiye etmem (eğer aktif olarak değiştiriyorsanız, çok yüksek bir gevşeme oranı vardır), ancak yeterince büyük bir SSD ve diskin düzgün bir şekilde aşındırılması ile diskin makinenin ömrü uzayabilir. Sıcaklık tablo alanı için kullanılan SSD'leri iyi sonuçlarla gördüm.
voretaq7

Lütfen SSD'ler hakkındaki yorumlardaki bu tavsiyenin 7 yaşında olduğunu unutmayınız. Veritabanı sunucunuzda veritabanı tutan her depolama, 2019 veya daha sonraki bir sürümünde bir SSD olmalıdır.
Mark Henderson

1

Genel olarak performansı test etmek için gerçekçi kullanım durumlarına ihtiyacınız vardır. En iyi uygulama, uygulama geliştiricileri ve son kullanıcıları dahil etmektir.

Genellikle yaptıklarını kaydedin, her kullanım durumu için onu parametreleştirin (içerik, eşzamanlı eylem sayısı).

Sonra müşteri tarafını oluştur. Tek bir fiziksel makine genellikle üretim yükünü oluşturmak için yeterli değildir.

Ardından ateşleyin, yeniden kalibre edin, geliştirin ve tekrar test edin.

Darboğazların yükseldiği yerde şaşıracaksınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.