最近在測試環境的mysql執行一個alter table 語句時一直處于阻塞狀态,通過 show processlist 檢視線程一直處于Waiting for table metadata lock,
show processlist
select trx_state, trx_started, trx_mysql_thread_id, trx_query from information_schema.innodb_trx
KILL processid
------------SQL server
查找阻塞程序:
SELECT blocking_session_id '阻塞程序的ID', wait_duration_ms '等待時間(毫秒)', session_id '(會話ID)' FROM sys.dm_os_waiting_tasks
殺死阻塞程序:
KILL session_id
查找事務
SELECT es.session_id, es.login_name, es.host_name, est.text
, cn.last_read, cn.last_write, es.program_name
FROM sys.dm_exec_sessions es
INNER JOIN sys.dm_tran_session_transactions st --系統裡還存在的事務
ON es.session_id = st.session_id
INNER JOIN sys.dm_exec_connections cn
ON es.session_id = cn.session_id
CROSS APPLY sys.dm_exec_sql_text(cn.most_recent_sql_handle) est
LEFT OUTER JOIN sys.dm_exec_requests er
ON st.session_id = er.session_id
AND er.session_id IS NULL