Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Analytics-eindpunt in Microsoft Fabric
Warehouse in Microsoft Fabric
SQL-database in Microsoft Fabric
Hiermee beëindigt u een gebruikersproces dat is gebaseerd op de sessie-id of werkeenheid (UOW). Als de opgegeven sessie-id of UOW veel werk ongedaan moet maken, kan het enige tijd duren voordat de KILL
instructie is voltooid. Het proces duurt langer, met name wanneer het proces betrekking heeft op het terugdraaien van een lange transactie.
KILL
beëindigt een normale verbinding, waardoor de transacties die zijn gekoppeld aan de opgegeven sessie-id intern worden gestopt. Soms is Microsoft Distributed Transaction Coordinator (MS DTC) mogelijk in gebruik. Als MS DTC in gebruik is, kunt u ook de instructie gebruiken om zwevende en twijfelachtige gedistribueerde transacties te beëindigen.
Transact-SQL syntaxis-conventies
Syntaxis
Syntaxis voor SQL Server, Azure SQL Database en Azure SQL Managed Instance:
KILL { session_id [ WITH STATUSONLY ] | UOW [ WITH STATUSONLY | COMMIT | ROLLBACK ] }
[ ; ]
Syntaxis voor Azure Synapse Analytics, Analytics Platform System (PDW) en Microsoft Fabric:
KILL 'session_id'
[ ; ]
Argumenten
session_id
De sessie-id van het proces dat moet worden beëindigd.
session_id
is een unieke int die wordt toegewezen aan elke gebruikersverbinding wanneer de verbinding wordt gemaakt. De waarde van de sessie-id is gekoppeld aan de verbinding voor de duur van de verbinding. Wanneer de verbinding eindigt, wordt de waarde voor het gehele getal vrijgegeven en kan deze opnieuw worden toegewezen aan een nieuwe verbinding.
Met de volgende query kunt u bepalen wat session_id
u wilt doden:
SELECT conn.session_id, host_name, program_name,
nt_domain, login_name, connect_time, last_request_end_time
FROM sys.dm_exec_sessions AS sess
JOIN sys.dm_exec_connections AS conn
ON sess.session_id = conn.session_id;
UOW
Identificeert de werk-id (UOW) van gedistribueerde transacties.
UOW is een GUID die kan worden verkregen uit de request_owner_guid
kolom van de sys.dm_tran_locks
dynamische beheerweergave.
UOW kan ook worden verkregen uit het foutenlogboek of via de MS DTC-monitor. Zie de MS DTC-documentatie voor meer informatie over het bewaken van gedistribueerde transacties.
Gebruik KILL <UOW>
dit om niet-opgeloste gedistribueerde transacties te stoppen. Deze transacties zijn niet gekoppeld aan een echte sessie-id, maar worden in plaats daarvan kunstmatig gekoppeld aan sessie-id = -2
. Met deze sessie-id kunt u eenvoudiger niet-opgeloste transacties identificeren door een query uit te voeren op de kolom sessie-id in sys.dm_tran_locks
, sys.dm_exec_sessions
of sys.dm_exec_requests
dynamische beheerweergaven.
MET STATUSONLY
Wordt gebruikt voor het genereren van een voortgangsrapport voor een opgegeven UOW of session_id
die wordt teruggedraaid vanwege een eerdere KILL
instructie.
KILL WITH STATUSONLY
de UOW of sessie-id wordt niet beëindigd of teruggedraaid. Met de opdracht wordt alleen de huidige voortgang van het terugdraaien weergegeven.
MET DOORVOEREN
Wordt gebruikt om een niet-opgeloste gedistribueerde transactie met doorvoer te beëindigen. Alleen van toepassing op gedistribueerde transacties, moet u een UOW opgeven om deze optie te gebruiken. Zie gedistribueerde transacties voor meer informatie.
MET TERUGDRAAIEN
Wordt gebruikt om een niet-opgeloste gedistribueerde transactie te beëindigen met terugdraaien. Alleen van toepassing op gedistribueerde transacties, moet u een UOW opgeven om deze optie te gebruiken. Zie gedistribueerde transacties voor meer informatie.
Opmerkingen
KILL
wordt vaak gebruikt om een proces te beëindigen dat andere belangrijke processen met vergrendelingen blokkeert.
KILL
kan ook worden gebruikt om een proces te stoppen dat een query uitvoert die gebruikmaakt van de benodigde systeembronnen. Systeemprocessen en -processen waarop een uitgebreide opgeslagen procedure wordt uitgevoerd, kunnen niet worden beëindigd.
Gebruik KILL
zorgvuldig, met name wanneer kritieke processen worden uitgevoerd. Je kunt je eigen proces niet doden. U moet ook de volgende processen niet beëindigen:
AWAITING COMMAND
CHECKPOINT SLEEP
LAZY WRITER
LOCK MONITOR
SIGNAL HANDLER
Gebruik @@SPID
dit om de waarde van de sessie-id (SPID) voor de huidige sessie weer te geven.
Als u een rapport met actieve sessie-id-waarden wilt ophalen, voert u een query uit op de session_id
kolom van de sys.dm_tran_locks
weergaven en sys.dm_exec_sessions
sys.dm_exec_requests
dynamisch beheer. U kunt ook de SPID
kolom weergeven die door de opgeslagen procedure van het sp_who
systeem wordt geretourneerd. Als er een terugdraaiactie wordt uitgevoerd voor een specifieke sessie-id, geeft de cmd
kolom in de sp_who
resultatenset voor die sessie-id aan KILLED/ROLLBACK
.
Wanneer een bepaalde verbinding een vergrendeling heeft op een databaseresource en de voortgang van een andere verbinding blokkeert, wordt de sessie-id van de blokkerende verbinding weergegeven in de blocking_session_id
kolom van sys.dm_exec_requests
of de blk
kolom die wordt geretourneerd door sp_who
.
De KILL
opdracht kan worden gebruikt om gedistribueerde transacties zonder twijfel op te lossen. Deze transacties zijn niet-opgeloste gedistribueerde transacties die optreden vanwege ongeplande herstart van de databaseserver of MS DTC-coördinator. Zie de sectie 'Two-Phase Doorvoeren' in Gemarkeerde transacties gebruiken om gerelateerde databases consistent te herstellen voor meer informatie over transacties die twijfelachtig zijn.
GEBRUIKEN MET STATUSONLY
KILL WITH STATUSONLY
genereert een rapport als de sessie-id of UOW terugdraait vanwege een vorige KILL <session ID>
of KILL <UOW>
instructie. In het voortgangsrapport wordt de hoeveelheid voltooide terugdraaibewerking (in procent) en de geschatte tijdsduur aangegeven die overblijft (in seconden). Het rapport vermeldt het in de volgende vorm:
Spid|UOW <xxx>: Transaction rollback in progress. Estimated rollback completion: <yy>% Estimated time left: <zz> seconds
Als het terugdraaien van de sessie-id of UOW is voltooid voordat de KILL <session ID> WITH STATUSONLY
of KILL <UOW> WITH STATUSONLY
instructie wordt uitgevoerd, KILL ... WITH STATUSONLY
wordt de volgende fout geretourneerd:
"Msg 6120, Level 16, State 1, Line 1"
"Status report cannot be obtained. Rollback operation for Process ID <session ID> is not in progress."
Deze fout treedt ook op als er geen sessie-id of UOW wordt teruggedraaid.
Hetzelfde statusrapport kan worden verkregen door dezelfde KILL
instructie te herhalen zonder de optie te WITH STATUSONLY
gebruiken. We raden u echter niet aan de optie op deze manier te herhalen. Als u een KILL <session_id>
instructie herhaalt, kan het nieuwe proces stoppen als het terugdraaien is voltooid en de sessie-id opnieuw wordt toegewezen aan een nieuwe taak voordat de nieuwe KILL
instructie wordt uitgevoerd. Voorkom dat het nieuwe proces wordt gestopt door op te WITH STATUSONLY
geven.
Machtigingen
SQL Server: Hiervoor is de ALTER ANY CONNECTION
machtiging vereist.
ALTER ANY CONNECTION
is opgenomen in lidmaatschap van de vaste serverfuncties sysadmin of processadmin .
SQL Database: Hiervoor is de KILL DATABASE CONNECTION
machtiging vereist. De principalaanmelding op serverniveau heeft de KILL DATABASE CONNECTION
machtiging.
Microsoft Fabric Data Warehouse: Hiervoor is schrijfmachtiging vereist.
SQL-database in Microsoft Fabric: Hiervoor is schrijfmachtiging vereist.
Azure Synapse Analytics: Hiervoor zijn beheerdersmachtigingen vereist.
Voorbeelden
Eén. KILL gebruiken om een sessie te stoppen
In het volgende voorbeeld ziet u hoe u sessie-id 53
stopt.
KILL 53;
GO
B. Kill-sessie-id MET STATUSONLY gebruiken om een voortgangsrapport te verkrijgen
In het volgende voorbeeld wordt een status gegenereerd van het terugdraaiproces voor de specifieke sessie-id.
KILL 54;
KILL 54 WITH STATUSONLY;
GO
Hier is het resultatenoverzicht.
spid 54: Transaction rollback in progress. Estimated rollback completion: 80% Estimated time left: 10 seconds.
C. KILL gebruiken om een zwevende gedistribueerde transactie te stoppen
In het volgende voorbeeld ziet u hoe u een zwevende gedistribueerde transactie (sessie-id = -2
) stopt met een UOW van D5499C66-E398-45CA-BF7E-DC9C194B48CF
.
KILL 'D5499C66-E398-45CA-BF7E-DC9C194B48CF';