首页 > 数据库 > SQL Server > 正文

Sql Server 2012新特性 Online添加非空栏位.

2024-08-31 00:55:29
字体:
来源:转载
供稿:网友
Sql Server 2012新特性 Online添加非空栏位.

我们都知道,Sql Server在一个数据量巨大的表中添加一个非空栏位是比较费心的,缺乏经验的DBA或是开发人员甚至可能鲁莽地直接添加导致阻塞相应业务,甚至可能因为资源欠缺造成实例的全局问题.当然这都是Sql 2008R2及以前版本的情况.在SQL2012中采用了新的实现方式.这里我将对比相应的实现方式给大家做个介绍.并简单说明Sql Server早期版本添加非空列的方法.

添加非空栏位的实现方式

早期版本(Sql Server2008R2及以前)添加非空栏位(要求有默认值)是对表中的所有数据行依次修改调整

我们通过一个简单的实例来看下

Sql 2008R2 SP2 Code

Create database tadnullgouse tadnullgocreate table t2(id int not null identity (1,1),dystr varchar(20),fixstr char(30));goset nocount on declare @batchSize intset @batchSize=1000declare @i intset @i=0while(@i<20000)begin  if (@i%@batchSize=0)    begin      if (@@TRANCOUNT>0)COMMIT TRAN      BEGIN TRAN    end  insert into t2(dystr,fixstr)values('aaa'+str(RAND()*100000000),'bbb'+str(RAND()*100000000))  set @i=@i+1end if (@@TRANCOUNT>0)COMMIT TRANdbcc ind(tadnull,t2,1) -----find a datapage pageid 21        dbcc traceon(3604)    dbcc page('tadnull',1,21,3)-----view the datapage 21

通过DBCC PAGE我们打印其中的一个数据页进行分析.

可以看到图1-1当前数据页的最后修改的日志记录为m_lsn = (28:69:279)

数据页中第一行数据(slot 0)页偏移量0x60,行长度为58

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表