关于数据库阻塞调查的一些常用SQL-sql server篇

查看表是否有锁
select   request_session_id   spid,OBJECT_NAME(resource_associated_entity_id) tableName   
from   sys.dm_tran_locks where resource_type='OBJECT'

解除锁:kill @spid


看sql执行时间
set statistics profile on
set statistics io on
set statistics time on
GO

SELECT * from TableName

set statistics profile off
set statistics io off
set statistics time off
GO

查询 SQL Server TOP 20 最大耗时 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 [完整语法],
    qt.dbid, dbname=db_name(qt.dbid),
    qt.objectid,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
and last_execution_time > '2019-11-15 16:50:59.580'
order by max_worker_time desc

 

关于隔离级别

READ UNCOMMITTED、READ COMMITTED(SQL Server实例的默认方式)、REPEATABLE READ(My-SQL实例的默认方式)、SERIALIZABLE。

 DBCC Useroptions -- isolation level 这项的值就代表当前的隔离级别

isolation level : read committed 提交读,就是事务commit后才能读,如果事务过长,可能导致其他read进程在等待中。

另外提一下:共享锁,可以看出 READ COMMITTED 和REPEATABLE READ的巨大区别:

共享 (S) 锁允许并发事务读取 (SELECT) 一个资源。资源上存在共享 (S) 锁时,任何其它事务都不能修改数据。一旦已经读取数据,便立即释放资源上的共享 (S) 锁,除非将事务隔离级别设置为可重复读或更高级别,或者在事务生存周期内用锁定提示保留共享 (S) 锁。  

  {

事务开始

// 即隔离级别READ COMMITTED 时,select完就释放了,如果是REPEATABLE READ,直到事务结束才释放共享锁

select操作 

事务结束

}

如果是mysql时(默认隔离级别是REPEATABLE READ),代码事务里太多select操作是会占用数据库资源的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值