什么是最小化日志(Minimal Logging)?
当数据库的恢复模式为SIMPLE或者BULK_LOGGED时,对于最小化日志类型的操作,事务日志不记录单独每个数据行的日志,而是记录对应页和区结构的修改日志。
这样显著减少了操作产生的事务日志数量。例如,向某个数据页上插入200行数据,在最小化日志记录的情况下,只会记录一条此数据页变化的日志,而不是200条Insert日志。
最小化日志类型的操作
SELECT INTO
Bulk导数操作,包括 BULK INSERT和BCP
INSERT INTO . . . SELECT,包括两种情况:
a) SELECT中使用OPENROWSET(BULK. . .)
b)目标表不具有非聚集索引,向其插入超过8页的数据量,并且使用了TABLOCK时。如果目标表为空,可以有聚集索引,如果不为空,则不可以。
部分更新大值类型的列
UPDATE中使用.WRITE插入数据或追加数据时
对LOB字段使用WRITETEXT和UPDATETEXT插入或者追加新数据,不包括更新。
索引操作,包括在表/视图上CREATE INDEX,ALTER INDEX REBUILD,DBCC DBREINDEX,DROP INDEX(新堆的重新生成将按最小方式记录)
数据导入中的最小化日志记录
本文关注的是数据导入的最小化日志记录,指BULK INSERT导数操作。很多理论在其它类型的操作上是通用的。
1. 普通的INSERT
SQL Server中使用锁和日志记录来保证数据库事务的ACID属性。在插入一行数据的整个事务期间,为了避免并发事务访问,这一行会被锁定;
同样这一行还会被写入日志记录。插入一行数据的大概的步骤如下:
通过行锁锁定行。
写入日志记录。日志记录包含被插入行的完整数据。
数据行被写入数据页。
多行插入时,每一行都会重复以上步骤。这里指大概操作原型,实际处理复杂的多,如锁升级,约束检查等等
2. BULK导入
当BULK导入提交事务时,事务使用到的所有数据页会被写入磁盘,这样来保证事务原子性。相当于每次提交事务时都做一次CHECKPOINT。如果需要回滚BULK事务,SQL Server会检索日志获取事务涉及的页或者区信息,然后将之重新标记为未使用。备份事务日志时会将BULK涉及的数据页和索引页都备份到日志备份中。还原包含BULK事务的日志备份时,不支持还原到指定时间点。
每个数据文件第八个页是BCM页(BULK Chandged Map),之后每隔511230页会有一个BCM页。BCM上的每一位(Bit)代表着一个区,如果此位为1,则表示自上次BACKUP LOG后,这个区被BULK类型操作修改过。再下次日志备份时,会将这些被修改过的区复制到日志备份中。
3. 使用最小日志记录导入数据时需要满足的条件
并不是任何情况下都可以实现最小日志导数,判断逻辑如下(来自Itzik Ben-Gan)
a) SQL Server 2008之前的版本判断逻辑:
non-FULL recovery model
AND NOT replicated
AND TABLOCK
AND (
Heap
OR (B-tree AND empty)
)
b) SQL Server 2008及以后版本的判断逻辑:
Non-FULL recovery model
AND NOT replicated
AND (
(Heap AND TABLOCK)
OR (B-tree AND empty AND TABLOCK)
OR (B-tree AND empty AND TF-610)
OR (B-tree AND nonempty AND TF-610 AND key-range)
从SQL 2008开始可以使用跟踪标记610和排它键范围锁,实现空/非空聚集索引表的最小化日志操作。
排他键范围锁的作用例子:聚集索引表tb(id INT),目前有4行数据,分别为1,1000,2000,3000。现在需要向表中插入500行数据,这些数据的值区间为[1001,1500]。
当插入时,SQL Server不需要获取聚集索引整体的排它锁(像tablock这种),而只是获取原有键值区间的排它键范围锁。这里就是在(1000,2000)区间上获取X KEY-RANGE LOCK。而不在这个区间的数据,仍然可以被其它进程访问。如果要实现非空索引表的最小化日志记录导数,需要预先将导入数据按目标表的索引键值列进行排序,并启用跟踪标记610。
从上面的判断逻辑可以看出,实现最小日志记录的大前提是:数据库不是完整恢复模式且表没有标记为复制。对于堆表总是需要使用TABLOCK。对于索引表,则要分为空表和非空表两种情况来处理。这部分内容在后文的例子再展开来说明。
观察BULK导入的日志
使用未公开的系统函数sys.fn_dblog查找相关的日志内容。fn_dblog接受两个参数用以指定要查询的日志区间,分别表示开始和结束的LSN。输出字段中,此文需要关注的是Operation, Context, Log Record Length和AllocUnitName。因为是未公开的的函数,所以输出内容代表的意义,需要结合个人经验和大家的“共识”来解读。
Operation(LOP):表示执行何种日志操作, 例如修改行为LOP_MODIFY_ROW,设置位图页时为LOP_SET_BITS等等。
Context(LCX):日志操作的上下文,一般表示受影响的对象类型。例如LCX_GAM,LCX_HEAP,LCX_PFS等。
Log Record Length:以byte为单位的日志长度
AllocUnitName:表示受影响的具体对象
使用如下脚本进行分析,脚本来自Jakub K
-- 日志条目录数据和总大小 SELECT COUNT(*)AS numrecords, CAST((COALESCE(SUM([Log Record LENGTH]), 0)) / 1024. / 1024. AS NUMERIC(12, 2)) AS size_mb FROM sys.fn_dblog(NULL, NULL) AS D WHERE AllocUnitName = 'dbo.tableName' OR AllocUnitName LIKE 'dbo.tableName.%'; -- 各类型日志的平均长度和数量 SELECT Operation, Context, AVG([Log Record LENGTH]) AS AvgLen, COUNT(*) AS Cnt FROM sys.fn_dblog(NULL, NULL) AS D WHERE AllocUnitName = 'dbo.tableName' OR AllocUnitName LIKE 'dbo.tableName.%' GROUP BY Operation, Context, ROUND([Log Record LENGTH], -2) ORDER BY AvgLen, Operation, Context;

Onenote是Microsoft提供的最好的笔记工具之一。结合Outlook和MSTeams,Onenote可以成为提高工作和个人创意工作效率的强大组合。我们必须以不同的格式做笔记,这可能不仅仅是把事情写下来。有时我们需要从不同来源复制图像并在日常工作中进行一些编辑。如果知道如何应用更改,则粘贴在Onenote上的图像可以发挥很大作用。您在使用Onenote时是否遇到过粘贴在Onenote上的图像无法让您轻松工作的问题?本文将着眼于在Onenote上有效地使用图像。我们可

MakridakisM-Competitions系列(分别称为M4和M5)分别在2018年和2020年举办(M6也在今年举办了)。对于那些不了解的人来说,m系列得比赛可以被认为是时间序列生态系统的一种现有状态的总结,为当前得预测的理论和实践提供了经验和客观的证据。2018年M4的结果表明,纯粹的“ML”方法在很大程度上胜过传统的统计方法,这在当时是出乎意料的。在两年后的M5[1]中,最的高分是仅具有“ML”方法。并且所有前50名基本上都是基于ML的(大部分是树型模型)。这场比赛看到了LightG

win7系统登陆时的默认图片背景如何更改?win7系统登陆时的默认图片背景如何更改教程分享。我们电脑设置了登陆密码之后,开启电脑之后到登陆界面的时候,就会有一个图片背景。有的用户想要去修改这个背景,那么如何操作才能去修改这个背景呢?很多小伙伴不知道怎么详细操作,小编下面整理了win7系统登陆时的默认图片背景更改步骤,如果你感兴趣的话,跟着小编一起往下看看吧! win7系统登陆时的默认图片背景更改步骤 1、首先在图示路径C:WindowsSystem32oobeinfoackgrounds

微软邀请Canary和Dev频道的WindowsInsider项目成员,测试和体验新版画图(Paint)应用,最新版本号为11.2306.30.0。本次版本更新最值得关注的新功能是一键抠图功能,用户只需要点击一下,就能自动消除背景,凸显画面主体,便于用户后续操作。整个步骤非常简单,用户在新版画图应用中导入图片,然后点击工具栏上“移除背景”(removebackground)按钮,就可以删除图片中的背景,用户也可以使用矩形来选择要消除背景的区域。

PPT背景替换是一种重要的操作,可快速统一演示文稿的视觉风格。通过修改幻灯片母版或使用“格式背景”功能,可以快速替换整个演示文稿的背景。此外,某些PPT版本还提供批量替换功能,可以轻松替换所有幻灯片的背景。在替换背景时,应注意选择与演示文稿主题相符的背景,并确保背景清晰度和分辨率符合要求。

在iPhone和iPad上,Apple包含的多项辅助功能之一是背景声音。这些声音旨在帮助您保持专注、保持冷静,并帮助您在忙于某事时尽量减少分心。提供的背景声音包括平衡、明亮和黑暗的噪音,以及海洋、雨水和溪流等自然声音。所有声音都可以设置为在后台播放,以掩盖不需要的环境或外部噪音,并且声音混合到其他音频和系统声音中或隐藏在其他音频和系统声音下。在iPhone和iPad上启用背景声音以下步骤介绍如何在运行iOS15/iPadOS15及更高版本的iPhone和iPad上启用背景声音。在iPhone或i

Go语言诞生于Google,旨在解决C++的复杂性和并发支持不足的问题。它的初衷是创造一种简洁易学、高效并发、内存安全、跨平台的语言,以提高程序员的生产力,构建可靠可扩展的系统,并促进代码的移植和共享。

1、打开美图秀秀软件,选择【图片美化】,从相册中导入照片。2、点击底部工具栏的【抠图】,选择【背景替换】功能。3、在【背景】选项中,从纯色方框中挑选所需底色,或上传自定义图片。4、确认选择后,点击【保存】即可完成底色更换。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver CS6
视觉化网页开发工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

Atom编辑器mac版下载
最流行的的开源编辑器