ALLOW_SNAPSHOT_ISOLATION 持续时间

GaT*_*mas 2 sql-server sql-server-2008-r2 snapshot-isolation

我想ALLOW_SNAPSHOT_ISOLATION在拥有约 4 亿条记录的生产数据库上启用。我知道每个记录需要添加 14 个字节。

如果我设置ALLOW_SNAPSHOT_ISOLATION它会阻塞一段时间与记录计数成正比,还是会异步更新数据?

首先,我想确保在启用此设置后,我的数据库不会在数小时内停止服务。

Mar*_*ith 7

...它会阻塞一段时间与记录计数成正比,还是会异步更新数据。

两者都不。

额外的 14 个字节用于存储两个元素:

  • 修改行的事务序列号。
  • 如果存在,则指向版本存储(在 tempdb 中)中该行的先前版本的指针。

在您启用快照隔离之后,这些仅在被修改时添加到行中。在您打开快照时,不会产生阻塞或额外负载来将 14 个字节添加到每行。

您在启用时可能遇到的唯一阻塞操作是由于需要等待所有当前事务提交,这一点值得牢记。理想情况下,在安静时期或最好是在您关闭所有活动的停机时间进行更改。

如果停机不是一种选择,请避免任何可能发生长时间运行事务的时间段(例如 ETL)。如果您在几秒钟内没有得到响应,您可以通过查询sys.dm_tran_active_snapshot_database_transactions来确定是什么妨碍了您。