sys.dm_exec_query_memory_grants (Transact-SQL)
Restituisce informazioni sulle query a cui è stata concessa memoria o che sono ancora in attesa di riceverla. Le query che non sono in attesa di una concessione di memoria non saranno incluse in tale vista.
Nome colonna |
Tipo di dati |
Descrizione |
---|---|---|
session_id |
smallint |
ID (SPID) della sessione nella quale viene eseguita la query. |
request_id |
int |
ID della richiesta. Valore univoco nel contesto della sessione. |
scheduler_id |
int |
ID dell'utilità di pianificazione che sta pianificando la query. |
dop |
smallint |
Grado di parallelismo della query. |
request_time |
datetime |
Data e ora in cui la query ha richiesto la concessione di memoria. |
grant_time |
datetime |
Data e ora in cui la memoria è stata concessa alla query. È NULL se la memoria non è stata ancora concessa. |
requested_memory_kb |
bigint |
Quantità totale di memoria richiesta, espressa in kilobyte. |
granted_memory_kb |
bigint |
Quantità totale di memoria effettivamente concessa, espressa in kilobyte. Può essere NULL se la memoria non è stata ancora concessa. In una situazione tipica questo valore dovrebbe corrispondere al valore di requested_memory_kb. In caso di creazione di indici, il server può concedere ulteriore memoria su richiesta in aggiunta alla memoria concessa inizialmente. |
required_memory_kb |
bigint |
Quantità minima di memoria necessaria per l'esecuzione della query, espressa in kilobyte. Il valore di requested_memory_kb è maggiore o uguale a questa quantità. |
used_memory_kb |
bigint |
Memoria fisica attualmente in uso, espressa in kilobyte. |
max_used_memory_kb |
bigint |
Memoria fisica massima utilizzata fino a questo momento, espressa in kilobyte. |
query_cost |
float |
Costo stimato della query. |
timeout_sec |
int |
Timeout in secondi prima che la query rinunci alla richiesta di concessione di memoria. |
resource_semaphore_id |
smallint |
ID non univoco del semaforo di risorsa su cui la query è in attesa.
|
queue_id |
smallint |
ID della coda nella quale la query sta attendendo la concessione di memoria. È NULL se la memoria è già stata concessa. |
wait_order |
int |
Ordine sequenziale delle query in attesa all'interno del queue_id specificato. Questo valore può variare in caso di timeout o di concessione di memoria ad altre query. È NULL se la memoria è già stata concessa. |
is_next_candidate |
bit |
Candidato alla concessione di memoria successiva. 1 = Sì 0 = No NULL = Memoria già concessa |
wait_time_ms |
bigint |
Periodo di attesa espresso in millisecondi. È NULL se la memoria è già stata concessa. |
plan_handle |
varbinary(64) |
Identificatore del piano di query. Utilizzare sys.dm_exec_query_plan per estrarre il piano XML effettivo. |
sql_handle |
varbinary(64) |
Identificatore del testo Transact-SQL della query. Utilizzare sys.dm_exec_sql_text per ottenere il testo Transact-SQL effettivo. |
group_id |
int |
ID per il gruppo del carico di lavoro nel quale viene eseguita la query. |
pool_id |
int |
ID del pool di risorse a cui appartiene il gruppo del carico di lavoro. |
is_small |
tinyint |
Se il valore è 1, questa concessione utilizza il semaforo piccolo di risorsa. Se il valore è 0, viene utilizzato un semaforo normale. |
ideal_memory_kb |
bigint |
Dimensioni, in kilobyte (KB), della concessione di memoria per inserire tutto nella memoria fisica. Si basa su una stima della cardinalità. |
Autorizzazioni
È richiesta l'autorizzazione VIEW SERVER STATE per il server.
Osservazioni
Di seguito è illustrato un tipico scenario di debug per il timeout delle query:
Verificare lo stato complessivo della memoria di sistema utilizzando sys.dm_os_memory_clerks, sys.dm_os_sys_info e diversi contatori di prestazioni.
Verificare le prenotazioni di memoria per l'esecuzione di query in sys.dm_os_memory_clerks dove type = 'MEMORYCLERK_SQLQERESERVATIONS'.
Verificare le query in attesa di concessione di memoria utilizzando sys.dm_exec_query_memory_grants.
Esaminare in maggiore dettaglio le query che utilizzano una quantità elevata di memoria utilizzando sys.dm_exec_requests.
Se si sospetta la presenza di una query con eccessivo tempo di esecuzione, esaminare lo Showplan di sys.dm_exec_query_plan e il testo del batch di sys.dm_exec_sql_text.
Le query che utilizzano viste a gestione dinamica con incluse clausole ORDER BY o funzioni di aggregazione potrebbero aumentare l'utilizzo della memoria, contribuendo di conseguenza a causare il problema che dovrebbero risolvere.
La funzionalità Resource Governor consente a un amministratore del database di distribuire risorse del server fra un massimo di 64 pool di risorse. A partire da SQL Server 2008, per ogni pool, il cui comportamento è simile a una piccola istanza indipendente del server, sono richiesti 2 semafori. Il numero di righe restituite da sys.dm_exec_query_resource_semaphores può essere fino a 20 volte superiore alle righe restituite in SQL Server 2005.
Vedere anche
Riferimento
sys.dm_exec_query_resource_semaphores (Transact-SQL)
Funzioni e viste a gestione dinamica relative all'esecuzione (Transact-SQL)