【问题标题】:SQL Server snapshot isolation level issueSQL Server 快照隔离级别问题
【发布时间】:2010-11-10 01:51:47
【问题描述】:

我正在通过以下链接研究 SQL Server 2008 的快照隔离级别。我的困惑是,

http://msdn.microsoft.com/en-us/library/ms173763.aspx

  1. 提到“当前事务开始后其他事务所做的数据修改对当前事务中执行的语句不可见。” -- 似乎其他事务提交的数据对当前快照隔离级别事务不可见;

  2. 提到“在 SNAPSHOT 隔离级别下运行的事务可以查看该事务所做的更改。” -- 似乎其他事务提交的数据对当前快照隔离级别事务可见。

似乎 1 和 2 有冲突?有cmets吗?

提前致谢, 乔治

【问题讨论】:

    标签: sql sql-server sql-server-2008 transactions isolation-level


    【解决方案1】:

    数字 2 的意思是“我可以看到自己的变化;我看不到其他的变化”

    因此,如果我开始交易并进行了更改,我可以看到它们。在我的 TXN 看不到我的更改后开始的其他会话/连接的其他事务

    【讨论】:

    • 我有时难以阅读 BOL,而且我的母语是英语……我的(德国)同事前几天向我寻求 BOL 的帮助,我不得不三思而后行帮助他!
    • 在 BOL 中添加关于事务能够读取其自己的更新的评论至少在 BOL 中令人困惑。简单的没有别的办法!任何隔离级别的所有事务都能够读取自己的更新!通过明确地重新陈述它只会让读者想知道“这不是会以某种方式是真的吗?”。只是令人困惑。
    • BOL 是什么的缩写?我能想到几个,但我认为它们不适合这个讨论。谢谢
    【解决方案2】:

    你还需要知道 SNAPSHOT 和 READ COMMITTED SNAPSHOT 的区别 - 对于后者,您需要将 BOL 的报价修改如下:

    "当前开始后其他事务对数据的修改 STATEMENT(不是事务!)对当前事务中执行的语句不可见。”

    产生重大影响的案例示例:When Snapshot Isolation Helps and When It Hurts

    【讨论】:

      【解决方案3】:

      你必须从大局考虑。 READ_COMMITTED 仅有效/有用。 READ_UNCOMMITTED 有什么用?哪些业务需要脏读?读序列号?为什么任何业务需求都会强制读取数据的顺序。 SQL 服务器设计者没有考虑简化。 Oracle 选择只支持一个并且它可以工作。快照是 db 应该如何解决这个问题,所以我们甚至不应该知道。用左脑,我们应该研究如何支持业务逻辑,而不是 DB 本身。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-02
        • 1970-01-01
        • 2011-02-09
        • 1970-01-01
        • 2011-02-14
        • 2014-02-20
        相关资源
        最近更新 更多