sql-server-2008 - READ_COMMITTED_SNAPSHOT的优缺点

标签 sql-server-2008 c#-4.0 transactions

在SQL Server 2008中设置READ_COMMITTED_SNAPSHOT ON的利弊是什么?

实际上,我遇到了事务死锁的问题,但是通过设置READ_COMMITTED_SNAPSHOT ON并禁用了锁升级(仅在导致死锁的事务中使用的表上)。这样就解决了约90%的死锁问题。但我担心它可能还有其他一些问题,例如性能等。

任何帮助将不胜感激。

最佳答案

RCSI的优点:

  • 在查询启动时提供数据的一致 View
  • 没有阻止
  • 更少的锁/升级

  • 但是,这不是免费的。 tempdb用于保留所谓的“版本存储”。这可能意味着:
  • tempdb的空间和I/O需求增加,以维护
  • 版本
    如果长时间运行的事务需要长时间保留版本和/或如果存在许多版本,则
  • 可能会降低性能

  • 此外,行版本信息每行增加14个字节。

    RCSI的常见替代方法通常包括将写入事件与报告分开。可以使用各种HA技术(例如日志传送,镜像+快照或可用性组+ SQL Server 2012中的只读辅助副本)来完成此操作。

    一些官方文档引用:
  • Working with tempdb in SQL Server 2005
  • Choosing Row Versioning-based Isolation Levels
  • 关于sql-server-2008 - READ_COMMITTED_SNAPSHOT的优缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10875586/

    相关文章:

    sql - 如何在 SQL Server 中实现多语言内容的全文搜索

    php - Laravel:将我的所有代码放入数据库事务中是一种好习惯吗?甚至没有数据库查询代码?

    sql - 查找特定时间段内的重复项

    sql-server - 使用前一列更新表,不进行任何循环

    sql - SQL Server如何获取一个巨大字段的内容?

    mysql - 并行查询 - SELECT 和 UPDATE - 选择太快或更新太慢问题

    mysql - SQL 事务语句在 Xampp 中不起作用

    sql - 将数据库更改为“在线”,并将数据库设置为“多用户”

    visual-studio - complus异常代码-532462766

    .net - Fluent NHibernate - 仅当不存在时才创建数据库模式