为了账号安全,请及时绑定邮箱和手机立即绑定

SQL Server中In-Flight日志究竟有多少

标签:
SQL Server

    在SQL Server中,利用日志的WAL来保证关系数据库的持久性,但由于硬盘的特性,不可能使得每生成一条日志,就直接向磁盘写一次,因此日志会被缓存起来,到一定数据量才会写入磁盘。这部分已经生成的,却没有写入磁盘的日志,就是所谓的In-Flight日志。

    在SQL Server中,In-Flight的日志的大小取决于两个因素,根据Paul Randal的说法,In-Flight日志不能超过60K,因此In-Flight的日志最大是60K,此外,如果In-Flight日志没有到60K,如果发生了Commit或Rollback,那么直接会写入磁盘。因此日志最小为512字节,最大为60K,以512字节为单位进行增长。下面我们来看一个例子。

 

    我们首先建立一个简单的表,循环向其中插入10W的数据,该语句会生成大量的日志,如代码清单1所示:

BEGIN TRAN
 
DECLARE @i INTEGER
 
SET @i = 0
 
WHILE ( @i < 100000 ) 
    BEGIN
 
        INSERT  INTO Number
        VALUES  ( @i )
 
        SET @i = @i + 1
    END
 
CHECKPOINT
 
COMMIT


    数据库我以5M日志为起点,以5M递增,上面的语句导致日志自动增长,如图1所示。

  https://img1.sycdn.imooc.com//5acc6b10000151dd07950359.jpg 

    我们再来观察SQL Server进程对于日志文件的操作,如图2所示:

    https://img1.sycdn.imooc.com//5acc6b310001a72e08160637.jpg

   图2中的图片我只截取了一小部分,但是可以看到没有超过60K的log block,只有在日志文件填零增长时,才出现5M的块。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消