Holen Sie sich die SQL Server -CPU -Auslastungsabfrage
Die GET SQL Server -CPU -Auslastungsabfrage bietet wertvolle Einblicke in die CPU -Verwendung eines SQL -Servers. Mit der zunehmenden Menge an Daten und der Komplexität der Abfragen ist die Überwachung der CPU -Nutzung für die effiziente Datenbankverwaltung von entscheidender Bedeutung. Mit der Abfrage können Administratoren potenzielle Engpässe identifizieren, die Abfrageleistung optimieren und die reibungslose Funktionsweise des SQL -Servers sicherstellen.
Diese Abfrage wirkt sich erheblich auf die Gesamtleistung eines SQL -Servers aus. Durch die Analyse der CPU-Auslastung können Administratoren mit hoher Gebrauchsfragen identifizieren, Leistungsproblemen beheben und fundierte Entscheidungen treffen, um die Ressourcenzuweisung zu optimieren. Mit genauen CPU -Nutzungsdaten können Administratoren die Serverkapazität proaktiv verwalten, die Antwortzeiten verbessern und die allgemeine Benutzererfahrung verbessern.
Um die CPU -Nutzung eines SQL -Servers zu erhalten, können Sie die folgende Abfrage verwenden:
SELECT
cpu_id,
cpu_ticks / CONVERT(FLOAT,duration_ms) AS cpu_utilization
FROM
sys.dm_os_ring_buffers
WHERE
ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR'
AND record_id = (SELECT MAX(record_id) FROM sys.dm_os_ring_buffers
WHERE ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR')
Einführung
Die SQL Server -CPU -Auslastung ist ein wichtiger Aspekt, um eine optimale Leistung in jeder SQL Server -Umgebung zu überwachen und zu verwalten. Die CPU ist dafür verantwortlich, Abfragen auszuführen, die Datenverarbeitung zu behandeln und andere Aufgaben auszuführen, die für den Server erforderlich sind. Durch die Überwachung der CPU -Auslastung identifiziert potenzielle Engpässe und ermöglicht zeitnahe Optimierungen. In diesem Artikel werden wir verschiedene SQL Server -CPU -Auslastungsabfragen untersuchen, die wertvolle Einblicke in die Leistung Ihres SQL -Servers liefern können.
1. Abfrage zur CPU -Nutzung nach Datenbank
Wenn Sie sich mit einer Multi-Database-SQL Server-Umgebung befassen, ist es hilfreich, sich in der CPU-Nutzung einzelner Datenbanken zu befassen. Auf diese Weise können Sie feststellen, welche Datenbanken die meisten CPU -Ressourcen konsumieren und möglicherweise ihre Abfragen oder Konfigurationen optimieren.
Um die CPU -Nutzung per Datenbank zu erhalten, können Sie die folgende Abfrage verwenden:
SELECT
DB_NAME(st.dbid) AS DatabaseName,
COUNT(*) AS NumberOfExecutions,
SUM(qs.total_worker_time) AS TotalCPUUsage
FROM
sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
GROUP BY
DB_NAME(st.dbid)
ORDER BY
TotalCPUUsage DESC;
Diese Abfrage verwendet die sys.dm_exec_query_stats Und sys.dm_exec_sql_text Dynamische Verwaltungsansichten zum Abrufen von Informationen zur CPU -Verwendung und der zugehörigen Datenbank für jeden Abfrageausführungsplan in der SQL -Serverinstanz. Der DB_NAME Funktion wird verwendet, um den Datenbanknamen basierend auf dem abzurufen dbid Spalte.
Beispiel:
Wenn Sie die obige Abfrage ausführen, erhalten Sie ein Ergebnis mit den folgenden Spalten:
| Datenbankname | Numberofexecutions | TotalCpuusage |
| Datenbank1 | 100 | 2000 |
| Datenbank2 | 50 | 1500 |
| Datenbank3 | 75 | 1000 |
2. Abfrage nach CPU -Nutzung nach Sitzung
Das Verständnis der CPU -Nutzung durch einzelne Sitzungen kann dazu beitragen, Prozesse oder Abfragen zu identifizieren, die übermäßige Ressourcen konsumieren. Sie können die Schuldigen bestimmen und geeignete Aktionen ergreifen, z. B. die Optimierung von Abfragen oder die Beendigung von langjährigen Sitzungen, falls erforderlich.
Um die CPU -Nutzung nach Sitzung zu erhalten, können Sie die folgende Abfrage verwenden:
SELECT
session_id AS SessionID,
login_time AS LoginTime,
last_request_start_time AS LastRequestStartTime,
total_worker_time AS TotalCPUUsage
FROM
sys.dm_exec_sessions
WHERE
status = 'running'
ORDER BY
total_worker_time DESC;
Diese Abfrage ruft die Sitzungs -ID, die Anmeldezeit, die Last -Anfrage -Startzeit und die gesamte CPU -Nutzung für alle laufenden Sitzungen in der SQL -Serverinstanz ab. Der sys.dm_exec_sessions Die Dynamic Management View bietet Informationen zu den aktiven Sitzungen im SQL -Server.
Beispiel:
Durch Ausführen der obigen Abfrage wird ein Ergebnis mit den folgenden Spalten angegeben:
| Sitzung | Logintime | LastrequestStartTime | TotalCpuusage |
| 55 | 2021-01-01 09:00:00 | 2021-01-01 09:10:00 | 5000 |
| 78 | 2021-01-02 14:30:00 | 2021-01-02 15:00:00 | 3000 |
| 102 | 2021-01-03 11:45:00 | 2021-01-03 12:30:00 | 2000 |
3. Abfrage zum CPU -Nutzungstrend
Die Überwachung des CPU -Nutzungstrends über einen bestimmten Zeitraum hilft beim Verständnis der Workload -Muster und zum Erkennen von Anomalien. Es ermöglicht Ihnen die Ermittlung der Spitzennutzungszeiten, Zeiträume mit zunehmendem Ressourcenbedarf und potenzielle Leistungsprobleme.
Um den CPU -Nutzungs -Trend zu erhalten, können Sie die folgende Abfrage verwenden:
SELECT
DATEADD(MINUTE, (DATEDIFF(MINUTE, GETDATE(), GETUTCDATE())), [timestamp]) AS UTCTimestamp,
SQLProcessUtilization AS CPUUtilization
FROM
sys.dm_os_ring_buffers
WHERE
ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR'
AND record_id IN (
SELECT
MAX(record_id)
FROM
sys.dm_os_ring_buffers
WHERE
ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR'
AND (record_id > (SELECT MAX(record_id) - 1440 FROM sys.dm_os_ring_buffers WHERE ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR'))
)
ORDER BY
UTCTimestamp;
Diese Abfrage holt die CPU -Auslastung, die in den letzten 24 Stunden im Scheduler Monitor Ringpuffer aufgezeichnet wurde. Es berechnet den UTC -Zeitstempel mit dem GETUTCDATE Funktion, um den lokalen Zeitstempel in UTC umzuwandeln.
Beispiel:
Wenn Sie die obige Abfrage ausführen, erhalten Sie ein Ergebnis mit den folgenden Spalten:
| UTCTIMESTAMP | CPUUTILISION |
| 2021-01-01 00:00:00 | 80 |
| 2021-01-01 00:01:00 | 75 |
| 2021-01-01 00:02:00 | 85 |
V.
Wenn der Gouverneur für den Ressourcen in Ihrer SQL Server -Umgebung aktiviert ist, können Sie die CPU -Nutzung durch die Funktion der Ressourcen -Gouverneur -Klassifizierer verfolgen. Dies hilft bei der Überwachung und Verwaltung der CPU -Nutzung basierend auf der Arbeitsbelastungsklassifizierung und ermöglicht eine bessere Ressourcenzuweisung und -steuerung.
Um die CPU -Nutzung durch die Funktion der Ressourcen -Gouverneur -Klassifikatorin zu erhalten, können Sie die folgende Abfrage verwenden:
SELECT
name AS ClassifierFunction,
cpu_time_ms AS CPUUsage
FROM
sys.dm_resource_governor_resource_pools AS rgp
JOIN sys.dm_exec_requests AS er ON rgp.pool_id = er.requested_resource_pool_id
CROSS APPLY
sys.dm_exec_query_plan(er.plan_handle) AS qp
WHERE
er.command = 'SELECT';
Diese Abfrage ruft den Funktionsnamen der Ressourcen -Gouverneur -Klassifikator und die zugehörige CPU -Verwendung für alle Anforderungen in der SQL -Serverinstanz mit dem Befehlstyp als "SELECT" ab.
Beispiel:
Durch Ausführen der obigen Abfrage wird ein Ergebnis mit den folgenden Spalten angegeben:
| Klassifizierfunktion | CPUUSAGE |
| Funktion1 | 1000 |
| Funktion2 | 500 |
| Funktion3 | 200 |
Untersuchen einer anderen Dimension von "Get SQL Server CPU -Nutzungsabfrage"
Tauchen wir nun in einen weiteren Aspekt der SQL Server -CPU -Auslastungsabfragen ein und konzentrieren sich auf Leistungsmetriken und Fehlerbehebung.
1. Abfrage zur CPU -Nutzung durch Abfrageausführungsplan
In SQL Server spielt der Abfrageausführungsplan eine wichtige Rolle bei der Bestimmung der CPU -Nutzung. Durch die Analyse der CPU -Nutzung auf der Ebene der Abfrageausführungsplan können Sie Abfragen identifizieren, die übermäßige Ressourcen konsumieren und diese für eine bessere Leistung optimieren.
Um die CPU -Auslastung durch Abfrageausführungsplan zu erhalten, können Sie die folgende Abfrage verwenden:
SELECT
qp.query_plan AS QueryPlan,
qs.total_worker_time AS TotalCPUUsage
FROM
sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS qp
ORDER BY
TotalCPUUsage DESC;
Diese Abfrage ruft den Abfrageausführungsplan und die zugehörige CPU -Nutzung für alle Abfragepläne in der SQL -Serverinstanz ab. Der sys.dm_exec_query_stats Die dynamische Managementansicht enthält Informationen zu den Abfragestatistiken, während die sys.dm_exec_query_plan Die dynamische Verwaltungsfunktion ruft den Abfrageausführungsplan ab.
Beispiel:
Durch Ausführen der obigen Abfrage wird ein Ergebnis mit den folgenden Spalten angegeben:
| QueryPlan | TotalCpuusage |
| Ausführungsplan XML | 4000 |
| Ausführungsplan XML | 3500 |
| Ausführungsplan XML | 3000 |
2. Abfrage zur CPU -Nutzung durch zwischengespeicherte Abfragen
SQL Server verfügt über einen Abfrage -Cache, der die Ausführungspläne von häufig ausgeführten Abfragen speichert. Durch die Untersuchung der CPU -Nutzung durch zwischengespeicherte Abfragen können Sie hohe CPU -Verwendungsabfragen identifizieren und entsprechend optimieren.
Um die CPU -Nutzung durch zwischengespeicherte Abfragen zu erhalten, können Sie die folgende Abfrage verwenden:
SELECT
qt.[text] AS Query,
qs.total_worker_time AS TotalCPUUsage
FROM
sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
ORDER BY
TotalCPUUsage DESC;
Diese Abfrage ruft den Abfragetext und die zugehörige CPU -Verwendung für alle zwischengespeicherten Abfragen in der SQL -Serverinstanz ab. Der sys.dm_exec_sql_text Die dynamische Verwaltungsfunktion wird verwendet, um den Abfragetext basierend auf dem SQL -Handle abzurufen.
Beispiel:
Durch Ausführen der obigen Abfrage wird ein Ergebnis mit den folgenden Spalten angegeben:
| Abfrage | TotalCpuusage |
| Wählen Sie * aus Tabelle 1 aus | 2000 |
| Wählen Sie * aus Tabelle2 aus | 1500 |
| Wählen Sie * aus Tabelle 3 aus | 1000 |
3.. Abfragen Sie die CPU -Nutzung durch Wartearten ab
SQL Server verfolgt verschiedene Wartentypen, die Verzögerungen oder Ressourcenkonkurrenz im System anzeigen. Durch die Untersuchung der CPU -Nutzung durch Wartearten können Sie spezifische Wartezeiten identifizieren, die zur hohen CPU -Nutzung beitragen und geeignete Maßnahmen ergreifen, um sie zu mildern.
Um die CPU -Nutzung durch Wartearten zu erhalten, können Sie die folgende Abfrage verwenden:
SELECT
wt.wait_type AS WaitType,
SUM(qs.total_worker_time) AS TotalCPUUsage
FROM
sys.dm_exec_query_stats AS qs
JOIN sys.dm_os_wait_stats AS ws ON qs.plan_handle = ws.plan_handle
JOIN sys.dm_os_waiting_tasks AS wt ON ws.waiting_task_address = wt.waiting_task_address
WHERE
wt.wait_type LIKE '%CPU%'
GROUP BY
wt.wait_type
ORDER BY
TotalCPUUsage DESC;
Diese Abfrage ruft den Warteart und die zugehörige CPU -Verwendung für alle mit der CPU in der SQL Server -Instanz bezogenen Wartezeittypen ab. Der sys.dm_os_wait_stats Die dynamische Managementansicht enthält Informationen zu den Wartestatistiken, während die sys.dm_os_waiting_tasks Die Dynamic Management View holt die Details der Warteaufgaben ab.
Beispiel:
Durch Ausführen der obigen Abfrage wird ein Ergebnis mit den folgenden Spalten angegeben:
So erhalten Sie SQL Server CPU -Auslastungsabfrage
Die Überwachung der CPU -Nutzung Ihres SQL -Servers ist entscheidend für die Identifizierung von Leistungsproblemen und die Gewährleistung einer optimalen Leistung. Befolgen Sie die folgenden Schritte, um die CPU -Auslastungsabfrage zu erhalten:
- Stellen Sie mit Ihrem bevorzugten Tool (SQL Server Management Studio usw.) eine Verbindung zum SQL -Server her.
- Öffnen Sie ein neues Abfragefenster.
- Führen Sie die folgende T-SQL-Anweisung aus:
WÄHLEN
SQLProcessutilization als "SQL Server CPU -Auslastung",
Systemidle als "System im Leerlauf",
100 - Systemidle - SQLProcessutilization als "andere"
AUS
sys.dm_os_ring_buffer
WO
RING_BUFFER_TYPE = N'Ring_Buffer_Scheduler_Monitor '
Und record_id = ((
WÄHLEN
Max (record_id)
AUS
sys.dm_os_ring_buffer
WO
RING_BUFFER_TYPE = N'Ring_Buffer_Scheduler_Monitor '
);
Die obige Abfrage ruft die CPU -Auslastungsinformationen aus der Systemansicht ab sys.dm_os_ring_buffersspeziell von der RING_BUFFER_SCHEDULER_MONITOR. Es gibt den SQL Server -CPU -Auslastung, den Prozentsatz des Systems und die CPU -Nutzung anderer Prozesse zurück.
Wichtigste Imbiss:
- Überwachen Sie die SQL Server -CPU -Nutzung mit dem SQL Server Management Studio.
- Verwenden Sie den DMV SYS.DM_OS_RING_BUFFERS, um CPU -Nutzungsstatistiken zu sammeln.
- Fragen Sie den DMV sys.dm_os_process_memory ab, um die CPU -Verwendung durch SQL Server -Prozesse zu finden.
- Verwenden Sie die Perfmon -Zähler, um die CPU -Nutzung im Laufe der Zeit zu verfolgen.
- Optimieren Sie Abfragen, Indizes und Serverkonfigurationen, um die CPU -Auslastung zu verringern.
Häufig gestellte Fragen
Hier sind einige häufige Fragen und Antworten zum Abrufen der CPU -Auslastungsabfrage auf SQL Server.
1. Wie kann ich die CPU -Auslastungsabfrage in SQL Server abrufen?
Um die CPU -Auslastungsabfrage in SQL Server abzurufen, können Sie die folgende Abfrage verwenden:
SELECT cpu_percent
FROM sys.dm_os_ring_buffers
WHERE ring_buffer_type = 'RING_BUFFER_SCHEDULER_MONITOR'
AND record_id = (
SELECT MAX(record_id)
FROM sys.dm_os_ring_buffers
WHERE ring_buffer_type = 'RING_BUFFER_SCHEDULER_MONITOR'
)
Diese Abfrage verwendet die dynamische Verwaltungsansicht sys.dm_os_ring_buffers, um den Prozentsatz der CPU -Nutzung abzurufen. Es filtert für den Ring -Puffertyp 'ring_buffer_scheduler_monitor' 'und wählt den Datensatz mit dem höchsten Record_ID aus, der die neuesten Daten darstellt.
2. Kann ich mit dieser Abfrage historische CPU -Nutzungsdaten erhalten?
Nein, in der angegebenen Abfrage wird die aktuellen CPU -Auslastungsdaten abgerufen. Wenn Sie historische CPU -Nutzungsdaten benötigen, müssen Sie die Daten regelmäßig anhand anderer Methoden wie erweiterten Ereignisse oder SQL -Serverprofiler sammeln und speichern.
3. Was repräsentiert die Spalte 'CPU_percent' im Abfrageergebnis?
Die Spalte 'CPU_percent' im Abfrageergebnis repräsentiert den Prozentsatz der CPU -Nutzung zum Zeitpunkt der Ausführung der Abfrage. Es gibt den Teil der Kapazität der CPU an, die derzeit von SQL Server -Prozessen verwendet wird.
4. Gibt es eine Möglichkeit, CPU -Auslastungsdaten für bestimmte SQL -Server -Instanzen abzurufen?
Ja, Sie können die Abfrage so ändern, dass die CPU -Auslastungsdaten für bestimmte SQL Server -Instanzen filtern. Fügen Sie eine zusätzliche Bedingung in der WHERE -Klausel hinzu, die mit dem gewünschten Namen der SQL Server -Instanz entspricht:
SELECT cpu_percent
FROM sys.dm_os_ring_buffers
WHERE ring_buffer_type = 'RING_BUFFER_SCHEDULER_MONITOR'
AND record_id = (
SELECT MAX(record_id)
FROM sys.dm_os_ring_buffers
WHERE ring_buffer_type = 'RING_BUFFER_SCHEDULER_MONITOR'
)
AND [sqlserver].[session_id] = @@SPID
Durch die Verwendung des Zustands '[SQLServer]. [Session_id] = @@ Spid' gibt die Abfrage die CPU -Nutzungsdaten nur für die aktuelle SQL -Serverinstanz zurück.
5. Kann ich die CPU-Nutzung in Echtzeit mit dieser Abfrage überwachen?
Nein, die Abfrage ruft zum Zeitpunkt der Ausführung die neuesten CPU -Nutzungsdaten ab. Um die CPU-Auslastung in Echtzeit zu überwachen, können Sie Tools wie SQL Server-Profiler, erweiterte Ereignisse oder Überwachungslösungen von Drittanbietern verwenden, die Funktionen zur Überwachung von Echtzeit bieten.
Das Verständnis der Überwachung und Analyse der CPU -Nutzung im SQL -Server ist entscheidend für die Aufrechterhaltung der Leistung und Stabilität Ihrer Datenbank. Durch die Verwendung der entsprechenden Abfrage können Sie problemlos wertvolle Informationen über die CPU-Nutzung sammeln, z.
Die Überwachung der CPU -Nutzung hilft Ihnen, potenzielle Engpässe zu identifizieren und die Abfrageleistung zu optimieren. Durch die regelmäßige Überprüfung der CPU -Nutzung können Sie proaktiv alle Probleme angehen und sicherstellen, dass Ihre SQL Server -Umgebung effizient ausgeführt wird. Denken Sie daran, die Abfrage in Zeiten der Spitzenaktivität durchzuführen, um ein genaues Maß für die CPU -Verwendung zu erhalten.