Bir DB'nin tamamını belleğe sığdırabilir miyim?


9

Veritabanım yaklaşık 1GB boyutunda (benim db'nin mdf dosyasına göre). Veritabanı sunucumda 4GB RAM var. Etkin durumdayken bilgisayardaki bellek tüketimine bakıldığında, kullanılan yaklaşık% 85 (OS, vb.)

Bu, tüm DB okuma etkinliğinin yalnızca bellekte çalıştığı anlamına mı geliyor (yani tüm db bellekte oturuyor)? veya hala diske gitmesi gereken bir durum var mı?


1
Peki, karşılaştırma için, uygulama aktif olmadığında ne işe yarar? Genel olarak, bir veritabanı sisteminin faydalarından biri, bellekte tam dosyaya ihtiyaç duymamasıdır, ancak başka bir yerde temizleyene kadar dışarıya çektiğiniz şeyi belleğe sığdırır. 'Hayır' ilan etmek zorunda kalacağım.
Grant Thomas

@Bay. Hayal kırıklığı: Bir fayda olduğunu kabul, ama durumda nerede olabilir iyi giderdi, (bu durumda) gibi bellekte tam dosyasını koydu?

Gerekirse, evet. Ancak arayanların ve ihtiyaç duydukları verilerin talebi üzerine, doğal olarak elbette değil. Bu nedenle, genellikle, bir veritabanı belleği sorununuz varsa, arama kodu veya destekleyici yazılım veya ikisinin karışımı ile olacaktır.
Grant Thomas

1
Perspektif örneği: Birkaç büyük portal sitesine sahip çok büyük bir internet şirketi biliyorum. Onlar ca. Bu portallar için kendi reklam sunucularından 300 milyon reklam. Reklam sunucuları yapısı büyük bir Oracle DB tüm muhasebe ve hedefleme için bilgi yoktur şekildedir, ancak 32 büyük vardır (32GB RAM) sunucuları (sadece o anda etkin reklamlarla) küçük veritabanlarını tutan RAM içinde . Bir diske dokunmazlar, yapmamalıdırlar: sorgu geldiğinde yerleştirilecek bir reklam bulmak için yalnızca 1/1000 saniyeleri vardır, herhangi bir disk erişimi bu hedefe ulaşmayı imkansız hale getirir.

Yanıtlar:


5

Evet, tüm veritabanı muhtemelen bellekte saklanır. Kirli sayfaları kontrol noktası aralıklarında diske temizler. Ancak tüm güncellemelerin günlüğe yazması ve taahhütte bulunmadan önce günlük kayıtlarının dayanıklı depolamada sertleştirilmesini beklemesi gerektiğini unutmayın. Bu eski kağıt SQL Server 2000 I / O Temelleri , ihtiyacınız olan tüm ayrıntılara ve daha fazlasına sahiptir.

Ama tahmin etmek zorunda değilsiniz, bunu tam olarak ölçebilir ve olup olmadığını görebilirsiniz. İlgili performans sayaçları :

  • Sayfa ömrü beklentisi Sayfanın referans olmadan arabellek havuzunda kalacağı saniye sayısı.
  • Sayfa okuma / sn Saniyede yayınlanan fiziksel veritabanı sayfa okuma sayısı. Bu istatistik, tüm veritabanlarında toplam fiziksel sayfa okuma sayısını görüntüler. Fiziksel G / Ç pahalı olduğundan, daha büyük bir veri önbelleği, akıllı dizinler ve daha verimli sorgular kullanarak veya veritabanı tasarımını değiştirerek maliyeti en aza indirebilirsiniz.
  • Sayfa yazma / sn Saniyede yayınlanan fiziksel veritabanı sayfa yazma sayısı.

'Evet, veritabanının tamamı muhtemelen bellekte saklanıyor.' Bu nedenle, üretim sunucumuzda, her biri en az ~ 60 web sitesi olan ve her biri SQL Server Master'da özel bir veritabanı kullanan, bunlardan sadece bir avuç bile makinelerin kullanılabilir belleğinden daha büyük bir boyuta eşit olduğu için, bu nasıl çalışır? ? Kesin bir temerrüde veya her iki senaryonun gerçekleşme olasılığına sahip olmadığımı söylemek cazipim - yaptığım bir önceki yoruma göre, motorun aksine çevreye gerçekten daha bağımlı.
Grant Thomas

@Bay. Hayal kırıklığı: Cevabımı farklı bir soruya uyguluyorsunuz. OP söyledi: My database is about 1gb in size (according to the mdf file of my db). My database server has 4gb of ram.. 60 web
siteniz

Buradaki uzman sensin, ama lütfen meraklı doğamı affedin: bu teori (belirli verilerimiz olmadığı için) makinenin başka bir şey yapmadığını varsayar mı? Yoksa bilinmeyen tüketiciler tarafından kullanılan belirli bir bellek eşiğini mi hesaplar?
Grant Thomas

As Dedim ki: you don't have to guess, you can measure this exactly.
Remus Rusanu

-5

DB'nin tamamı (yani veriler) bellekte (sql sunucusu) depolanmaz. Dizinleri ve / veya anahtarları inceledikten sonra, aradığınız verinin veri dosyasında nerede olduğuna dair bir işaretçi alır ve daha sonra almak için diske gider. Anahtar veya dizin yoksa, tüm yığını taramak zorunda kalacaksınız.

Hangi SQL Server sürümünü kullandığınıza bağlı olarak, disk okumalarını en aza indirmek için iyi kullanılan verileri önbelleğe alma stratejileri olabilir.

MySql Cluster veritabanı gibi bellek içi DB'ler alabilirsiniz .... Bu, yüksek kullanılabilirlik / olağanüstü durum kurtarma ve hızlı veri alımı için ENTIRE db'yi bir sunucu kümesinde belleğe sığdırmak için tasarlanmıştır.


1
Buna oy vermek için yeterli temsilcim yok ama neden kategorik olarak bellekte saklanmayacağını söylediğinizden emin değilim. Bir sayfa arabellek önbelleğine okunduğunda, dahili veya harici bellek basıncı önbelleğin kırpılmasına neden olana kadar orada kalır.
Martin Smith
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.