在SQL Server上测试事务日志的自动增长(三)

日期: 2009-06-30 作者:Michelle Gutzait翻译:孙瑞 来源:TechTarget中国 英文

DELETE命令和事务日志增长   这次的目标和前面一样。我向表中插入10,000行并运行以下代码来一次删除一行:   – Truncate the table   truncate table ExpandDB   go   – Truncate the T-Log   backup transaction ShrinkDB with truncate_only   go   – Shrink T-Log b……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

DELETE命令和事务日志增长

  这次的目标和前面一样。我向表中插入10,000行并运行以下代码来一次删除一行:

 

 -- Truncate the table
  truncate table ExpandDB
  go
  -- Truncate the T-Log
  backup transaction ShrinkDB with truncate_only
  go
  -- Shrink T-Log back to 2MB:
  DBCC SHRINKFILE (N'ShrinkDB_Log' , 0, TRUNCATEONLY)
  Go
  -- Insert 100000 rows
  declare @i int
  set @i = 1
  while @i <= 10000
  begin
  insert into ExpandDB select replicate ('a',1000)
  set @i = @i + 1
  end
  go
  -- Delete rows one by one:
  set rowcount 1
  while (select size from sysfiles where fileid = 2) delete from ExpandDB
  set rowcount 0
  go
  出现了同样的情况:事务日志并没增长,空间循环地填充和清空。

  然后我尝试了大量的删除:

  -- Truncate the table
  truncate table ExpandDB
  go
  -- Truncate the T-Log
  backup transaction ShrinkDB with truncate_only
  go
  -- Shrink T-Log back to 2MB:
  DBCC SHRINKFILE (N'ShrinkDB_Log' , 0, TRUNCATEONLY)
  Go
  -- Insert 100000 rows
  declare @i int
  set @i = 1
  while @i <= 10000
  begin
  insert into ExpandDB select replicate ('a',1000)
  set @i = @i + 1
  end
  go
  -- Delete 10,000 at a time and monitor the T-Log size and free space:
  begin tran
  set rowcount 10000
  while begin
  delete from ExpandDB
  dbcc sqlperf(logspace)
  end set rowcount 0 commit tran go
  结果表明事务日志增长:

  最后我运行了一个有少量操作的大量事务:

  -- Truncate the table
  truncate table ExpandDB
  go
  -- Truncate the T-Log
  backup transaction ShrinkDB with truncate_only
  go
  -- Shrink T-Log back to 2MB:
  DBCC SHRINKFILE (N'ShrinkDB_Log' , 0, TRUNCATEONLY)
  Go
  -- Insert 100000 rows
  declare @i int
  set @i = 1
  while @i <= 10000
  begin
  insert into ExpandDB select replicate ('a',1000)
  set @i = @i + 1
  end
  go
  -- Delete 10,000 at a time and monitor the T-Log size and free space:
  begin tran
  set rowcount 1
  while from ExpandDB) begin delete from ExpandDB end

  结果显示事务日志增长了,尽管很慢。

  这一切意味着什么

  当执行少量分散的INSERT, UPDATE和DELETE命令时,事务日志并不会增长太多。但当我浏览事务日志文件时,这一测试生成了奇怪的动作:当达到大约70%时,文件填充清空但不增长。

  当大量操作被执行时,包括事务中的大量数据和事务日志都增长,但并不是预期的线性增长。似乎有些数据在事务中被压缩了。

翻译

孙瑞
孙瑞

相关推荐