sql server 查看表的死锁和Kill 死锁进程
查询出来
select
request_session_id spid,
OBJECT_NAME(resource_associated_entity_id) tableName
from
sys.dm_tran_locks
where
resource_type='OBJECT
杀死死锁进程
kill spid
sqlserver检查死锁的sql
select a.spid blocking_spid,a.blocked,c.text blocking_text,d.text blocked_text
from sys.sysprocesses a with(nolock)
left join sys.sysprocesses b with(nolock) on a.blocked=b.spid
cross apply sys.dm_exec_sql_text(a.sql_handle) c
cross apply sys.dm_exec_sql_text(b.sql_handle) d
where a.blocked<>0
另:
exec master.dbo.sp_who_lock --查看当前死锁进程
exec master.dbo.p_killspid ytsafety--杀掉引起死锁的进程
--其中[使用CPU的语法] 是指具体耗时较长的SQL。如果耗时长的SQL在存储过程中,ObjectName 是存储过程的名称。dbname是对应的数据库。上述的排序是根据总耗时,total_worker_time来进行排序。如果是针对具体的SQL语句(忽略执行次数),可以根据[平均消耗CPU 时间(ms)] 来进行排序,更准确的找到应该优化的SQL。
SELECT TOP 20
total_worker_time/1000 AS [总消耗CPU 时间(ms)],execution_count [运行次数],
qs.total_worker_time/qs.execution_count/1000 AS [平均消耗CPU 时间(ms)],
last_execution_time AS [最后一次执行时间],max_worker_time /1000 AS [最大执行时间(ms)],
SUBSTRING(qt.text,qs.statement_start_offset/2+1,
(CASE WHEN qs.statement_end_offset = -1
THEN DATALENGTH(qt.text)
ELSE qs.statement_end_offset END -qs.statement_start_offset)/2 + 1)
AS [使用CPU的语法], qt.text [完整语法],
dbname=db_name(qt.dbid),
object_name(qt.objectid,qt.dbid) ObjectName
FROM sys.dm_exec_query_stats qs WITH(nolock)
CROSS apply sys.dm_exec_sql_text(qs.sql_handle) AS qt
WHERE execution_count>1
ORDER BY total_worker_time DESC
sql调优:https://blog.csdn.net/luanpeng825485697/article/details/80482315
索引的使用等