¿Cómo puedo ver el código SQL detrás de los DMV en SQL Server?
Los DMV proporcionan estadísticas útiles, pero ¿cuáles son las tablas involucradas que obtienen datos?
Ej:
SELECT *
FROM sys.dm_exec_query_memory_grants
Entonces, ¿cuáles son las tablas o dónde están los datos que utiliza este DMV?
Incluso si puedes ver el código fuente de esto, utilizará tablas internas del sistema a las que de otro modo no podrás acceder, por lo que esto es bastante inútil...
-marc_s
2 de marzo7, 2021 a las 8:57
Eso es correcto, pero ver el código/métodos de otros te hace aprender algo. Eso es lo que quiero hacer.
Pankaj_Dwivedi
27/03/2021 a las 12:23
------------------------------------
La forma más sencilla que conozco de obtener lo que estás pidiendo es utilizar el indicador SQL de Redgate
Le dará las definiciones de todas las vistas del sistema, aunque en realidad no le servirá de mucho ya que utilizan objetos internos del servidor que no están disponibles para usted.
Sin embargo, como ejemplo, el DMV que usted citaLo anterior se define como
create view sys.dm_exec_query_memory_grants as
select A.session_id, A.request_id, A.scheduler_id, A.dop, A.request_time, A.grant_time,
A.requested_memory_kb, A.granted_memory_kb, A.required_memory_kb, A.used_memory_kb, A.max_used_memory_kb,
A.query_cost, A.timeout_sec,
Convert(smallint, A.is_small) as resource_semaphore_id,
A.queue_id, A.wait_order, A.is_next_candidate, A.wait_time_ms,
A.plan_handle, A.sql_handle,
A.group_id, A.pool_id, A.is_small, A.ideal_memory_kb,
A.reserved_worker_count, A.used_worker_count, A.max_used_worker_count, A.reserved_node_bitmap
from OpenRowset(table DM_EXEC_QE_GRANTSINFO) a
go
------------------------------------
Puedes consultar la definición del objeto
select object_definition(object_id('sys.dm_exec_query_memory_grants'))
Pero muchos de los DMV (como este) exponen estructuras de memoria interna y en realidad no están construidos sobre tablas del sistema.
Así que todo lo que verás es
select .... FROM OpenRowset(TABLE DM_EXEC_QE_GRANTSINFO) A
0