MS SQL 2008 alles auf RAM?

7

Jemand mit Erfahrung in der Verwendung von SQL 2008, aber alles im RAM? Der Versuch, bestimmte Dinge schneller zu machen, und könnte dies verfolgen, danke

Tim
quelle

Antworten:

10

Es kommt darauf an, was Sie unter "All in RAM" verstehen.

Wenn Sie Ihre Datenbank von einem RAM-Laufwerk ausführen möchten, werden Sie feststellen, dass dies wahrscheinlich nicht möglich ist (es sei denn, Sie haben eine RAM-Laufwerkskarte, die für das Betriebssystem wie eine normale Festplatte aussieht, dh eine SATA- oder PATA-Schnittstelle aufweist). als SQL Server wird ablehnen. Es wird davon ausgegangen, dass alle von ihm geschriebenen Daten wichtig genug sind, um aufbewahrt zu werden, und dass sie nicht riskiert werden, wenn sie auf ein flüchtiges Speichermedium geschrieben werden. Sie können es möglicherweise täuschen, indem Sie es in einer VM ausführen und diese VM von einem RAM-Laufwerk ausführen. Ich würde jedoch nicht empfehlen, dies beide aus demselben Grund zu versuchen (Sie verlieren alle Daten, wenn ein Stromausfall oder ein Neustart auftritt). und aufgrund der Tatsache, dass es eine Sammlung anderer Leistungstreffer aus der Virtualisierungslösung geben würde, über die man sich Sorgen machen müsste.

Wenn Ihr Problem eine langsame Leseaktivität ist (dh viele Vorgänge, die zum Lesen von der Festplatte führen, erhöhen Sie einfach die RAM-Größe des Computers, um größer als der übliche Arbeitssatz oder besser noch größer als die gesamte Datenbank zu sein. Sofern Sie nicht über eine SQL Server-Edition verfügen, die künstliche RAM-Beschränkungen auferlegt (IIRC Express Edition verwendet nicht mehr als 1 GB), wird die Speicherfülle verwendet, um alles, was gelesen wird, im RAM zwischengespeichert zu halten, damit es beim nächsten Mal schnell gelesen werden kann Wenn Sie die Daten jederzeit nach dem Löschen in den Arbeitsspeicher vorladen möchten (dh nach einem Neustart aufgrund der Installation von Updates), können Sie ein Skript schreiben, das das Scannen aller Index- und Datenseiten und das Einlesen in den Speicher erzwingt .

Wenn das Problem auf viele Schreibvorgänge zurückzuführen ist, kann die Optimierung Ihres Festplattenlayouts hilfreich sein. Ohne mehr über Ihre Datenbank zu wissen, können wir keine spezifischen Hinweise geben, aber die Standard-Faustregeln (wie das Speichern Ihrer Datendateien, Transaktionsprotokolle und Tempdb auf separaten physischen Laufwerken) können hilfreich sein.

David Spillett
quelle
8

Standardmäßig verwendet SQL Server den gesamten verfügbaren RAM auf dem Server. Es wird empfohlen, den SQL Server so zu konfigurieren, dass 2 bis 4 GB weniger RAM verfügbar sind als der Server tatsächlich (abhängig davon, was sonst noch installiert ist, wie viel SQL CLR Sie verwenden usw.). Der SQL Server verwendet den Speicher im Server als Puffercache, damit die Daten so selten wie möglich von der Festplatte gelesen werden müssen. Je mehr RAM der SQL Server zur Verfügung hat, desto mehr Daten kann der SQL Server in den Speicher laden. In einer perfekten Arbeit liest der SQL Server fast nie von der Festplatte (außer beim Start, da die Daten irgendwann von der Festplatte gelesen werden müssen), sodass als einzige Festplatten-E / A Schreib-E / A benötigt wird.

mrdenny
quelle
Zustimmen. Aus meiner (ähm, sorry) Erfahrung mit dem Herumspielen kann es auch hilfreich sein, die Ergebnisse der zeitintensivsten Abfragen in einer separaten (daher kleineren) Tabelle zwischenzuspeichern und die folgenden identischen Abfragen darauf zu verweisen (z. B. wenn Sie eine 200-GB-Datenbank haben und nicht so viel RAM, zB 20 GB). Die Wahrscheinlichkeit, dass die Cache-Tabelle noch im RAM enthalten ist, ist dann viel höher. Ich gebe zu, dass dies imho nur funktioniert, wenn Sie eine sehr begrenzte Anzahl von Benutzern haben, die gegen Ihre Datenbank arbeiten.
Desasteralex
Sie haben die Daten tatsächlich in der gleichen Zeit im Cache. Die Daten benötigen weniger Speicherplatz im Cache, sodass sie möglicherweise länger im Cache gespeichert sind, da Sie keine Zeilen und Spalten im Cache haben, nach denen Sie nicht suchen, wodurch Speicherplatz gespart wird. Wenn Benutzer immer wieder dieselbe Abfrage ausführen, bleiben die Daten im Cache, da SQL einen ziemlich intelligenten Algorithmus verwendet, um zu entscheiden, welche Seiten aus dem Cache altern sollen.
Mrdenny
5

Das Ausführen von SQL Server auf einer RAM-Festplatte entspricht dem Konfigurieren der Auslagerungsdatei eines Computers im RAM: Dadurch werden die Erwartungen des Systems übertroffen.

SQL Server ist eigentlich einem Betriebssystem sehr ähnlich, es hat eine eigene Version von Prozessen, Threads, einen eigenen Speichermanager und andere Dinge. Was würde also passieren, wenn wir SQL Server auf einer RAM-Disk ausführen?

  1. Wir verlieren die Datenbankkonsistenz. Wenn der Server ausfallen würde, würden wir Daten verlieren . SQL Server in seiner Standardkonfiguration verliert keine festgeschriebenen Daten.
  2. Wir werden den Speicher ineffizient nutzen, da SQL Server seinen Pufferpool und verschiedene Caches für Daten verwendet, die sich bereits im RAM befinden. Im schlimmsten Fall beschränken Sie SQL Server auf weniger als 50% des Arbeitsspeichers Ihres Systems. Die Mehrheit würde zum Speichern der Datenbank- und / oder Protokolldateien verwendet, und SQL Server würde immer noch versuchen, Dinge in seinen internen, optimierten Pufferpool zu stellen, und es würde nicht genügend Speicher zum Puffern von Dingen vorhanden sein.

Der erste ist der wichtigste. SQL Server auf der RAM-Festplatte weist im Falle eines Fehlers keine Transaktionskonsistenz mehr auf. Nichts anderes sollte für Sie von Bedeutung sein, aber ich kann mit Sicherheit sagen, dass das Ausführen der SQL Server-Datenbank oder der Protokolldateien auf einer RAM-Disk keine technischen Vorteile bietet, die möglicherweise die Risiken überwiegen können.

Aaron Friel
quelle