KILL (Transact-SQL)
Berlaku untuk: Titik akhir analitik SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL di Microsoft Fabric Warehouse 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, KILL
pernyataan dapat memakan waktu untuk menyelesaikannya. 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.
Sintaks
Sintaks untuk SQL Server, Azure SQL Database, dan Azure SQL Managed Instance:
KILL { session_id [ WITH STATUSONLY ] | UOW [ WITH STATUSONLY | COMMIT | ROLLBACK ] }
[ ; ]
Sintaks untuk Azure Synapse Analytics, Analytics Platform System (PDW), dan Microsoft Fabric:
KILL 'session_id'
[ ; ]
Argumen
session_id
ID sesi proses berakhir. session_id
adalah int unik 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 mungkin diperoleh dari request_owner_guid
kolom sys.dm_tran_locks
tampilan 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 tidak terselesaikan dengan mengkueri kolom ID sesi dalam sys.dm_tran_locks
tampilan 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 sebelumnyaKILL
. 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. Untuk informasi selengkapnya, lihat transaksi terdistribusi.
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. Untuk informasi selengkapnya, lihat transaksi terdistribusi.
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 berjalan. Anda tidak dapat membunuh proses Anda sendiri. Anda juga tidak boleh mematikan proses berikut:
AWAITING COMMAND
CHECKPOINT SLEEP
LAZY WRITER
LOCK MONITOR
SIGNAL HANDLER
Gunakan @@SPID
untuk menampilkan nilai ID sesi untuk sesi saat ini.
Untuk mendapatkan laporan nilai ID sesi aktif, kueri session_id
kolom sys.dm_tran_locks
tampilan manajemen dinamis , , sys.dm_exec_sessions
, dan sys.dm_exec_requests
. Anda juga dapat melihat SPID
kolom yang sp_who
dikembalikan prosedur tersimpan sistem. Jika pembatalan sedang berlangsung untuk SPID tertentu, cmd
kolom dalam hasil yang ditetapkan untuk SPID tersebut sp_who
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.
Gunakan DENGAN STATUSONLY
KILL WITH STATUSONLY
menghasilkan laporan jika ID sesi atau UOW digulung balik karena pernyataan atau KILL <UOW>
sebelumnyaKILL <session ID>
. 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 KILL <session ID> WITH STATUSONLY
pernyataan atau KILL <UOW> WITH STATUSONLY
berjalan, KILL ... 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 yang sama KILL
tanpa menggunakan WITH STATUSONLY
opsi . Namun, kami tidak menyarankan untuk mengulangi opsi dengan cara ini. Jika Anda mengulangi KILL <session_id>
pernyataan, proses baru mungkin berhenti jika pembatalan selesai dan ID sesi ditetapkan kembali ke tugas baru sebelum pernyataan baru KILL
berjalan. Cegah proses baru berhenti dengan menentukan WITH STATUSONLY
.
Izin
SQL Server: Memerlukan ALTER ANY CONNECTION
izin. ALTER ANY CONNECTION
disertakan dengan keanggotaan dalam peran server tetap sysadmin atau processadmin .
SQL Database: Memerlukan KILL DATABASE CONNECTION
izin. Login utama tingkat server memiliki KILL DATABASE CONNECTION
izin.
Microsoft Fabric: Memerlukan izin Admin.
Azure Synapse Analytics: Memerlukan izin Admin.
Contoh
J. Menggunakan KILL untuk menghentikan sesi
Contoh berikut menunjukkan cara menghentikan ID 53
sesi .
KILL 53;
GO
B. Gunakan 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 set hasilnya.
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';