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, 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.

Konvensi sintaks transact-SQL

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'
[ ; ]

Catatan

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

Argumen

session_id

ID sesi proses berakhir. session_idadalah 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_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 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_lockstampilan 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 STATUSONLYmenghasilkan 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 53sesi .

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 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';