Mein aktuelles Projekt sendet ständig Anfragen an einen SQL Server und verwendet möglicherweise 100% des Speichers oder der CPU.
Wie kann ich überprüfen, ob der Server in einer gespeicherten Prozedur fast voll ausgelastet ist, damit ich entscheiden kann, ob die Abfragen ausgeführt werden sollen oder nicht, oder einige Einstellungen in einer Tabelle speichern kann, damit die folgenden Abfragen wissen, dass die Arbeitslast hoch ist, und entscheiden, was zu tun ist
Wenn nicht, wie kann ich verhindern, dass SQL Server die volle Auslastung erreicht?
Weitere Informationen zum Fall: Derzeit weiß ich, dass unser aktueller Testserver 40-50 Abfragen pro Sekunde verarbeiten kann (eine bestimmte gespeicherte Prozedur). Und jetzt entscheiden wir, wie viele Anfragen pro Sekunde an den Server gesendet werden. Wenn wir den Betrag sogar um 1 höher als erwartet festlegen, füllen die Abfragen auf lange Sicht den virtuellen Speicher und unser Client muss seine SQL Server-Instanz regelmäßig neu starten.
Erwartete Ergebnisse (für Kopfgeldjäger):
@memory_usage float, @cpu_usage float; /* in percentage */
Ideen sind willkommen. Vielen Dank.
quelle
Antworten:
Wenn Sie den SQL Server-Speicher wirklich einschränken möchten, sehen Sie sich die Option Maximaler Serverspeicher an.
Das Speichern ist möglich, hängt jedoch davon ab, was Sie wirklich wollen. Möchten Sie die Speichernutzung als Prozentsatz der Option "Maximaler Serverspeicher" anzeigen? Wenn ja, schauen Sie sich sys.dm_os_process_memory an :
Wenn Sie physische Speicher gegen die gesamten Systemspeicher mögen, Blick in beide
sys.dm_os_process_memory
und sys.dm_os_sys_info :Ich glaube nicht, dass Sie die CPU-Auslastung erhalten können, wenn Sie den Resource Governor nicht aktiviert haben. Wenn Sie dies tun, schauen Sie sich sys.dm_os_performance_counters an:
quelle
DMVs bieten sowohl Informationen zur CPU- als auch zur Speichernutzung. Für diese Abfragen ist die Berechtigung VIEW_SERVER_STATE erforderlich.
quelle
Innerhalb einer gespeicherten Prozedur? Sobald die Abfrage, die dazu geführt hat, dass die CPU zu 100% ausgelastet ist, beendet ist, können Sie nicht mehr nach dieser Metrik suchen, die bei der nächsten Abfrage in der gespeicherten Prozedur ausgeführt wird.
Wenn Sie SQL Server 2008 oder höher (und Enterprise Edition) verwenden, können Sie den Ressourcen-Governor verwenden, um sicherzustellen, dass anderen Prozessen CPU-Leistung und Arbeitsspeicher zur Verfügung stehen.
quelle