博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Server中In-Flight日志究竟是多少
阅读量:6962 次
发布时间:2019-06-27

本文共 975 字,大约阅读时间需要 3 分钟。

在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
 
   代码清单1.生成大量日志的语句
 
    数据库我以5M日志为起点,以5M递增,上面的语句导致日志自动增长,如图1所示。
    1
图1.对应的6次日志增长
 
    我们再来观察SQL Server进程对于日志文件的操作,如图2所示:
    2
图2.SQL Server进程对于日志文件的写
 
   图2中的图片我只截取了一小部分,但是可以看到没有超过60K的log block,只有在日志文件填零增长时,才出现5M的块。因此我对于微软亚太数据库支持组的博文:http://blogs.msdn.com/b/apgcdsd/archive/2013/06/17/sql-server-log-write.aspx中说到会出现超过60K的log write产生一些疑问,毕竟日志填零增长和logWrite不是一回事。
    因此,得知这一点之后,对于日志所在的LUN,分配单元64K应该是对于性能来说最优的。
本文转自CareySon博客园博客,原文链接:http://www.cnblogs.com/CareySon/p/3195276.html,如需转载请自行联系原作者
你可能感兴趣的文章
正则表达式总结
查看>>
mysql-mm(双主)
查看>>
Ubuntu安装Trac+svn+apache+ldap+[mysql]认证
查看>>
Java生产者消费者模式
查看>>
十六进制转二进制
查看>>
设计模式之模板模式
查看>>
直接插入排序
查看>>
springmvc4.x返回json数据
查看>>
iOS逆向之三-authorized_keys ssh登录越狱手机免验证设置
查看>>
解决linux的-bash: ./xx: Permission denied
查看>>
Laravel 第三方登陆之 Socialite Providers
查看>>
Ubuntu14.10 remove ibus 之后
查看>>
Spring第一天
查看>>
springMVC笔记系列(20)——控制器实现详解(下)
查看>>
Linux文件上传下载,rz和sz
查看>>
在as3中使用嵌入字体
查看>>
How processor, assembler, and programming langu...
查看>>
五种方法解决Magento中jQuery和Prototype兼容性
查看>>
PPT模板网站
查看>>
InSave 隐私政策
查看>>