sql-server – 设置ALLOW_SNAPSHOT_ISOLATION有什么影响?
我应该跑
ALTER DATABASE DbName SET ALLOW_SNAPSHOT_ISOLATION OFF 如果暂时不使用快照事务(TX)隔离(iso)? 为什么要启用,首先呢? 在SQL Server中启用(但暂时不使用)的成本是多少? –update: use someDbName; --( 1 ) alter database someDbName set allow_snapshot_isolation ON; dbcc useroptions; 最后一行显示当前会话的tx iso级别为(已提交). 所以,启用快照tx iso级别而不改变它不使用它等 --( 2 ) SET TRANSACTION ISOLATION LEVEL SNAPSHOT UPDATE2: --with enabling allow_snapshot_isolation alter database snapshottest set allow_snapshot_isolation ON -- but without enabling read_committed_snapshot --alter database snapshottest set read_committed_snapshot ON -- OR with OFF alter database snapshottest set read_committed_snapshot OFF go 没有执行结果/行 select * from sys.dm_tran_version_store 执行INSERT,DELETE或UPDATE之后 您能否提供脚本,说明如何通过(1)启用SNAPSHOT tx iso级别,但不能通过(2)打开tempdb中的任何版本和/或增加每行14个字节的数据大小? [1] 解决方法一旦在数据库中启用行版本(又名.snapshot),所有写入都必须进行版本控制.在写入发生的隔离级别下无关紧要,因为隔离级别只会影响读取.启动数据库行版本控制后,任何插入/更新/删除将:>增加每行14个字节的数据大小 再次,使用隔离级别是完全不相关的.请注意,如果满足以下任一条件,行版本控制也会发生: >表有一个触发器 所有这一切在Row Versioning Resource Usage年解释:
更新 :setvar dbname testsnapshot use master; if db_id('$(dbname)') is not null begin alter database [$(dbname)] set single_user with rollback immediate; drop database [$(dbname)]; end go create database [$(dbname)]; go use [$(dbname)]; go -- create a table before row versioning is enabled -- create table t1 (i int not null); go insert into t1(i) values (1); go -- this check will show that the records do not contain a version number -- select avg_record_size_in_bytes from sys.dm_db_index_physical_stats (db_id(),object_id('t1'),NULL,'DETAILED') -- record size: 11 (lacks version info that is at least 14 bytes) -- enable row versioning and and create an identical table -- alter database [$(dbname)] set allow_snapshot_isolation on; go create table t2 (i int not null); go set transaction isolation level read committed; go insert into t2(i) values (1); go -- This check shows that the rows in t2 have version number -- select avg_record_size_in_bytes from sys.dm_db_index_physical_stats (db_id(),object_id('t2'),'DETAILED') -- record size: 25 (11+14) -- this update will show that the version store has records -- even though the isolation level is read commited -- begin transaction; update t1 set i += 1; select * from sys.dm_tran_version_store; commit; go -- And if we check again the row size of t1,its rows now have a version number select avg_record_size_in_bytes from sys.dm_db_index_physical_stats (db_id(),'DETAILED') -- record size: 25 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql-server – 打开SQL Server CLR之前要检查的事
- sql-server – 当设置为CRLF时,SSIS读取LF作为终
- 关于SqlServer无法连接wmi提供程序 错误
- sql – Oracle 10g中的Pivot / Crosstab查询(动态
- 浅谈四舍五入
- SQL Server 计算两个日期相差的工作天数的语句
- sql-server – EF代码首先,如何使用不同的模式注
- sql-server – 针对1-1关系的非常简单的EF查询的
- SQLSERVER图片查看工具SQL Image Viewer5.5.0.15
- sql-server-2008 – SQL Server Management Stud