SQL Server: как убить -3 SPID?
Там много информации о позитиве SPIDs
и даже -1
а также -2
но я не нашел никакой информации о Blocked By
-3
, Кто-нибудь сможет помочь?
GUID
все 0, и когда я бегу sp_who2
на MASTER
дБ это показывает SPID
из 56
как RUNNABLE
на tempdb
но когда я пытаюсь kill
это или бежать sp_who2
на tempdb
это не проявляется, в то время как MASTER
а также tempdb
sp_who2
экземпляры оба SPID 54
,
Изменить: при запуске SELECT * FROM sys.sysprocesses WHERE spid = 56
это вывод для SPID, который блокируется:
spid 56
kpid 10500
blocked -3
waittype 0x0006
waittime 313816
lastwaittype LCK_M_IS
waitresource TAB: 5:1668253048:0
dbid 5
uid 1
cpu 0
physical_io 0
memusage 4
login_time 02:44.3
last_batch 02:44.5
ecid 0
open_tran 0
status suspended
sid 0x0105000000000005150000003DBE35AE805F26A82A34E78AE903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
hostname DESKTOP-JOS7UMG
program_name Microsoft SQL Server Management Studio - Query
hostprocess 11364
cmd SELECT
net_library LPC
context_info 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
sql_handle 0x01000500C609543A909F01271002000000000000
stmt_start 124
stmt_end 356
request_id 0
Edit2: при запуске select req_transactionUOW from master..syslockinfo where req_spid = [SPID Number]
а также KILL '[UOW Number]'
, вывод req_transationUOW подходит ко всем 0, и я получаю следующую ошибку при его уничтожении:
The distributed transaction with UOW {00000000-0000-0000-0000-000000000000} does not exist.
Редактировать 3: Когда я бегу select * from sys.dm_exec_requests
ниже строка является выходной. Здесь есть все, что я могу kill
? SPID не разблокирует таблицу, и я не хочу, чтобы все убивало все на волю в случае сбоя сервера.
session_id 59
request_id 0
start_time 10:23.4
status suspended
command SELECT
sql_handle 0x020000007509B2241E0ED80CA5FE2A1542C26EF873795AB30000000000000000000000000000000000000000
statement_start_offset 0
statement_end_offset 68
plan_handle 0x060005007509B224D06FB16B1002000001000000000000000000000000000000000000000000000000000000
database_id 5
user_id 1
connection_id E63659D9-A41B-4FAE-89B2-6026AE51B938
blocking_session_id -3
wait_type LCK_M_IS
wait_time 4246
last_wait_type LCK_M_IS
wait_resource OBJECT: 5:1668253048:0
open_transaction_count 0
open_resultset_count 1
transaction_id 374312
context_info 0x
percent_complete 0
estimated_completion_time 0
cpu_time 0
total_elapsed_time 4247
scheduler_id 3
task_address 0x0000021236EC8108
reads 0
writes 0
logical_reads 2
text_size 2147483647
language us_english
date_format mdy
date_first 7
quoted_identifier 1
arithabort 1
ansi_null_dflt_on 1
ansi_defaults 0
ansi_warnings 1
ansi_padding 1
ansi_nulls 1
concat_null_yields_null 1
transaction_isolation_level 2
lock_timeout -1
deadlock_priority 0
row_count 1
prev_error 0
nest_level 0
granted_query_memory 0
executing_managed_code 0
group_id 2
query_hash 0x496ED8C805DE7CAA
query_plan_hash 0x36444CF46922D91E
statement_sql_handle NULL
statement_context_id NULL
dop 1
parallel_worker_count NULL
external_script_request_id NULL
2 ответа
SPID -3 — это «отложенная транзакция».
Во время восстановления базы данных SQL Server обнаружил активную транзакцию, которую не удалось отменить из-за какой-то проблемы с вводом-выводом. Таким образом, блокировки, установленные для этой транзакции во время восстановления базы данных, никогда не снимаются и связаны с сеансом.-3
Вы не можете убить это, вам нужно решить основную проблему. См. « Перемещение транзакции из состояния DEFERRED » для решения этой проблемы. Это пункты, указанные ниже, чтобы дать краткий обзор и некоторую защиту от гниения ссылок, но...
⚠️Осторожно! Некоторые из них могут привести к потере данных! Прежде чем пытаться это сделать, прочтите связанную статью для получения важной дополнительной информации.
- Если он был отложен из-за того, что файловая группа находилась в автономном режиме, верните файловую группу в режим онлайн.
- Перезапустите базу данных и надейтесь, что проблема была временной.
- Восстановить базу данных (возможно онлайн)
- пометить файловую группу как несуществующую
- восстановить базу данных
Пол Рэндал приводит здесь пример того, как спроектировать отложенную транзакцию .
SPID -3 - это отложенная транзакция, которую я смог найти в Интернете. Чтобы убить это:
Найти номер UOW
выберите req_transactionUOW из master..syslockinfo, где req_spid = [номер SPID]
Скопируйте номер UOW с первого шага
УБИТЬ '[UOW Number]'
Это убьет отрицательный SPID для решения проблемы.