KILL (Transact-SQL)

Berlaku untuk:yes SQL Server (semua versi yang didukung) YesAzure SQL Database YesAzure SQL Managed Instance yesAzure Synapse Analytics yesAnalytics Platform System (PDW)

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

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

Topic link iconKonvensi Sintaksis T-SQL

Sintaks

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

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

Catatan

Untuk melihat sintaks transact-SQL untuk SQL Server 2014 dan 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 untuk setiap koneksi pengguna saat koneksi dibuat. Nilai ID sesi terkait 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 artifisial 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 mematikan 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 umumnya 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 penting sedang berjalan. Anda tidak dapat membunuh proses Anda sendiri. Anda juga tidak boleh menghentikan proses berikut:

  • PERINTAH MENUNGGU
  • CHECKPOINT SLEEP
  • PENULIS MALAS
  • 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 diragukan. 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 WITH STATUSONLY

KILL WITH STATUSONLY menghasilkan laporan jika ID sesi atau UOW kembali karena pernyataanUOWID| sesi KILL sebelumnya. Laporan kemajuan menyatakan jumlah putar kembali yang diselesaikan (dalam persen) dan perkiraan lamanya waktu tersisa (dalam detik). Laporan menyatakannya dalam bentuk 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 pernyataanUOWID| 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.

Contoh

A. 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 putar kembali untuk ID sesi tertentu.

KILL 54;  
KILL 54 WITH STATUSONLY;  
GO  
  
--This is the progress report.  
spid 54: Transaction rollback in progress. Estimated rollback completion: 80% Estimated time left: 10 seconds.  

C. Menggunakan KILL untuk menghentikan transaksi terdistribusi tanpa sumber

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

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

Lihat juga

KILL STATS JOB (Transact-SQL)
HENTIKAN LANGGANAN PEMBERITAHUAN KUERI (SQL BertransakSI)
Fungsi Bawaan (SQL Transact)
MATIKAN (SQL Transaksi)
@@SPID (SQL Bertransaksi)
sys.dm_exec_requests (Transact-SQL)
sys.dm_exec_sessions (Transact-SQL)
sys.dm_tran_locks (SQL Bertransaksi)
sp_lock (SQL Bertransaksi)
sp_who (SQL Bertransaksi)