关于NOLOCK的用法
来源:互联网 发布:重庆时时彩杀号软件 编辑:程序博客网 时间:2024/06/06 15:44
以前遇到过,但仅限于听同事说加上NOLOCK好一些,今天仔细研究测试了下,终于理解了,那么加与不加到底区别在哪呢? 我先说下其区别,之后再做测试。 大家都知道,每新建一个查询,都相当于创建一个会话,在不同的查询分析器里面进行的操作,可以影响到其他会话的查询,极端的情况可能会一直处于阻塞中,哪怕只是一个很简单的查询都“特别慢”。 BEGIN TRAN 是开始一个事务的意思,开始之后可执行一些SQL语句,接着需要执行COMMIT进行提交或者ROLLBACK进行回滚,否则就会出现上面的情况。但如果使用NOLOCK进行查询的时候,就不会因为别的回话没有提交或回滚,而受阻塞。所以概括起来,可以用以下语句来总结: NOLOCK能使当前会话的查询,不受其它会话的事务所阻塞。但是这样做,就读取了其它事务的“修改后未提交的”数据。 现在我们进行测试,一定要注意,必须在多个会话下才可以,也就是说,需要建三个查询分析器窗口。 表用最简单的表,自己动手建一个。 查询分析器一:执行 SELECT * FROM dbo.test_main 得到 id value1 one2 two3 three4 four 接着执行如下: BEGIN TRANINSERT INTO test_main VALUES(5, 'five') 一行受影响 查询分析器二:执行 SELECT * FROM dbo.test_main 则卡死,受上一会话所阻塞。查不出结果。 补充:那么卡死怎么办呢?我们已经说过,要执行提交或者回滚操作才可以,那么在会话一中执行COMMIT即可。 之后此查询立刻显示结果。 查询分析器三:执行 SELECT * FROM test_main(NOLOCK) 则显示如下 id value1 one2 two3 three4 four 5 five 但最后一行并没有真正存储在数据库中,因为会话一还没有进行提交,我们用NOLOCK就查询出来了。 也许你会想,那什么情况下用NOLOCK呢?经过我们的分析,用NOLOCK是为了避免出现卡死状态,那我们就可以分析其环境了。 一个经常操作的表,并且每次操作都很重要,这样一般要用到事务进行处理,因为可以避免出错的几率,我们查询时,要用NOLOCK,否则遇上卡死的几率很大。别人执行一个事务,还没处理完呢,你就查询了,那就卡死了。有了NOLOCK就可以解决这个问题了。
0 0
- 关于NOLOCK的用法
- with(nolock)的用法
- with(nolock)的用法
- 一个关于 nolock 的故事
- 转载,关于WITH (NOLOCK)的使用
- 关于mount nfs时-o nolock的问题
- 关于mount nfs时-o nolock的问题
- 关于mount nfs时-o nolock的问题
- 关于mount nfs时-o nolock的问题
- 关于mount nfs时-o nolock的问题
- 关于mount nfs时-o nolock的问题
- 关于mount nfs时-o nolock的问题
- 关于mount nfs时-o nolock的问题
- 关于mount nfs时-o nolock的问题
- 关于mount nfs时-o nolock的问题
- 关于sql中的with(nolock)
- with(nolock) 的作用
- with(nolock)的介绍
- Java内存管理第二篇 - 内存的分配
- 《中国程序化广告技术生态图》2015年三月号更新发布
- Cassandra的timestamp类型
- swift皮筋弹动发射飞机ios源码
- 网站倒计时功能
- 关于NOLOCK的用法
- Java内存管理第三篇 - 内存可能产生的问题
- 介绍Redis
- Linux下启动指定的Oracle数据库,并解锁/锁定指定数据库账户
- 使用 udev 高效、动态地管理 Linux 设备文件
- Cocos2d-x下Lua调用自定义C++类和函数的最佳实践
- mysql 数据库拆分与整合方案
- UIScrollView
- 支付宝无线快捷登录接口升级