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
Magazijn in Microsoft Fabric
SQL-database in Microsoft Fabric Preview
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
Syntax
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'
[ ; ]
Arguments
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_sessionsof sys.dm_exec_requests dynamische beheerweergaven.
WITH 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.
WITH COMMIT
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.
WITH ROLLBACK
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.
Remarks
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 COMMANDCHECKPOINT SLEEPLAZY WRITERLOCK MONITORSIGNAL 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_locksweergaven en sys.dm_exec_sessionssys.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 STATUSONLYgeven.
Permissions
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 de machtiging Item bewaken of lidmaatschap van de rol Werkruimtebeheerders vereist.
SQL-database in Microsoft Fabric: Vereist de KILL DATABASE CONNECTION machtiging in de SQL-database-engine of de machtiging Item schrijven in de werkruimte Fabric.
Azure Synapse Analytics: Hiervoor zijn beheerdersmachtigingen vereist.
Examples
A. KILL gebruiken om een sessie te stoppen
In het volgende voorbeeld ziet u hoe u sessie-id 53stopt.
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';