Sdílet prostřednictvím


KILL (Transact-SQL)

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLAzure Synapse AnalyticsAnalytics Platform System (PDW)Koncový bod analýzy SQL v Microsoft FabricSklad v Microsoft FabricDatabáze SQL v Microsoft Fabric

Ukončí uživatelský proces založený na ID relace nebo jednotce práce (UOW). Pokud zadané ID relace nebo UOW má mnoho práce vrátit zpět, KILL může dokončení příkazu nějakou dobu trvat. Dokončení procesu trvá déle, zejména pokud proces zahrnuje vrácení dlouhé transakce zpět.

KILL ukončí normální připojení, které interně zastaví transakce přidružené k zadanému ID relace. Někdy se může používat microsoft Distributed Transaction Coordinator (MS DTC). Pokud se používá MS DTC, můžete také použít příkaz k ukončení osamocených a pochybovaných distribuovaných transakcí.

Transact-SQL konvence syntaxe

Syntax

Syntaxe PRO SQL Server, Azure SQL Database a Azure SQL Managed Instance:

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

Syntaxe pro Azure Synapse Analytics, systém PDW (Analytics Platform System) a Microsoft Fabric:

KILL 'session_id'
[ ; ]

Arguments

session_id

ID relace procesu, který se má ukončit. session_id je jedinečný int , který je přiřazen každému uživatelskému připojení při vytváření připojení. Hodnota ID relace je svázaná s připojením po dobu trvání připojení. Po ukončení připojení se celočíselná hodnota uvolní a dá se znovu přiřadit k novému připojení.

Následující dotaz vám může pomoct identifikovat session_id , které chcete zabít:

 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

Identifikuje jednotku pracovního ID (UOW) distribuovaných transakcí. UOW je identifikátor GUID, který lze získat ze request_owner_guid sloupce sys.dm_tran_locks zobrazení dynamické správy. UOW lze také získat z protokolu chyb nebo prostřednictvím monitorování MS DTC. Další informace o monitorování distribuovaných transakcí naleznete v dokumentaci MS DTC.

Slouží KILL <UOW> k zastavení nevyřešených distribuovaných transakcí. Tyto transakce nejsou přidruženy k žádnému SKUTEČNÉMU ID relace, ale jsou přidruženy uměle s ID relace = -2. Toto ID relace usnadňuje identifikaci nevyřešených transakcí dotazováním sloupce ID relace v sys.dm_tran_lockszobrazeních sys.dm_exec_sessions, nebo sys.dm_exec_requests dynamických zobrazení správy.

Se STATUSONLY

Používá se k vygenerování zprávy o průběhu pro zadaný objekt UOW nebo session_id který se vrací zpět z důvodu předchozího KILL příkazu. KILL WITH STATUSONLY neukončí nebo vrátí ID UOW nebo relace. Příkaz zobrazí pouze aktuální průběh vrácení zpět.

S COMMIT

Slouží k ukončení nevyřešené distribuované transakce s potvrzením. Tuto možnost můžete použít pouze u distribuovaných transakcí. Další informace naleznete v tématu distribuované transakce.

S ROLLBACKEM

Slouží k ukončení nevyřešené distribuované transakce s vrácením zpět. Tuto možnost můžete použít pouze u distribuovaných transakcí. Další informace naleznete v tématu distribuované transakce.

Remarks

KILL se běžně používá k ukončení procesu, který blokuje další důležité procesy pomocí zámků. KILL lze také použít k zastavení procesu, který spouští dotaz, který používá nezbytné systémové prostředky. Systémové procesy a procesy, na kterých běží rozšířená uložená procedura, nelze ukončit.

Používejte KILL pečlivě, zejména v případě, že jsou spuštěny kritické procesy. Nemůžete zabít svůj vlastní proces. Neměli byste také ukončovat následující procesy:

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

Slouží @@SPID k zobrazení hodnoty ID relace (SPID) pro aktuální relaci.

