HTML5技术

30分钟全面解析-SQL事务+隔离级别+阻塞+死锁 - jackson0714(3)

字号+ 作者:H5之家 来源:H5之家 2016-07-06 11:00 我要评论( )

会话52: (1)connect_time连接时间:2016-06-07 07:09:41.103 (2)last_read最后一次读操作时间:2016-06-07 07:10:56.233 (3)last_write最后一次写操作时间:2016-06-07 07:10:57.873 (4)most_recent_sql_h

会话52:
(1)connect_time连接时间:2016-06-07 07:09:41.103
(2)last_read最后一次读操作时间:2016-06-07 07:10:56.233
(3)last_write最后一次写操作时间:2016-06-07 07:10:57.873
(4)most_recent_sql_handle这是一个二进制标记,最后一个SQL批处理

会话56:
(1)状态WAIT-授予锁
(2)正在等待第1个数据文件上的第109页上的第0行资源的排他锁(3)持有第1个数据文件上的第109页资源的排他锁
(3)持有OBJECT资源,排他锁
(4)持有DATABASE资源,排他锁

 

 

 

 

 

 

 

 

 

 

★ 3.sys.dm_exec_sql_text 表函数

(1)该函数可以将二进制标记most_recent_sql_handle作为参数,然后返回SQL代码。

(2)阻塞进程在不断地运行,所以在代码中看到的最后一个操作不一定是导致问题的语句。在本例中最后一条执行语句是导致阻塞的语句。 

查询窗口

服务器进程标识符SPID

执行语句  结果  说明 

 Connection3  57

SELECT session_id , text FROM sys.dm_exec_connections CROSS APPLY sys.dm_exec_sql_text (most_recent_sql_handle) AS ST WHERE session_id IN ( 52, 56 )

 

  

会话52:
执行的SQL语句:

BEGIN TRAN UPDATE dbo.myProduct SET price = price + 1 WHERE id = 1


会话56:
执行的SQL语句:

(@1 tinyint) SELECT * FROM [dbo].[myProduct] WHERE [id]=@1


 

 

 

 

 

 

 

 

 

 

 

 

 

 

★ 4.sys.dm_exec_sessions 视图

(1)会话建立的时间login_time

(2)特定于会话的客户端工作站名称host_name

(3)初始化会话的客户端程序的名称program_name

(4)会话所使用的SQL Server登录名login_name

(5)最近一次会话请求的开始时间last_request_start_time

(6)最近一次会话请求的完成时间last_request_end_time 

查询窗口

服务器进程标识符SPID


执行语句 

结果  说明 

 Connection3 57 

SELECT * FROM sys.dm_exec_sessions

 

  

 

 

 

 

 

 

 

 

 

 

★ 5.sys.dm_exec_requests 视图

(1)识别出阻塞链涉及到的会话、争用的资源、被阻塞会话等待了多长时间

查询窗口

服务器进程标识符SPID


执行语句 

结果  说明 

 Connection3 57 

SELECT * FROM sys.dm_exec_sessions

 

 

 

会话56:
(1)被会话52阻塞,blocking_session_id = 52
(2)会话52的开始时间start_time
(3)状态挂起status = suspended
(4)挂起的命令command=select

 

 

 

 

 

 

 

 

 

★ 6.Lock_TIMEOUT 选项

(1)设置会话等待锁释放的超时期限

(2)默认情况下会话不会设置等待锁释放的超时期限

(3)设置会话超时期限为5秒, SET Lock_TIMEOUT 5000

(4)锁定如果超时,不会引发事务回滚

(5)取消会话超时锁定的设置,SET LOCK_TIMEOUT -1

如果超时,将显示以下错误:

 

★7.KILL <spid> 命令

(1)杀掉会话52,KILL 52

(2)杀掉会话,会引起事务回滚,同时释放排他锁

三、隔离级别 1.基本概念:

(1)隔离级别用来做什么

  a.隔离级别用于决定如何控制并发用户读写数据的操作

(2)写操作
  a.任何对表做出修改的语句

  b.使用排他锁

  c.不能修改读操作获得的锁和锁的持续时间

(3)读操作:

  a.任何检索数据的语句

  b.默认使用共享锁

  c.使用隔离级别来控制读操作的处理方式

2.隔离级别的分类

(1)未提交读 (READ UNCOMMITTED

(2)已提交读(READ COMMITTED)(默认值)

(3)可重复读(REPEATABLE READ

(4)可序列化(SERIALIZABLE

(5)快照(SNAPSHOT

(6)已经提交读快照(READ_COMMITTED_SNAPSHOT

3.隔离级别的设置

(1)设置整个会话的隔离级别

SET TRANSACTION ISOLATION LEVEL <isolation name>; SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

(2)用表提示设置查询的隔离级别

SELECT ... FROM <table> WITH (<isolation name>);
SELECT * FROM dbo.myProduct WITH (READCOMMITTED);


注意:

1.设置会话选项的隔离级别时,隔离级别中的每个单词之间需要用空格分隔

2.用表提示的隔离级别时,隔离级别中的每个单词之间不需要用空格分隔

3.表提示的隔离级别有同义词,如:NOLOCK->READUNCOMMITTED,HOLDLOCK->REPEATABLEREAD

4.隔离级别的严格性:1.未提交读<2.已提交读<3.可重复读<4.可序列化

5.隔离级别越高,一致性越高,并发性越低

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 30分钟掌握 C#7 - 雨夜潇湘

    30分钟掌握 C#7 - 雨夜潇湘

    2017-04-10 14:08

  • URL解析 - 妙音天女

    URL解析 - 妙音天女

    2017-03-27 16:02

  • 开源的.NET定时任务组件Hangfire解析 - 彭泽0902

    开源的.NET定时任务组件Hangfire解析 - 彭泽0902

    2017-03-22 13:00

  • 30分钟搞定后台登录界面(103个后台PSD源文件、素材网站) - 张果

    30分钟搞定后台登录界面(103个后台PSD源文件、素材网站) - 张果

    2017-03-21 10:00

网友点评
1