25 Stimmen

Derzeit laufende Abfragen in SQL Server

Gibt es ein Programm oder eine SQL-Abfrage, mit der ich herausfinden kann, welche SQL-Abfragen auf einem SQL Server 2012 ausgeführt werden? Ich glaube, in früheren Versionen von SQL Server gab es ein Tool, mit dem der tatsächliche Abfrageinhalt oder der Name der gespeicherten Prozedur angezeigt wurde?

36voto

Suraj Punkte 421

Ich verwende die folgende Abfrage

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

31voto

Hari Menon Punkte 31641

Je nach Ihren Berechtigungen könnte diese Abfrage funktionieren:

SELECT sqltext.TEXT,
req.session_id,
req.status,
req.command,
req.cpu_time,
req.total_elapsed_time
FROM sys.dm_exec_requests req
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext

Ref: http://blog.sqlauthority.com/2009/01/07/sql-server-find-currently-running-query-t-sql

10voto

Flat Cat Punkte 839

Dies ist aus dem Buch "SQL Server DMV's In Action":

Die Ausgabe zeigt die spid (Prozesskennung), die ecid (dies ist vergleichbar mit einem Thread innerhalb derselben spid und nützlich, um parallel laufende Abfragen zu identifizieren), den Benutzer, der das SQL ausführt, den Status (ob das SQL läuft oder wartet), den Wartestatus (warum es wartet), den Hostnamen, den Domänennamen und die Startzeit (nützlich, um festzustellen, wie lange der Batch schon läuft).

Der schöne Teil ist die Abfrage und die übergeordnete Abfrage. Das zeigt zum Beispiel eine gespeicherte Prozedur als übergeordnete und die Abfrage innerhalb der gespeicherten Prozedur, die gerade läuft. Das war für mich sehr praktisch. Ich hoffe, das hilft auch anderen.

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

7voto

bhupendra patel Punkte 3109

Für die Installation des SQL-Profilers benötigen Sie folgende Informationen http://msdn.microsoft.com/en-us/library/bb500441.aspx . Ich würde Ihnen jedoch empfehlen, sich dieses Dokument durchzulesen http://blog.sqlauthority.com/2009/08/03/sql-server-introduction-to-sql-server-2008-profiler-2/ wenn Sie dies in Ihrer Produktionsumgebung tun möchten. Es gibt noch eine andere, bessere Möglichkeit, die Abfragen zu betrachten. Schauen Sie sich diese an und sehen Sie, ob sie hilft http://www.youtube.com/watch?v=vvziPI5OQyE

6voto

richardtallent Punkte 33425

Das Tool heißt SQL Server Profiler und ist immer noch Teil des Standard-Toolsets.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X