Lista zapytań uruchomionych na serwerze SQL
Czy istnieje sposób na listę zapytań, które są obecnie uruchomione na MS SQL Server (albo przez Enterprise Manager lub SQL) i / lub kto jest połączony?
Wydaje mi się, że na jednym z moich serwerów bazodanowych wykonuje się bardzo długo zapytanie i chciałbym je wyśledzić i zatrzymać (lub osobę, która ciągle je uruchamia).
17 answers
To pokaże Ci najdłużej działające Spidy na serwerze SQL 2000 lub SQL 2005:
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
Jeśli chcesz zobaczyć SQL uruchomiony dla danego spid z wyników, użyj czegoś takiego:
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 master.dbo.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)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-13 12:47:19
Jeśli używasz SQL Server 2005 lub 2008, możesz użyć DMV, aby to znaleźć...
SELECT *
FROM sys.dm_exec_requests
CROSS APPLY sys.dm_exec_sql_text(sql_handle)
- więcej o sys. dm_exec_requests
- więcej o sys. dm_exec_sql_text
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-07 10:42:29
Możesz uruchomić sp_who aby uzyskać listę wszystkich obecnych użytkowników, sesji i procesów. Następnie możesz uruchomić KILL na dowolnym spid, który blokuje innych.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-02 20:37:49
W produkcie wbudowane są różne widoki zarządzania. W SQL 2000 używasz sysprocesses. W SQL 2K5 jest więcej widoków jak sys. dm_exec_connections, sys. dm_exec_sessions i sys. dm_exec_requests .
Istnieją również procedury takie jak sp_who , które wykorzystują te poglądy. W 2K5 Management Studio otrzymujesz również Monitor Aktywności.
I wreszcie są skrypty stworzone przez społeczność, takie jak , który Jest aktywny przez Adama Machanica .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-02 20:51:47
Sugerowałbym sprawdzenie widoków sys
. coś podobnego do
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
W ten sposób możesz uzyskać TotalPagesAllocated
, który pomoże Ci zrozumieć spid
, który zabiera wszystkie zasoby serwera. Jest wiele razy, kiedy nie mogę nawet przywołać Monitora aktywności i użyć tych widoków sys
, aby zobaczyć, co się dzieje.
Polecam przeczytać poniższy artykuł. mam to odniesienie stąd .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-07 10:46:23
Właściwie, uruchomienie {[1] } w Query Analyzer / Management Studio daje więcej informacji niż sp_who
.
Dla SQL Server 2008:
START - All Programs - Microsoft SQL Server 2008 - Performance Tools - SQL Server Profiler
Pamiętaj, że profiler to naprawdę aplikacja do rejestrowania i oglądania. Będzie się rejestrować i oglądać tak długo, jak jest uruchomiony. Może wypełniać pliki tekstowe lub bazy danych lub dyski twarde, więc uważaj, co masz go oglądać i na jak długo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-07 10:49:45
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-07 10:51:53
W Eksploratorze obiektów przejdź do: Server -> Management - > Activity Monitor. To pozwoli Ci zobaczyć wszystkie połączenia na bieżącym serwerze.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-02 20:51:41
Jako Uwaga, Monitor Aktywności SQL Server dla SQL Server 2008 można znaleźć klikając prawym przyciskiem myszy bieżący serwer i przechodząc do "Monitora aktywności" w menu kontekstowym. Zauważyłem, że był to najprostszy sposób na zabicie procesów, jeśli używasz SQL Server Management Studio.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-02 05:07:08
Tutaj jest zapytanie, które pokaże wszelkie zapytania, które blokują. Nie jestem do końca pewien, czy wyświetli tylko wolne zapytania:
SELECT p.spid
,convert(char(12), d.name) db_name
, program_name
, convert(char(12), l.name) login_name
, convert(char(12), hostname) hostname
, cmd
, p.status
, p.blocked
, login_time
, last_batch
, p.spid
FROM master..sysprocesses p
JOIN master..sysdatabases d ON p.dbid = d.dbid
JOIN master..syslogins l ON p.sid = l.sid
WHERE p.blocked = 0
AND EXISTS ( SELECT 1
FROM master..sysprocesses p2
WHERE p2.blocked = p.spid )
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-02 20:41:49
Odpowiedni skrypt będzie wyglądał tak:
select
p.spid, p.status,p.hostname,p.loginame,p.cpu,r.start_time, t.text
from sys.dm_exec_requests as r, sys.sysprocesses p
cross apply sys.dm_exec_sql_text(p.sql_handle) t
where p.status not in ('sleeping', 'background')
and r.session_id=p.spid
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-12 20:20:26
W 2005 roku możesz kliknąć prawym przyciskiem myszy na bazę danych, przejść do raportów i jest cała lista raportów o przejściach, blokadach itp...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-02 20:41:41
Możesz użyć poniższego zapytania, aby znaleźć uruchomione Ostatnie żądanie:
SELECT
der.session_id
,est.TEXT AS QueryText
,der.status
,der.blocking_session_id
,der.cpu_time
,der.total_elapsed_time
FROM sys.dm_exec_requests AS der
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS est
Za pomocą poniższego skryptu można również znaleźć liczbę połączeń w bazie danych:
SELECT
DB_NAME(DBID) AS DataBaseName
,COUNT(DBID) AS NumberOfConnections
,LogiName
FROM sys.sysprocesses
WHERE DBID > 0
GROUP BY DBID, LogiName
Po Więcej szczegółów zapraszamy na stronę: http://www.dbrnd.com/2015/06/script-to-find-running-process-session-logged-user-in-sql-server/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-27 11:22:52
SELECT
p.spid, p.status, p.hostname, p.loginame, p.cpu, r.start_time, t.text
FROM
sys.dm_exec_requests as r,
master.dbo.sysprocesses as p
CROSS APPLY sys.dm_exec_sql_text(p.sql_handle) t
WHERE
p.status NOT IN ('sleeping', 'background')
AND r.session_id = p.spid
I
KILL @spid
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-07 10:56:50
Użyj SQL Server Profiler (menu Narzędzia) do monitorowania wykonywania zapytań i użyj Monitora aktywności w Management studio, aby zobaczyć, jak jest połączone i czy ich połączenie blokuje inne połączenia.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-02 20:39:05
Powinieneś wypróbować bardzo przydatną procedurę sp_whoIsActive
, którą znajdziesz tutaj: http://sqlblog.com/files/default.aspx i jest za darmo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-28 13:58:55
Spróbuj z tym:
Dostarczy Ci wszystkich zapytań użytkownika. Do spid 50 wszystko to są wewnętrzne sesje procesów sql server. Ale, jeśli chcesz, możesz usunąć klauzulę where:
select
r.session_id,
r.start_time,
s.login_name,
c.client_net_address,
s.host_name,
s.program_name,
st.text
from sys.dm_exec_requests r
inner join sys.dm_exec_sessions s
on r.session_id = s.session_id
left join sys.dm_exec_connections c
on r.session_id = c.session_id
outer apply sys.dm_exec_sql_text(r.sql_handle) st where r.session_id > 50
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-14 06:09:25