KILL (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)Titik akhir analitik SQL di Microsoft FabricWarehouse di Microsoft Fabric

Mengakhiri proses pengguna yang didasarkan pada ID sesi atau unit kerja (UOW). Jika ID sesi atau UOW yang ditentukan memiliki banyak pekerjaan yang harus diurungkan, pernyataan KILL mungkin perlu waktu untuk diselesaikan. Proses ini membutuhkan waktu lebih lama untuk diselesaikan terutama ketika proses melibatkan menggulung balik transaksi yang panjang.

KILL mengakhiri koneksi normal, yang secara internal menghentikan transaksi yang terkait dengan ID sesi yang ditentukan. Terkadang, Koordinator Transaksi Terdistribusi Microsoft (MS DTC) mungkin sedang digunakan. Jika MS DTC sedang digunakan, Anda juga dapat menggunakan pernyataan untuk mengakhiri transaksi terdistribusi tanpa induk dan ragu.

Konvensi sintaks transact-SQL

Sintaksis

-- Syntax for SQL Server  
  
KILL { session ID [ WITH STATUSONLY ] | UOW [ WITH STATUSONLY | COMMIT | ROLLBACK ] }    

-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse and Microsoft Fabric
  
KILL 'session_id'  
[;]   

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

ID sesi
Apakah ID sesi dari proses berakhir. session_id adalah bilangan bulat unik (int) yang ditetapkan ke setiap koneksi pengguna saat koneksi dibuat. Nilai ID sesi terikat dengan koneksi selama durasi koneksi. Ketika koneksi berakhir, nilai bilangan bulat dirilis dan dapat ditetapkan ulang ke koneksi baru.

Kueri berikut ini bisa membantu Anda mengidentifikasi session_id yang ingin Anda bunuh:

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
Mengidentifikasi Unit ID Kerja (UOW) transaksi terdistribusi. UOW adalah GUID yang dapat diperoleh dari kolom request_owner_guid tampilan sys.dm_tran_locks manajemen dinamis. UOW juga dapat diperoleh dari log kesalahan atau melalui monitor MS DTC. Untuk informasi selengkapnya tentang memantau transaksi terdistribusi, lihat dokumentasi MS DTC.

Gunakan KILL <UOW> untuk menghentikan transaksi terdistribusi yang belum terselesaikan. Transaksi ini tidak terkait dengan ID sesi nyata, tetapi sebaliknya dikaitkan secara buatan dengan ID sesi = '-2'. ID sesi ini memudahkan untuk mengidentifikasi transaksi yang belum terselesaikan dengan mengkueri kolom ID sesi dalam sys.dm_tran_lockstampilan manajemen dinamis , sys.dm_exec_sessions , atau sys.dm_exec_requests .

DENGAN STATUSONLY
Digunakan untuk menghasilkan laporan kemajuan untuk UOW tertentu atau session_id yang sedang digulung balik karena pernyataan KILL sebelumnya. KILL WITH STATUSONLY tidak mengakhiri atau mengembalikan UOW atau ID sesi. Perintah hanya menampilkan kemajuan pembatalan saat ini.

DENGAN PENERAPAN
Digunakan untuk membunuh transaksi terdistribusi yang belum terselesaikan dengan penerapan. Hanya berlaku untuk transaksi terdistribusi, Anda harus menentukan UOW untuk menggunakan opsi ini. Lihat transaksi terdistribusi untuk informasi selengkapnya.

DENGAN PUTAR KEMBALI
Digunakan untuk membunuh transaksi terdistribusi yang belum terselesaikan dengan pembatalan. Hanya berlaku untuk transaksi terdistribusi, Anda harus menentukan UOW untuk menggunakan opsi ini. Lihat transaksi terdistribusi untuk informasi selengkapnya.

Keterangan

KILL biasanya digunakan untuk mengakhiri proses yang memblokir proses penting lainnya dengan kunci. KILL juga dapat digunakan untuk menghentikan proses yang menjalankan kueri yang menggunakan sumber daya sistem yang diperlukan. Proses dan proses sistem yang menjalankan prosedur tersimpan yang diperluas tidak dapat diakhapi.

Gunakan KILL dengan hati-hati, terutama ketika proses kritis berjalan. Anda tidak dapat membunuh proses Anda sendiri. Anda juga tidak boleh mematikan proses berikut:

  • PERINTAH MENUNGGU
  • CHECKPOINT TIDUR
  • LAZY WRITER
  • LOCK MONITOR
  • HANDLER SINYAL

