Megosztás a következőn keresztül:


KILL (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

Befejez egy felhasználói folyamatot, amely a munkamenet-azonosítón vagy a munkaegységen (UOW) alapul. Ha a megadott munkamenet-azonosítónak vagy UOW-nak sok a visszavonandó munkája, az KILL utasítás végrehajtása eltarthat egy ideig. A folyamat végrehajtása hosszabb időt vesz igénybe, különösen akkor, ha a folyamat egy hosszú tranzakció visszaállítását foglalja magában.

KILL egy normál kapcsolat megszakad, amely belsőleg leállítja a megadott munkamenet-azonosítóhoz társított tranzakciókat. Időnként előfordulhat, hogy a Microsoft Distributed Transaction Coordinator (MS DTC) használatban van. Ha az MS DTC használatban van, az utasítást az árva és a kétségen kívüli elosztott tranzakciók megszüntetésére is használhatja.

Transact-SQL szintaxis konvenciók

Syntax

Szintaxis az SQL Serverhez, az Azure SQL Database-hez és a felügyelt Azure SQL-példányhoz:

KILL { session_id [ WITH STATUSONLY ] | UOW [ WITH STATUSONLY | COMMIT | ROLLBACK ] }
[ ; ]

Az Azure Synapse Analytics, az Analytics Platform System (PDW) és a Microsoft Fabric szintaxisa:

KILL 'session_id'
[ ; ]

Arguments

session_id

A befejezendő folyamat munkamenet-azonosítója. session_id egy egyedi int , amely a kapcsolat létrehozásakor minden felhasználói kapcsolathoz hozzá van rendelve. A munkamenet-azonosító értéke a kapcsolat időtartamára van kötve a kapcsolathoz. Amikor a kapcsolat véget ér, a rendszer felszabadítja az egész számot, és újra hozzárendelhető egy új kapcsolathoz.

Az alábbi lekérdezés segíthet azonosítani a session_id megölni kívánt adatokat:

 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

Az elosztott tranzakciók munkaazonosítóját (UOW) azonosítja. Az UOW egy GUID, amely a request_owner_guid dinamikus felügyeleti nézet oszlopából sys.dm_tran_locks kérhető le. Az UOW a hibanaplóból vagy az MS DTC monitoron keresztül is beszerezhető. Az elosztott tranzakciók monitorozásával kapcsolatos további információkért tekintse meg az MS DTC dokumentációját.

A megoldatlan elosztott tranzakciók leállítására használható KILL <UOW> . Ezek a tranzakciók nem valós munkamenet-azonosítóhoz vannak társítva, hanem mesterségesen vannak társítva a munkamenet-azonosító = -2értékével. Ez a munkamenet-azonosító megkönnyíti a megoldatlan tranzakciók azonosítását a munkamenet-azonosító oszlop lekérdezésével a , sys.dm_tran_locksvagy sys.dm_exec_sessions dinamikus felügyeleti nézetekbensys.dm_exec_requests.

CSAK STATUSSZAL

Egy adott UOW állapotjelentésének létrehozására szolgál, vagy session_id egy korábbi KILL utasítás miatt visszagördül. KILL WITH STATUSONLY nem fejeződik be vagy nem veti vissza az UOW-t vagy a munkamenet-azonosítót. A parancs csak a visszaállítás aktuális állapotát jeleníti meg.

COMMITÁCIÓVAL

Egy megoldatlan elosztott tranzakció véglegesítéssel történő elpusztítására szolgál. Csak az elosztott tranzakciókra alkalmazható, a beállítás használatához meg kell adnia egy UOW-t . További információ: elosztott tranzakciók.

ROLLBACKKEL

Egy megoldatlan elosztott tranzakció megszüntetésére szolgál visszaállítással. Csak az elosztott tranzakciókra alkalmazható, a beállítás használatához meg kell adnia egy UOW-t . További információ: elosztott tranzakciók.

Remarks

KILL gyakran használják olyan folyamat befejezésére, amely zárolásokkal blokkolja az egyéb fontos folyamatokat. KILL Egy olyan folyamat leállítására is használható, amely a szükséges rendszererőforrásokat használó lekérdezést hajt végre. A kiterjesztett tárolt eljárást futtató rendszerfolyamatok és folyamatok nem fejezhetők be.

Óvatosan használja KILL , különösen kritikus folyamatok futtatásakor. Nem ölheti meg a saját folyamatát. A következő folyamatokat sem szabad megölnie:

  • AWAITING COMMAND
  • CHECKPOINT SLEEP
  • LAZY WRITER
  • LOCK MONITOR
  • SIGNAL HANDLER

Az aktuális munkamenet munkamenet-azonosítójának (SPID) értékének megjelenítésére szolgál @@SPID .

Az aktív munkamenet-azonosító értékek jelentésének lekéréséhez kérje le a session_id , sys.dm_tran_locksés sys.dm_exec_sessions a sys.dm_exec_requestsdinamikus felügyeleti nézetek oszlopát. Megtekintheti a SPID rendszer által tárolt eljárás által visszaadott oszlopot sp_who is. Ha egy adott munkamenet-azonosítóhoz visszaállítás van folyamatban, az cmdsp_who adott munkamenet-azonosító eredményhalmazának oszlopa KILLED/ROLLBACKjelzi.

Ha egy adott kapcsolat zárolt egy adatbázis-erőforrást, és blokkolja egy másik kapcsolat előrehaladását, a blokkoló kapcsolat munkamenet-azonosítója megjelenik az blocking_session_id oszlopban sys.dm_exec_requests vagy a blk visszaadott sp_whooszlopban.

A KILL parancs a kétségek között elosztott tranzakciók megoldására használható. Ezek a tranzakciók nem oldott elosztott tranzakciók, amelyek az adatbázis-kiszolgáló vagy az MS DTC-koordinátor nem tervezett újraindítása miatt következnek be. A kétségen kívüli tranzakciókról további információt a "Two-Phase Véglegesítés" című szakaszban talál, amely a kapcsolódó adatbázisok konzisztens helyreállításához használt megjelölt tranzakciókat tartalmazza.

Használat ÁLLAPOT SZERINT

KILL WITH STATUSONLY jelentést hoz létre, ha a munkamenet-azonosító vagy a UOW egy korábbi KILL <session ID> vagy KILL <UOW> utasítás miatt visszafordul. Az előrehaladási jelentés a befejezett visszaállítás mennyiségét (százalékban) és a hátralévő idő becsült hosszát (másodpercben) határozza meg. A jelentés a következő formában állítja be:

Spid|UOW <xxx>: Transaction rollback in progress. Estimated rollback completion: <yy>% Estimated time left: <zz> seconds

Ha a munkamenet-azonosító vagy az UOW visszaállítása az vagy KILL <session ID> WITH STATUSONLY utasítás KILL <UOW> WITH STATUSONLY futtatása előtt befejeződik, KILL ... WITH STATUSONLY a következő hibát adja vissza:

"Msg 6120, Level 16, State 1, Line 1"
"Status report cannot be obtained. Rollback operation for Process ID <session ID> is not in progress."

Ez a hiba akkor is előfordul, ha nincs munkamenet-azonosító vagy UOW visszagördülése.

Ugyanazt az állapotjelentést úgy szerezheti be, hogy ugyanazt KILL az utasítást megismétli a WITH STATUSONLY beállítás használata nélkül. Azonban nem javasoljuk, hogy így ismételje meg a lehetőséget. Ha ismétel egy utasítást KILL <session_id> , az új folyamat leállhat, ha a visszaállítás befejeződik, és a munkamenet-azonosítót egy új tevékenységhez rendeli hozzá az új KILL utasítás futtatása előtt. Az új folyamat leállításának megakadályozása a beállítás megadásával WITH STATUSONLY.

Permissions

SQL Server:ALTER ANY CONNECTION Engedélyre van szükség. ALTER ANY CONNECTION a sysadmin vagy a processadmin rögzített kiszolgálói szerepkörök tagsága tartalmazza.

SQL Database:KILL DATABASE CONNECTION Engedélyre van szükség. A kiszolgálószintű egyszerű bejelentkezés rendelkezik az KILL DATABASE CONNECTION engedéllyel.

Microsoft Fabric Data Warehouse: Az elem figyeléséhez szükséges engedély vagy tagság a Munkaterület-rendszergazdák szerepkörben.

SQL-adatbázis a Microsoft Fabricben:KILL DATABASE CONNECTION Az SQL-adatbázismotor engedélyére vagy a Fabric-munkaterület írási engedélyére van szükség.

Azure Synapse Analytics: Rendszergazdai engedélyeket igényel.

Examples

A. Munkamenet leállítása a KILL használatával

Az alábbi példa bemutatja, hogyan állíthatja le a munkamenet-azonosítót 53.

KILL 53;
GO

B. Állapotjelentés beszerzése a KILL munkamenet-azonosítóval

Az alábbi példa a visszaállítási folyamat állapotát hozza létre az adott munkamenet-azonosítóhoz.

KILL 54;
KILL 54 WITH STATUSONLY;
GO

Itt van az eredmények összessége.

spid 54: Transaction rollback in progress. Estimated rollback completion: 80% Estimated time left: 10 seconds.

C. Árva elosztott tranzakció leállítása a KILL használatával

Az alábbi példa bemutatja, hogyan állíthat le egy árva elosztott tranzakciót (munkamenet-azonosító = -2) a következő UOW-valD5499C66-E398-45CA-BF7E-DC9C194B48CF: .

KILL 'D5499C66-E398-45CA-BF7E-DC9C194B48CF';