2009-05-13 7 views
11

Ich führe Stresstests auf meiner Datenbank durch, die auf SQL Server 2008 64-Bit ausgeführt wird und auf einer 64-Bit-Maschine mit 10 GB RAM ausgeführt wird.SQL Server 2008 belegt viel Speicher?

Ich habe 400 Gewinde. Jeder Thread fragt die Datenbank jede Sekunde ab, aber die Abfragezeit braucht keine Zeit, wie der SQL-Profiler sagt, aber nach 18 Stunden verbraucht SQL Server 7,2 GB RAM und 7,2 GB virtuellen Speicher.

Ist das normales Verhalten? Wie kann ich SQL Server anpassen, um nicht verwendeten Speicher zu bereinigen?

+0

Wie messen Sie diese Zahlen? Denken Sie daran, dass Task-Manager Zahlen geben kann, die irreführend sind (ich würde immer für Perfmon entscheiden und die privaten/virtuellen Bytes betrachten) –

+0

Ich überwache den SQL-Server mit Task-Manager und separate Dotnet-Anwendung, die PerformanceCounter-Klasse verwendet –

Antwort

27

SQL Server ist so konzipiert, wie viel Speicher verwenden, wie sie ihre Hände auf, bekommen kann die Leistung zu verbessern, indem eine Menge Sachen im Speicher-Caching. Die Empfehlung ist, dedizierte Maschinen für SQL Server zu verwenden, was dies zu einem vollkommen gültigen Ansatz macht, da niemand erwartet, dass der Speicher benötigt wird. Also solltest du dir darüber keine Sorgen machen. das ist völlig normal.

Das heißt, wenn Sie auf einer Entwicklungsmaschine sind eher als eine Live-Umgebung, können Sie die Größe des Speichers zu begrenzen, kann wünschen, dass Ihre Box übernommen werden zu stoppen. In diesem Fall besteht die einfachste Möglichkeit darin, SQL Server Management Studio zu öffnen, klicken Sie mit der rechten Maustaste auf den Server und wählen Sie "Eigenschaften". Auf der Registerkarte "Speicher" können Sie den maximalen Serverspeicher festlegen.

1

abgehend Gregs Antwort, wenn Sie der Speicher zu konfigurieren versuchen, für das O frei von mindestens 10% des gesamten Speichers zu verlassen. Wenn SQL bei einer langen Abfrage außer Kontrolle gerät, möchten Sie, dass das Kissen in der Lage ist, die Box fernzuverwalten und dennoch zu verwalten.

4

Eigentlich gibt es einen netten kleinen Trick, um zu bekommen, wonach Sie suchen. Das Problem/die Frage besteht darin, wie SQL Server "temporär" Speicher freigeben kann, den er nicht unbedingt benötigt, und ihn dann wie erforderlich wieder rekonstruieren zu lassen.

Um dies zu tun, führen Sie das folgende Skript:

EXEC sys.sp_configure N'show advanced options', N'1' 

RECONFIGURE WITH OVERRIDE 

GO 

EXEC sys.sp_configure N'max server memory (MB)', N'{low water mark}' 

GO 

RECONFIGURE WITH OVERRIDE 

GO 

EXEC sys.sp_configure N'max server memory (MB)', N'{High water mark}' 

GO 

RECONFIGURE WITH OVERRIDE 

GO 

EXEC sys.sp_configure N'show advanced options', N'0' 

RECONFIGURE WITH OVERRIDE 

GO 

Put in Ihre eigenen Werte für {Niedrigwassermarke} und {Hochwassermarke} (in MB).

Das wird der Speicher bis auf einen Mindestbetrag erzwingen, dann wieder öffnen, sofort, wenn SQL Server braucht/will.

Das einzige, was noch zu tun, ist das Skript Zeitplan in regelmäßigen Abständen ausgeführt werden.

Empfehlung:

Wo SQL Server nicht stark genutzt wird, versuchen Sie dies automatisch alle 6 Stunden ausgeführt wird. Bei starker Beanspruchung einmal alle 24 Stunden (etwa mitten in der Nacht oder kurz vor dem Start). Ihre Verwendung wird variieren.