亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

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

   代码清单1.生成大量日志的语句

 

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

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

图1.对应的6次日志增长

 

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

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

图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应该是对于性能来说最优的。

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消