Servidor SQL: cómo ver SQL detrás de los DMV

CorePress2024-01-24  11

¿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

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare