1. ホーム
  2. sql-server

[解決済み】SQL Serverで実行中のクエリを一覧表示する

2022-04-08 21:19:40

質問

MS SQL Server (Enterprise Manager または SQL) で現在実行中のクエリ、および/または接続されているユーザーを一覧表示する方法はありますか?

私のデータベースサーバーの1つで、非常に長く実行されているクエリがあり、それを追跡して停止したい(またはそれを起動し続けている人)。

解決方法は?

SQL 2000またはSQL 2005サーバーで最も長く稼働しているSPIDが表示されます。

select
    P.spid
,   right(convert(varchar, 
            dateadd(ms, datediff(ms, P.last_batch, getdate()), '1900-01-01'), 
            121), 12) as 'batch_duration'
,   P.program_name
,   P.hostname
,   P.loginame
from master.dbo.sysprocesses P
where P.spid > 50
and      P.status not in ('background', 'sleeping')
and      P.cmd not in ('AWAITING COMMAND'
                    ,'MIRROR HANDLER'
                    ,'LAZY WRITER'
                    ,'CHECKPOINT SLEEP'
                    ,'RA MANAGER')
order by batch_duration desc

もし、結果から指定された spid に対して実行されている SQL を見る必要がある場合は、次のようなものを使います。

declare
    @spid int
,   @stmt_start int
,   @stmt_end int
,   @sql_handle binary(20)

set @spid = XXX -- Fill this in

select  top 1
    @sql_handle = sql_handle
,   @stmt_start = case stmt_start when 0 then 0 else stmt_start / 2 end
,   @stmt_end = case stmt_end when -1 then -1 else stmt_end / 2 end
from    sys.sysprocesses
where   spid = @spid
order by ecid

SELECT
    SUBSTRING(  text,
            COALESCE(NULLIF(@stmt_start, 0), 1),
            CASE @stmt_end
                WHEN -1
                    THEN DATALENGTH(text)
                ELSE
                    (@stmt_end - @stmt_start)
                END
        )
FROM ::fn_get_sql(@sql_handle)