SQL Server 事务策略规划全解析
1. 现有事务隔离级别的并发效应总结
在深入探讨之前,先回顾一下各隔离级别可能出现的并发副作用,具体内容如下表所示:
| 隔离级别 | 脏读 | 不一致分析 | 幻读 |
| — | — | — | — |
| Read Uncommitted | 是 | 是 | 是 |
| Read Committed | 否 | 是 | 是 |
| Read Committed Snapshot (单语句) | 否 | 是 | 是 |
| Repeatable Read | 否 | 否 | 是 |
| Snapshot | 否 | 否 | 否 |
| Serializable | 否 | 否 | 否 |
2. 设计锁定粒度级别
在 SQL Server 中,有多种方式可自定义锁定粒度级别。除了使用事务隔离级别,还能借助锁定提示和索引锁定行为定制来实现。
2.1 使用锁定提示
“提示”并非只是建议,它可“强制”查询优化器按指定方式运行。不过,由于查询优化器在多数情况下表现出色,使用提示时需谨慎,要先测试其是否真能提升查询性能。在以下情形中,锁定提示可能会发挥重要作用:
- 提升性能。
- 比使用隔离级别更精细地控制锁定粒度。
- 降低特定查询的隔离级别,避免锁定问题。
从语法角度看,提示可分为连接提示、查询提示和表提示;从功能角度,可分为锁定提示、连接提示、索引提示、编译提示、并行提示等。这里主要关注锁定提示,它能比隔离级别更精细地控制查询优化器的锁定行为,但只有在必要时才应干