Pagine

venerdì 9 settembre 2011

Query e Ram

Vi è mai capitato che Sql server si rifiutasse d'eseguire una query causa memoria insufficiente?
Se mai dovesse capitarvi e volete scoprire quanta memoria è necessaria e quanta è assegnata alla query stessa Sql server mette a disposizione tutta una serie di DMO (Dynamic Management Object)
che consentono di raggiungere lo scopo :


SELECT r.session_id 
,r.database_id
,r.user_id
,r.status
,st.text
,r.wait_type
,r.wait_time
,r.last_wait_type
,r.command
,es.host_name
,es.program_name
,es.nt_domain
,es.nt_user_name
,es.login_name
,mg.dop 
,mg.request_time  
,mg.grant_time 
,mg.requested_memory_kb 
,mg.required_memory_kb 
,mg.query_cost 
,mg.timeout_sec 
,mg.resource_semaphore_id 
,mg.wait_time_ms 
,CASE mg.is_next_candidate 
      WHEN 1 THEN 'Yes'
      WHEN 0 THEN 'No'
      ELSE 'Memory has been granted'
      END AS 'Next Candidate for Memory Grant'
,rs.target_memory_kb 
,rs.max_target_memory_kb 
,rs.total_memory_kb 
,rs.available_memory_kb 
,rs.granted_memory_kb  
,rs.used_memory_kb 
,rs.grantee_count 
,rs.waiter_count 
,rs.timeout_error_count 
,rs.forced_grant_count 
FROM sys.dm_exec_requests r
INNER JOIN sys.dm_exec_sessions es
 ON r.session_id = es.session_id
INNER JOIN sys.dm_exec_query_memory_grants mg
 ON r.session_id = mg.session_id
INNER JOIN sys.dm_exec_query_resource_semaphores rs
 ON mg.resource_semaphore_id = rs.resource_semaphore_id
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle)st

La selezione restituisce tutte le informazioni relative alla memoria in uso per le query sulla nostra istanza....

Nessun commento:

Posta un commento