设为首页 加入收藏

TOP

SQLServer事务隔离级别的选择如何影响锁定机制(三)
2018-06-12 08:43:17 】 浏览:275
Tags:SQLServer 事务 隔离 级别 选择 如何 影响 锁定 机制

velTest;
GOINSERTINTO dbo.IsolationTests(ColA)VALUES('X');SELECT*FROM dbo.IsolationTests;

注意,查询窗口2立即完成,但是数据修改未反映在查询窗口1中。

如果要更改查询窗口1以使用可序列化隔离级别并重新运行测试,则会发现查询窗口2现在将被阻塞,并且现在将等待直到查询窗口1完成之后才能插入行。

NoLok查询提示如何适合它呢?

表提示NoLoCK(与表提示ReununRead相同)与指定SET事务级别ReunUn承诺相同。你可以通过运行未提交的读代码来看到这一点,而对于查询窗口2,运行以下代码来代替:

SELECT*FROM dbo.IsolationTests WITH(NOLOCK);

如果你决定实现快照隔离,并且当前的代码使用NoLoCK(或ReununRebug)表提示,这些指定的提示将具有优先权——你需要更改代码以获得利用快照隔离级别的好处。

总结

在ISO隔离级别下,当我们改变查询的隔离级别时,远离SQLServer默认的Read提交,我们要么减少锁(但允许读取脏数据),要么增加涉及的锁定,以最小化并发效应。快照隔离级别消除了所有并发效应,同时在读取事务上保持零阻塞,但是由于没有任何免费的,你支付的代价是在用户数据库和TEMPDB中增加了TEMPDB活动和增加的存储空间需求。这就是说,我觉得如果你使用Read unundor(或NoLoCK),你应该切换到使用Read提交的快照隔离级别来实现无阻塞,你正试图为该查询实现。


编程开发网
首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇关于redis持久化的几种方式介绍 下一篇mysql优化之mysql查询性能排序分析