(0) exportieren Drucken
Alle erweitern

sys.dm_exec_query_memory_grants

Letzte Aktualisierung: April 2011

Dieses Thema ist VERALTET. Die neueste Version finden Sie in der SQL 14 Transact-SQL-Referenz.

ImportantWichtig
Dieses Thema wird nicht aktualisiert. Die aktuelle Version finden Sie unter sys.dm_exec_query_memory_grants.

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.

In Microsoft Azure SQL-Datenbank sind dynamische Verwaltungssichten beispielsweise nicht in der Lage, Informationen verfügbar zu machen, die sich auf die Datenbankkapselung auswirken, oder die sich auf andere Datenbanken beziehen, auf die der Benutzer Zugriff hat. Um zu vermeiden, dass diese Informationen verfügbar gemacht werden, wird jede Zeile mit Daten, die nicht zum verbundenen Mandanten gehören, herausgefiltert. Zusätzlich werden die Werte in den folgenden Spalten gefiltert; der Spaltenwert ist auf NULL festgelegt.

  • scheduler_id

  • wait_order

  • pool_id

  • group_id

 

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, das diese Abfrage plant.

Dieser Spaltenwert ist gefiltert. Der Wert ist auf NULL festgelegt.

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 physische Arbeitsspeicher in Kilobytes.

max_used_memory_kb

bigint

Der bis zu diesem Zeitpunkt verwendete maximale physische 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.

noteHinweis
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.

Dieser Spaltenwert ist gefiltert. Der Wert ist auf NULL festgelegt.

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.

Dieser Spaltenwert ist gefiltert. Der Wert ist auf NULL festgelegt.

pool_id

int

ID des Ressourcenpools, zu dem die Arbeitsauslastungsgruppe gehört.

Dieser Spaltenwert ist gefiltert. Der Wert ist auf NULL festgelegt.

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.

Erfordert die VIEW DATABASE STATE-Berechtigung auf dem Server. Kann von der Masterdatenbank nicht abgefragt werden. Weitere Informationen finden Sie unter Dynamic Management Objects.

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 der Ressourcenkontrollen-Funktion kann ein Datenbankadministrator Serverressourcen auf Ressourcenpools verteilen, bis zu maximal 64 Pools. Seit SQL Server 2008 verhält sich jeder Pool wie eine kleine unabhängige Serverinstanz und erfordert 2 Semaphore. Die Anzahl der Zeilen, die von sys.dm_exec_query_resource_semaphores zurückgegeben werden, kann bis zu 20-mal mehr als die Zeilen sein, die in SQL Server 2005 zurückgegeben werden.

Anzeigen:
© 2014 Microsoft