Kann ich eine ganze Datenbank in den Speicher einpassen?


9

Meine Datenbank ist ungefähr 1 GB groß (gemäß der MDF-Datei meiner Datenbank). Mein Datenbankserver hat 4 GB RAM. Betrachtet man den Speicherverbrauch des Computers im aktiven Zustand, so wird er zu etwa 85% genutzt (einschließlich Betriebssystem usw.).

Bedeutet dies, dass alle DB-Leseaktivitäten nur im Speicher ausgeführt werden (dh die gesamte Datenbank befindet sich im Speicher)? oder gibt es noch einen Fall, in dem es auf die Festplatte gehen müsste?


1
Was nützt zum Vergleich, wenn die Anwendung nicht aktiv ist? Im Allgemeinen besteht einer der Vorteile eines Datenbanksystems darin, dass es nicht die vollständige Datei im Speicher benötigt, aber es passt, was Sie daraus herausholen, in den Speicher, bis Sie es an anderer Stelle leeren. Ich muss 'nein' erklären.
Grant Thomas

@Herr. Enttäuschung: Ich bin damit einverstanden , dass eine Leistung ist, aber in dem Fall , wo es kann die vollständige Datei im Speicher setzen (wie in diesem Fall), wäre es?

Sollte es nötig sein, dann ja. Aber auf Anfrage der Anrufer und der Daten, die sie benötigen, nicht nativ selbstverständlich. Wenn Sie also ein Problem mit dem Datenbankspeicher haben, liegt dies im Allgemeinen am aufrufenden Code oder der unterstützenden Software oder an einer Mischung aus beiden.
Grant Thomas

1
Ein Beispiel für die Perspektive: Ich kenne ein sehr großes Internetunternehmen, das mehrere sehr große Portalseiten besitzt. Sie liefern ca. 300 Millionen Anzeigen von eigenen Adservern für diese Portale. Die Struktur der Ad-Server ist so, dass es eine große Oracle-Datenbank mit allen Informationen für die Abrechnung und das Targeting gibt. Es gibt jedoch 32 große Server (32 GB RAM) mit kleineren Datenbanken (nur die derzeit aktiven Anzeigen) im RAM . Sie berühren keine Festplatte, sie dürfen nicht: Sie haben nur 1/1000 Sekunden Zeit, um eine Anzeige zu finden, die platziert werden kann, wenn die Abfrage eingeht. Jeder Festplattenzugriff würde es unmöglich machen, dieses Ziel zu erreichen.

Antworten:


5

Ja, die gesamte Datenbank wird wahrscheinlich im Speicher gespeichert. In Checkpoint-Intervallen werden verschmutzte Seiten auf die Festplatte geschrieben. Beachten Sie jedoch, dass alle Aktualisierungen in das Protokoll schreiben und warten müssen, bis die Protokolldatensätze auf einem dauerhaften Speicher gespeichert sind, bevor sie festgeschrieben werden. Diese alten SQL Server 2000-E / A-Grundlagen enthalten alle Details, die Sie jemals benötigen werden, und vieles mehr.

Aber Sie müssen nicht raten, Sie können dies genau messen und sehen, ob es passiert oder nicht. Die relevanten Leistungsindikatoren sind:

  • Lebenserwartung der Seite Anzahl der Sekunden, die eine Seite ohne Referenzen im Pufferpool verbleibt.
  • Seitenlesevorgänge / Sek. Anzahl der Seitenlesevorgänge in der physischen Datenbank, die pro Sekunde ausgegeben werden. Diese Statistik zeigt die Gesamtzahl der physischen Seitenlesevorgänge in allen Datenbanken an. Da physische E / A teuer sind, können Sie die Kosten möglicherweise minimieren, indem Sie entweder einen größeren Datencache, intelligente Indizes und effizientere Abfragen verwenden oder das Datenbankdesign ändern.
  • Seitenschreibvorgänge / Sek. Anzahl der pro Sekunde ausgegebenen physischen Datenbank-Seitenschreibvorgänge.

"Ja, die gesamte Datenbank wird wahrscheinlich im Speicher gespeichert." Wie funktioniert das bei unserem Produktionsserver mit mindestens ~ 60 Websites, die jeweils eine dedizierte Datenbank im SQL Server-Master verwenden, wobei nur eine Handvoll davon einer Größe entspricht, die größer ist als der verfügbare Arbeitsspeicher des Computers? ? Ich bin versucht zu sagen, dass es keinen endgültigen Standard oder keine Wahrscheinlichkeit für eines der beiden Szenarien gibt - gemäß einem früheren Kommentar, den ich gemacht habe, ist es wirklich mehr von der Umgebung abhängig als von der Engine.
Grant Thomas

@Herr. Enttäuschung: Sie wenden meine Antwort auf eine andere Frage an. Das OP sagte : My database is about 1gb in size (according to the mdf file of my db). My database server has 4gb of ram.. Wenn Sie eine Antwort für den Fall wünschen, wenn Sie 60 Websites haben und wie das Zwischenspeichern von Pufferpools in diesem Fall funktioniert, dann stellen Sie diese Frage :)
Remus Rusanu

Sie sind hier der Experte, aber bitte entschuldigen Sie meine Neugier: Geht diese Theorie also davon aus (weil wir keine spezifischen Daten haben), dass die Maschine nichts anderes tut? Oder berücksichtigt eine bestimmte Speicherschwelle, die von unbekannten Verbrauchern verwendet wird?
Grant Thomas

Wie gesagt : you don't have to guess, you can measure this exactly.
Remus Rusanu

-5

Die gesamte Datenbank (dh Daten) würde nicht im Speicher (SQL Server) gespeichert. Nach dem Untersuchen von Indizes und / oder Schlüsseln wird ein Zeiger darauf abgerufen, wo sich in der Datendatei die gesuchten Daten befinden, und dann wahrscheinlich auf die Disc verschoben, um sie abzurufen. Wenn keine Schlüssel oder Indizes vorhanden wären, müsste der gesamte Heap gescannt werden.

Abhängig davon, welche Version von SQL Server Sie ausführen, gibt es möglicherweise Strategien zum Zwischenspeichern häufig verwendeter Daten, um das Lesen von Datenträgern zu minimieren.

Sie KÖNNEN speicherinterne DBs erhalten, z. B. eine MySql-Cluster-Datenbank. Diese Datenbank ist so konzipiert, dass sie die GESAMTE Datenbank über einen Cluster von Servern in den Speicher einfügt, um eine hohe Verfügbarkeit / Notfallwiederherstellung und einen schnellen Datenabruf zu gewährleisten.


1
Ich habe nicht genug Repräsentanten, um dies abzustimmen, bin mir aber nicht sicher, warum Sie sagen, dass es kategorisch nicht im Speicher gespeichert wird. Sobald eine Seite in den Puffercache eingelesen wurde, bleibt sie dort, bis der interne oder externe Speicherdruck dazu führt, dass der Cache gekürzt wird.
Martin Smith
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.