Dies zeigt Ihnen die am längsten laufenden SPIDs auf einem SQL 2000- oder SQL 2005-Server:
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
Wenn Sie sehen möchten, dass SQL für einen bestimmten Spid aus den Ergebnissen ausgeführt wird, verwenden Sie Folgendes:
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)
ms
Quantisierung durch zu ersetzens
. Ein möglicher Überlauf kann auftreten (ist bei mir passiert).Wenn Sie SQL Server 2005 oder 2008 ausführen, können Sie die DMVs verwenden, um dies zu finden ...
quelle
Sie können den Befehl sp_who ausführen , um eine Liste aller aktuellen Benutzer, Sitzungen und Prozesse abzurufen . Sie können dann den Befehl KILL auf jedem Spid ausführen, der andere blockiert.
quelle
Ich würde vorschlagen, die
sys
Ansichten abzufragen . etwas ähnliches wieAuf diese Weise erhalten Sie eine, mit
TotalPagesAllocated
deren Hilfe Sie herausfinden können,spid
welche alle Serverressourcen beansprucht. Es gibt viele Male, in denen ich nicht einmal den Aktivitätsmonitor aufrufen und diesesys
Ansichten verwenden kann, um zu sehen, was los ist.Ich würde Ihnen empfehlen, den folgenden Artikel zu lesen. Ich habe diese Referenz von hier bekommen .
quelle
In das Produkt sind verschiedene Verwaltungsansichten integriert. Unter SQL 2000 würden Sie sysprocesses verwenden . In SQL 2K5 gibt es weitere Ansichten wie sys.dm_exec_connections , sys.dm_exec_sessions und sys.dm_exec_requests .
Es gibt auch Prozeduren wie sp_who , die diese Ansichten nutzen. In 2K5 Management Studio erhalten Sie auch Activity Monitor.
Und zu guter Letzt gibt es von der Community bereitgestellte Skripte wie das Who Is Active von Adam Machanic .
quelle
Tatsächlich
EXEC sp_who2
liefert das Ausführen in Query Analyzer / Management Studio mehr Informationen alssp_who
.Darüber hinaus können Sie SQL Profiler so einrichten, dass der gesamte ein- und ausgehende Datenverkehr zum Server überwacht wird. Mit Profiler können Sie auch genau eingrenzen, wonach Sie suchen.
Für SQL Server 2008:
Denken Sie daran, dass der Profiler wirklich eine App zum Protokollieren und Beobachten ist. Es wird weiterhin protokolliert und überwacht, solange es ausgeführt wird. Es könnte Textdateien, Datenbanken oder Festplatten füllen. Achten Sie also darauf, was und wie lange Sie sehen.
quelle
quelle
Hinweis: Der SQL Server-Aktivitätsmonitor für SQL Server 2008 kann gefunden werden, indem Sie mit der rechten Maustaste auf Ihren aktuellen Server klicken und im Kontextmenü zu "Aktivitätsmonitor" wechseln. Ich fand, dass dies der einfachste Weg ist, Prozesse abzubrechen, wenn Sie SQL Server Management Studio verwenden.
quelle
Führen Sie im Objekt-Explorer einen Drilldown zu: Server -> Verwaltung -> Aktivitätsmonitor. Auf diese Weise können Sie alle Verbindungen zum aktuellen Server anzeigen.
quelle
Hier ist eine Abfrage, die alle blockierenden Abfragen anzeigt. Ich bin mir nicht ganz sicher, ob nur langsame Abfragen angezeigt werden:
quelle
Das richtige Skript wäre wie folgt:
quelle
Sie können die folgende Abfrage verwenden, um die letzte laufende Anfrage zu finden:
Mit dem folgenden Skript können Sie auch die Anzahl der Verbindungen pro Datenbank ermitteln:
Weitere Informationen finden Sie unter: http://www.dbrnd.com/2015/06/script-to-find-running-process-session-logged-user-in-sql-server/
quelle
2005 können Sie mit der rechten Maustaste auf eine Datenbank klicken, zu Berichten gehen und es gibt eine ganze Liste von Berichten über Übergänge und Sperren usw.
quelle
Versuchen Sie es damit:
Sie erhalten alle Benutzeranfragen. Bis 50 sind es nur interne SQL Server-Prozesssitzungen. Wenn Sie möchten, können Sie jedoch die where-Klausel entfernen:
quelle
Und
quelle
Verwenden Sie den SQL Server Profiler (Menü Extras), um die Ausführung von Abfragen zu überwachen, und verwenden Sie den Aktivitätsmonitor in Management Studio, um festzustellen, wie die Verbindung hergestellt ist und ob die Verbindung andere Verbindungen blockiert.
quelle
Sie sollten ein sehr nützliches Verfahren ausprobieren,
sp_whoIsActive
das Sie hier finden: http://whoisactive.com und es ist kostenlos.quelle