Chcete-li získat sestavu hodnot ID aktivní relace, zadejte dotaz na session_id sloupec sys.dm_tran_lockszobrazení , sys.dm_exec_sessionsa sys.dm_exec_requests dynamické správy. Můžete také zobrazit SPID sloupec, který systém uložená procedura sp_who vrací. Pokud probíhá vrácení zpět pro konkrétní ID relace, cmd sloupec v sp_who sadě výsledků pro toto ID relace označuje KILLED/ROLLBACK.

Pokud má určité připojení zámek na prostředku databáze a blokuje průběh jiného připojení, ID relace blokujícího připojení se zobrazí ve blocking_session_id sloupci sys.dm_exec_requests nebo blk sloupci vráceného uživatelem sp_who.

Příkaz KILL lze použít k vyřešení distribuovaných transakcí v pochybnostech. Tyto transakce jsou nerozpoznané distribuované transakce, ke kterým dochází kvůli neplánovaným restartováním databázového serveru nebo koordinátoru MS DTC. Další informace o transakcích bez pochybností naleznete v části "Two-Phase Potvrzení" v části Použití označených transakcí k obnovení souvisejících databází konzistentně.

Použití SE STAVEM

KILL WITH STATUSONLY generuje sestavu, pokud se ID relace nebo UOW vrátí zpět z důvodu předchozího KILL <session ID> příkazu nebo KILL <UOW> příkazu. Zpráva o průběhu uvádí množství dokončených vrácení zpět (v procentech) a odhadovanou dobu, kterou zbývá (v sekundách). Sestava ji uvádí v následujícím formátu:

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

Pokud se vrácení ID relace nebo UOW dokončí před spuštěním KILL <session ID> WITH STATUSONLY příkazu KILL <UOW> WITH STATUSONLY , KILL ... WITH STATUSONLY vrátí následující chybu:

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

K této chybě dochází také v případě, že se zpět nevrátí žádné ID relace nebo UOW.

Stejnou zprávu o stavu lze získat opakováním stejného KILL příkazu bez použití WITH STATUSONLY této možnosti. Tuto možnost ale nedoporučujeme tímto způsobem opakovat. Pokud příkaz zopakujete KILL <session_id> , může se nový proces zastavit, pokud se vrácení zpět dokončí a ID relace se před spuštěním nového KILL příkazu znovu přiřazuje novému úkolu. Zabrání zastavení nového procesu zadáním WITH STATUSONLY.

Permissions

SQL Server:ALTER ANY CONNECTION Vyžaduje oprávnění. ALTER ANY CONNECTION je součástí členství v pevných rolích serveru sysadmin nebo processadmin .

SQL Database:KILL DATABASE CONNECTION Vyžaduje oprávnění. Přihlašovací jméno objektu KILL DATABASE CONNECTION zabezpečení na úrovni serveru má oprávnění.

Datový sklad Microsoft Fabric: Vyžaduje oprávnění k monitorování položky nebo členství v roli Správce pracovního prostoru.

Databáze SQL v Microsoft Fabric:KILL DATABASE CONNECTION Vyžaduje oprávnění v databázovém stroji SQL nebo oprávnění k zápisu položky v pracovním prostoru Prostředky infrastruktury.

Azure Synapse Analytics: Vyžaduje oprávnění správce.

Examples

A. Zastavení relace pomocí příkazu KILL

Následující příklad ukazuje, jak zastavit ID 53relace .

KILL 53;
GO

B. Získání zprávy o průběhu pomocí ID relace KILL SE STAVONLY

Následující příklad vygeneruje stav procesu vrácení zpět pro konkrétní ID relace.

KILL 54;
KILL 54 WITH STATUSONLY;
GO

Tady je soubor výsledků.

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

C. Zastavení osamocené distribuované transakce pomocí příkazu KILL

Následující příklad ukazuje, jak zastavit osamocený distribuovanou transakci (ID relace = -2) s UOW z D5499C66-E398-45CA-BF7E-DC9C194B48CF.

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