SQL Server 最小化日志操作解析,应用[手稿]

  • Sql Server 中数据库在BULK_LOGGED/SIMPLE模式下的一些操作会采用最小化日志的记录方式,以减小tran log落盘日志量从而提高整体性能.

    这里我简单介绍下哪些操作在什么样的情况下会最小化日志记录.以及现实生产环境中如何应用最小化日志.

    概念:SQL Server在满足相应条件的基础上时进行一些特定的操作如Rebuild Index时会进行最小化Tran Log记录操作,从而改善系统性能.

    注意:含最小化操作日志操作段日志无法按时间点恢复(point in time)

    需要还原模式为简单或大容量日志

    最小化日志的操作

    Create Index,Alter Index Rebulid

    Bulk import操作(BCP,Bulk insert)

    Select into

    Blob数据操作(使用Write等)

    Insert select(sql 2008后特定条件下可以)

    Merge(特定条件)

    应用:实际应用过程中我们实际使用insert select的时候居多,就此介绍

    关于insert select操作的最小化日志

    聚集表

    当聚集表为空时,使用TABLOCK 锁提示将会最小化日志

    当聚集表非空时,无论如何将不会最小化日志

    非聚集表

    当堆表为空时,使用TABLOCK锁提示,表中行数据,索引数据(非聚集索引)都会最小化日志

    当堆表非空时,使用TABLOCK锁提示,表中存在非聚集索引,则行数据,索引数据均非最小化日志

    注:最小化日志中表非复制表

       一些文档中在堆表有索引非空的情况认为堆行数据会最小化日志,实际是错误的.见图b-2中说明

    聚集表实例

    聚集空最小化日志 图a-1


    create database testbulk go use master ALTER DATABASE [testbulk] SET RECOVERY BULK_LOGGED WITH NO_WAIT go use testbulk go create table t1(id int not null identity (1,1),dystr varchar(200),fixstr char(500)); go set nocount on declare @i int set @i=0 while(@i<20000) begin insert into t1(dystr,fixstr)values('aaa'+str(RAND()*100000000),'bbb'+str(RAND()*100000000)) set @i=@i+1 end create table tcls ( id int , dystr varchar(200), fixstr char(500) ) go CREATE UNIQUE CLUSTERED INDEX inx_id ON dbo.tcls (id) insert into dbo.tcls with(tablockx) select * from dbo.t1 ----cluster table empty select operation,CONTEXT,[Log Record Length],AllocUnitName from fn_dblog(null,null) where AllocUnitName like '%tcls%'
     http://www.it165.net/database/html/201407/7428.html

转载于:https://www.cnblogs.com/BigBigLiang/p/4463235.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值