2012-05-26 23 views
11

¿Existe un programa o consulta SQL que pueda encontrar qué consultas SQL se están ejecutando en SQL Server 2012? Creo que había una herramienta en la versión anterior de SQL Server donde se muestra el contenido de la consulta real o el nombre del procedimiento almacenado?Consultas actualmente en ejecución en SQL Server

+1

perfilador SQL que es, ¿no es así? :) –

Respuesta

4

La herramienta se llama SQL Server Profiler, todavía forma parte del conjunto de herramientas estándar.

+0

¿Dónde está el 'SQL Server Profiler'? En mi MS SQL Server 2012 no hay una carpeta 'Herramientas de rendimiento '. No veo otras herramientas. ¿Cómo instalo estas herramientas? Pensé que todo estaba instalado. ¿Profiler sigue en SQL Server 2012? ¿Dónde están en la instalación estas herramientas? – iefpw

+0

Con una versión no expresa, viene con la opción Herramientas de administración; las versiones express no incluyen Profiler – SqlACID

3

Hay este, desde SQL Server DMV En Acción libro:

la salida muestra el SPID (identificador de proceso), el ecid (esto es similar a un hilo dentro del mismo spid y es útil para identificar consultas que se ejecutan en paralelo), el usuario que ejecuta el SQL, el estado (si el SQL está ejecutándose o esperando), el estado de espera (por qué está esperando) , el nombre de host, el nombre de dominio y la hora de inicio (útil para determinar cuánto tiempo se ha estado ejecutando el lote).

Lo bueno es la consulta y la consulta principal. Esto muestra, por ejemplo, un proceso almacenado como padre y la consulta dentro del proceso almacenado que se está ejecutando. Ha sido muy útil para mí. Espero que esto ayude a alguien más.

USE master 
GO 
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 
SELECT 
er.session_Id AS [Spid] 
, sp.ecid 
, er.start_time 
, DATEDIFF(SS,er.start_time,GETDATE()) as [Age Seconds] 
, sp.nt_username 
, er.status 
, er.wait_type 
, SUBSTRING (qt.text, (er.statement_start_offset/2) + 1, 
((CASE WHEN er.statement_end_offset = -1 
THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2 
ELSE er.statement_end_offset 
END - er.statement_start_offset)/2) + 1) AS [Individual Query] 
, qt.text AS [Parent Query] 
, sp.program_name 
, sp.Hostname 
, sp.nt_domain 


FROM sys.dm_exec_requests er 
INNER JOIN sys.sysprocesses sp ON er.session_id = sp.spid 
CROSS APPLY sys.dm_exec_sql_text(er.sql_handle)as qt 
WHERE session_Id > 50 
AND session_Id NOT IN (@@SPID) 
ORDER BY session_Id, ecid 
14

utilizo la consulta a continuación

SELECT SPID  = er.session_id 
    ,STATUS   = ses.STATUS 
    ,[Login]  = ses.login_name 
    ,Host   = ses.host_name 
    ,BlkBy   = er.blocking_session_id 
    ,DBName   = DB_Name(er.database_id) 
    ,CommandType = er.command 
    ,ObjectName  = OBJECT_NAME(st.objectid) 
    ,CPUTime  = er.cpu_time 
    ,StartTime  = er.start_time 
    ,TimeElapsed = CAST(GETDATE() - er.start_time AS TIME) 
    ,SQLStatement = st.text 
FROM sys.dm_exec_requests er 
    OUTER APPLY sys.dm_exec_sql_text(er.sql_handle) st 
    LEFT JOIN sys.dm_exec_sessions ses 
    ON ses.session_id = er.session_id 
LEFT JOIN sys.dm_exec_connections con 
    ON con.session_id = ses.session_id 
WHERE st.text IS NOT NULL 
+2

Esto me pareció mucho más útil que las otras búsquedas de consultas que muestran trabajos en ejecución. Este muestra el host y el inicio de sesión, lo cual es genial, ¡gracias! – russds

Cuestiones relacionadas