현재 MS SQL Server (Enterprise Manager 또는 SQL을 통해)에서 실행중인 쿼리 및 / 또는 누가 접속 한 쿼리를 나열 할 수 있습니까?
데이터베이스 서버 중 하나에서 매우 오래 실행되는 쿼리가 실행되고 있다고 추적하고 추적을 중지하고 싶습니다 (또는 계속 시작하는 사람).
답변
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)
답변
SQL Server 2005 또는 2008을 실행중인 경우 DMV를 사용하여이를 찾을 수 있습니다.
SELECT *
FROM sys.dm_exec_requests
CROSS APPLY sys.dm_exec_sql_text(sql_handle)
- sys.dm_exec_requests 에 대한 추가 정보
- sys.dm_exec_sql_text 에 대한 추가 정보
답변
sp_who 명령을 실행하여 모든 현재 사용자, 세션 및 프로세스 목록을 얻을 수 있습니다 . 그런 다음 다른 사람을 차단하는 모든 spid 에서 KILL 명령 을 실행할 수 있습니다 .
답변
sys
뷰를 쿼리하는 것이 좋습니다 . 비슷한
SELECT *
FROM
sys.dm_exec_sessions s
LEFT JOIN sys.dm_exec_connections c
ON s.session_id = c.session_id
LEFT JOIN sys.dm_db_task_space_usage tsu
ON tsu.session_id = s.session_id
LEFT JOIN sys.dm_os_tasks t
ON t.session_id = tsu.session_id
AND t.request_id = tsu.request_id
LEFT JOIN sys.dm_exec_requests r
ON r.session_id = tsu.session_id
AND r.request_id = tsu.request_id
OUTER APPLY sys.dm_exec_sql_text(r.sql_handle) TSQL
이렇게하면 모든 서버 리소스를 사용 TotalPagesAllocated
하고있는 spid
것을 파악하는 데 도움이 될 수 있습니다 . 활동 모니터 sys
를 표시하지 않고이 뷰를 사용하여 진행 상황을 볼 수없는 경우가 많습니다 .
다음 기사를 읽는 것이 좋습니다. 나는 여기 에서이 참조를 얻었다 .
답변
제품에는 다양한 관리 뷰가 내장되어 있습니다. SQL 2000에서는 sysprocesses를 사용 합니다. SQL 2K5에는 sys.dm_exec_connections , sys.dm_exec_sessions 및 sys.dm_exec_requests 와 같은 뷰가 더 있습니다 .
이러한 뷰를 활용하는 sp_who 와 같은 절차도 있습니다. 2K5 Management Studio 에는 Activity Monitor도 있습니다.
마지막 으로 Adam Machanic 의 Who Is Active 같은 커뮤니티 기여 스크립트가 있습니다 .
답변
실제로 EXEC sp_who2
Query Analyzer / Management Studio에서 실행 하면 더 많은 정보가 제공됩니다.sp_who
.
그 외에도 서버에 대한 모든 인 / 아웃 트래픽을 감시하도록 SQL 프로파일 러를 설정할 수 있습니다. 프로파일 러는 또한보고있는 내용을 정확하게 좁힐 수 있습니다.
SQL Server 2008의 경우 :
START - All Programs - Microsoft SQL Server 2008 - Performance Tools - SQL Server Profiler
프로파일 러는 진정으로 로깅 및 시청 앱입니다. 실행중인 한 계속 기록하고 감시합니다. 텍스트 파일이나 데이터베이스 또는 하드 드라이브를 채울 수 있으므로보고있는 내용과 시간을주의하십시오.
답변
SELECT
p.spid, p.status, p.hostname, p.loginame, p.cpu, r.start_time, r.command,
p.program_name, text
FROM
sys.dm_exec_requests AS r,
master.dbo.sysprocesses AS p
CROSS APPLY sys.dm_exec_sql_text(p.sql_handle)
WHERE
p.status NOT IN ('sleeping', 'background')
AND r.session_id = p.spid