sys.dm_exec_query_memory_grants (Transact-SQL)
Gibt Informationen zu den Abfragen zurück, die eine Arbeitsspeicherzuweisung erhalten haben oder für deren Ausführung noch eine Arbeitsspeicherzuweisung erforderlich ist. Abfragen, die nicht auf eine Arbeitsspeicherzuweisung warten müssen, werden in dieser Sicht nicht angezeigt.
Spaltenname |
Datentyp |
Beschreibung |
---|---|---|
session_id |
smallint |
ID (SPID) der Sitzung, in der die Abfrage ausgeführt wird. |
request_id |
int |
ID der Anforderung. Ist im Kontext der Sitzung eindeutig. |
scheduler_id |
int |
ID des Zeitplanungsmoduls, der diese Abfrage plant. |
dop |
smallint |
Grad an Parallelität für diese Abfrage. |
request_time |
datetime |
Datum und Uhrzeit, zu der die Abfrage die Arbeitsspeicherzuweisung angefordert hat. |
grant_time |
datetime |
Datum und Uhrzeit, zu der die Arbeitsspeicherzuweisung für die Abfrage erfolgt ist. NULL, wenn noch kein Arbeitsspeicher zugewiesen wurde. |
requested_memory_kb |
bigint |
Insgesamt angeforderter Arbeitsspeicher in Kilobytes. |
granted_memory_kb |
bigint |
Insgesamt tatsächlich zugewiesener Arbeitsspeicher in Kilobytes. Kann NULL sein, wenn noch kein Arbeitsspeicher zugewiesen wurde. Normalerweise sollte dieser Wert mit requested_memory_kb übereinstimmen. Für die Indexerstellung wird möglicherweise vom Server bei Bedarf weiterer Arbeitsspeicher über den ursprünglich zugewiesenen hinaus zugelassen. |
required_memory_kb |
bigint |
Der zur Ausführung der Abfrage benötigte minimale Arbeitsspeicher in Kilobytes. requested_memory_kb ist größer oder gleich diesem Wert. |
used_memory_kb |
bigint |
Der zu diesem Zeitpunkt verwendete physikalische Arbeitsspeicher in Kilobytes. |
max_used_memory_kb |
bigint |
Der bis zu diesem Zeitpunkt verwendete maximale physikalische Arbeitsspeicher in Kilobytes. |
query_cost |
float |
Die geschätzten Abfragekosten. |
timeout_sec |
int |
Timeout in Sekunden, nach dem die Abfrage die Anforderung der Arbeitsspeicherzuweisung aufgibt. |
resource_semaphore_id |
smallint |
Nicht eindeutige ID des Ressourcensemaphors, auf das die Abfrage wartet.
Hinweis
Diese ID ist in Versionen von SQL Server vor Version SQL Server 2008 eindeutig. Diese Änderung kann die Abfrageausführung bei der Problembehandlung beeinflussen. Weitere Informationen finden Sie im Abschnitt "Hinweise" weiter unten in diesem Thema.
|
queue_id |
smallint |
ID der Warteschlange, in der die Abfrage auf Arbeitsspeicherzuweisungen wartet. NULL, wenn der Arbeitsspeicher bereits zugewiesen wurde. |
wait_order |
int |
Die sequenzielle Position wartender Abfragen in der Warteschlange mit der angegebenen queue_id. Der Wert kann sich für eine Abfrage ändern, wenn andere Abfragen Arbeitsspeicherzuweisungen erhalten oder für diese ein Timeout eintritt. NULL, wenn bereits Arbeitsspeicher zugewiesen wurde. |
is_next_candidate |
bit |
Kandidat für die nächste Arbeitsspeicherzuweisung. 1 = Ja 0 = Nein NULL = Arbeitsspeicher wurde bereits zugewiesen |
wait_time_ms |
bigint |
Wartezeit in Millisekunden. NULL, wenn der Arbeitsspeicher bereits zugewiesen wurde. |
plan_handle |
varbinary(64) |
Bezeichner für diesen Abfrageplan. Verwenden Sie sys.dm_exec_query_plan, um den tatsächlichen XML-Plan zu extrahieren. |
sql_handle |
varbinary(64) |
Bezeichner für den Transact-SQL-Text dieser Abfrage. Verwenden Sie sys.dm_exec_sql_text, um den tatsächlichen Transact-SQL-Text abzurufen. |
group_id |
int |
ID für die Arbeitsauslastungsgruppe, in der diese Abfrage ausgeführt wird. |
pool_id |
int |
ID des Ressourcenpools, zu dem die Arbeitsauslastungsgruppe gehört. |
is_small |
tinyint |
Der Wert 1 gibt an, dass diese Zuweisung das kleine Ressourcensemaphor verwendet. Der Wert 0 gibt an, dass ein normales Semaphor verwendet wird. |
ideal_memory_kb |
bigint |
Größe der Arbeitsspeicherzuweisung in Kilobyte (KB), um alles in den physischen Speicher aufzunehmen. Dieser Wert basiert auf der Kardinalitätsschätzung. |
Berechtigungen
Erfordert die VIEW SERVER STATE-Berechtigung auf dem Server.
Hinweise
Ein typisches Debugszenario für ein Abfragetimeout sieht folgendermaßen aus:
Überprüfen Sie den Arbeitsspeicherstatus im Gesamtsystem mithilfe von sys.dm_os_memory_clerks, sys.dm_os_sys_info und verschiedenen Leistungsindikatoren.
Überprüfen Sie die Arbeitsspeicherreservierungen für die Abfrageausführung in sys.dm_os_memory_clerks, wobei type = 'MEMORYCLERK_SQLQERESERVATIONS' ist.
Überprüfen Sie mithilfe von sys.dm_exec_query_memory_grants auf Abfragen, die auf Zuweisungen warten.
Untersuchen Sie arbeitsspeicherintensive Abfragen mithilfe von sys.dm_exec_requests.
Untersuchen Sie beim Verdacht auf eine Endlosabfrage den Showplan in sys.dm_exec_query_plan und den Batchtext in sys.dm_exec_sql_text.
Abfragen mithilfe dynamischer Verwaltungssichten, die ORDER BY oder Aggregate enthalten, können die Arbeitsspeichernutzung erhöhen und so zu dem Problem beitragen, das mit ihnen behandelt werden soll.
Mit dem Ressourcenkontrollen-Feature kann ein Datenbankadministrator Serverressourcen auf Ressourcenpools verteilen (bis zu maximal 20 Pools). In SQL Server 2008 verhält sich jeder Pool wie eine kleine unabhängige Serverinstanz und erfordert 2 Semaphore. Die Anzahl der von sys.dm_exec_query_resource_semaphores zurückgegebenen Zeilen kann 20-mal so hoch sein wie in SQL Server 2005.