你能够最大限度地缩小数据库吗?(二)

日期: 2009-02-26 作者:Michelle Gutzait翻译:April 来源:TechTarget中国 英文

目标 我的目标就是在事物大小和数据文件自动增长比率的基础上测试性能: 1、 测试1-增长率小,事务短,插入行数为X   2、 测试2-增长率小,事务短,插入行数为X*Y (比测试1中插入的行数要多)  3、 测试3-增长率大,事务短,插入行数为X*Y(和测试2中插入的行数相等)  4、 测试4-增长率小,一个事务中插入X*Y行  5、 测试5-增长率大(如测试3一样),一个事务中插入的行数为X*Y。  6、 测试6-自动增长率很大,事务很短  7、 测试7-自动增长率很大,事务很长 我将在结果中分析不同之处并且尝试……

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

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

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

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

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

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

目标

我的目标就是在事物大小和数据文件自动增长比率的基础上测试性能:

1、 测试1-增长率小,事务短,插入行数为X 
  2、 测试2-增长率小,事务短,插入行数为X*Y (比测试1中插入的行数要多)
  3、 测试3-增长率大,事务短,插入行数为X*Y(和测试2中插入的行数相等)
  4、 测试4-增长率小,一个事务中插入X*Y行
  5、 测试5-增长率大(如测试3一样),一个事务中插入的行数为X*Y。
  6、 测试6-自动增长率很大,事务很短
  7、 测试7-自动增长率很大,事务很长

我将在结果中分析不同之处并且尝试得出最后的结论。

注:该测试中不包括并发情况。

方法和代码描述

对于每个测试来说,我先测试数据库文件的原始文件大小和自动增长率。例如,原始大小=2 MB,自动增长率= 1 MB。

我还要测定该数据库文件的目标文件大小,所以要执行的第一个循环就应该是插入行,至少直到达到数据文件的目标大小为止。


while (select size from sysfiles where fileid = 1) <= <X>
insert into ExpandDB select replicate ('a',8000)) 

这个环节中我们在ExpandDB表中一行一行地插入了8000个字节,直到数据文件大小超过X。ExpandDB表为heap表,没有索引或约束避免其他特殊优化或索引。

在执行第一个循环达到目标文件大小之后,为了比较我需要执行相同量的插入,但是这些插入行不能是增长中的文件。所以我就要截去一部分表并清除transaction log保证T-Log不会过早增长。
以下查询:

select count(*) from ExpandDB

返回在第一个环节中插入行的数量,


select size from sysfiles where fileid = 1

返回新数据库数据文件的大小。

以下语句将截断表和 T-Log:


truncate table ExpandDB
go
backup transaction ShrinkDB with truncate_only
go

下一步就是执行相同的插入命令:


declare @i int
set @i = 1
while @i <= <Z>
begin
insert into ExpandDB select replicate ('a',8000) 
set @i = @i + 1
end

 <Z>就是在第一个环节中插入行后我们得到的表中的行数。另外一件很重要的事情就是在执行第一个环节和第二个环节中清除缓冲,消除缓冲所带来的不平等性,以便于进行性能比较:


DBCC DROPCLEANBUFFERS

最后,每个行中将每次测试将进行三次(反复三次),务必保证结果的一致性。

因此,在每次反复中的第一步就是保证能够达到你想达到的数据文件原始大小。例如,缩小数据库文件:


DBCC SHRINKFILE (N'ShrinkDB' , 0, TRUNCATEONLY)

性能监控工具

用SQL Profiler来检测性能。

翻译

April
April

相关推荐