Gunakan @@SPID untuk menampilkan nilai ID sesi untuk sesi saat ini.

Untuk mendapatkan laporan nilai ID sesi aktif, kueri kolom session_id tampilan manajemen dinamis sys.dm_tran_locks, sys.dm_exec_sessions, dan sys.dm_exec_requests. Anda juga dapat melihat kolom SPID yang dikembalikan oleh prosedur tersimpan sistem sp_who. Jika pembatalan sedang berlangsung untuk SPID tertentu, kolom cmd dalam hasil sp_who yang ditetapkan untuk SPID tersebut menunjukkan KILLED/ROLLBACK.

Ketika koneksi tertentu memiliki kunci pada sumber daya database dan memblokir kemajuan koneksi lain, ID sesi koneksi pemblokiran muncul di blocking_session_id kolom sys.dm_exec_requests atau kolom yang blk dikembalikan oleh sp_who.

Perintah KILL dapat digunakan untuk menyelesaikan transaksi terdistribusi yang ragu. Transaksi ini adalah transaksi terdistribusi yang belum terselesaikan yang terjadi karena restart server database atau koordinator MS DTC yang tidak dienkripsi. Untuk informasi selengkapnya tentang transaksi yang ragu, lihat bagian "Penerapan Dua Fase" di Menggunakan Transaksi Yang Ditandai untuk Memulihkan Database Terkait Secara Konsisten (Model Pemulihan Penuh).

Menggunakan DENGAN STATUSONLY

KILL WITH STATUSONLY menghasilkan laporan jika ID sesi atau UOW digulung balik karena pernyataan UOW ID|sesi KILL sebelumnya. Laporan kemajuan menyatakan jumlah pembatalan selesai (dalam persen) dan perkiraan lama waktu tersisa (dalam detik). Laporan menyatakannya dalam formulir berikut:

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

Jika pembatalan ID sesi atau UOW selesai sebelum pernyataan KILL session ID|UOW WITH STATUSONLY berjalan, KILL session ID|UOW WITH STATUSONLY mengembalikan kesalahan berikut:

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

Kesalahan ini juga terjadi jika tidak ada ID sesi atau UOW yang digulung balik

Laporan status yang sama dapat diperoleh dengan mengulangi pernyataan UOW ID|sesi KILL yang sama tanpa menggunakan opsi WITH STATUSONLY. Namun, kami tidak menyarankan untuk mengulangi opsi dengan cara ini. Jika Anda mengulangi pernyataan ID sesi KILL, proses baru mungkin berhenti jika pembatalan selesai dan ID sesi ditetapkan kembali ke tugas baru sebelum pernyataan KILL baru berjalan. Cegah proses baru berhenti dengan menentukan WITH STATUSONLY.

Izin

SQL Server: Memerlukan izin UBAH KONEKSI APA PUN. ALTER ANY CONNECTION disertakan dengan keanggotaan dalam peran server tetap sysadmin atau processadmin.

SQL Database: Memerlukan izin KILL DATABASE CONNECTION. Login utama tingkat server memiliki KONEKSI KILL DATABASE.

Microsoft Fabric: Memerlukan izin Admin.

Azure Synapse Analytics: Memerlukan izin Admin.

Contoh

J. Menggunakan KILL untuk menghentikan sesi

Contoh berikut menunjukkan cara menghentikan ID 53sesi .

KILL 53;  
GO  

B. Menggunakan KILL session ID WITH STATUSONLY untuk mendapatkan laporan kemajuan

Contoh berikut menghasilkan status proses pemutaran kembali untuk ID sesi tertentu.

KILL 54;  
KILL 54 WITH STATUSONLY;  
GO  

Berikut adalah hasil yang ditetapkan.

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

C. Menggunakan KILL untuk menghentikan transaksi terdistribusi tanpa intim

Contoh berikut menunjukkan cara menghentikan transaksi terdistribusi tanpa intim (ID sesi = -2) dengan UOW dari D5499C66-E398-45CA-BF7E-DC9C194B48CF.

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

Lihat Juga

KILL STATS JOB (Transact-SQL)
LANGGANAN PEMBERITAHUAN KILL QUERY (Transact-SQL)
Fungsi Bawaan (Transact-SQL)
SHUTDOWN (Transact-SQL)
@@SPID (T-SQL)
sys.dm_exec_requests (Transact-SQL)
sys.dm_exec_sessions (Transact-SQL)
sys.dm_tran_locks (T-SQL)
sp_lock (T-SQL)
sp_who (T-SQL)