对比SQL Server 2008 和SQL Server 2005的性能
2009-01-05 10:18:33 来源:WEB开发网系统配置:
Intel Core2 at 2.13 GHz
2 GB RAM
Windows XP Professional SP2
2 physical hard drives
1 disk controller
Disk 1: OS, SQL Server, Logs
Disk 2: Data
每次测试都要重新启动系统并所需要的软件,并只运行所需的数据库引擎
测试方案
Click for larger image
每一张表在ID栏里有一个聚簇主键。
非聚簇索引:
厂商:厂商名称的非唯一索引
卡:安全代码、卡编号的唯一索引
卡;安全代码、卡编号的非唯一索引
采购:卡ID的非唯一索引
采购;厂商ID的非唯一索引
测试细节:
测试脚本模拟OLTP工作任务,共有三张表,包括厂商、卡和采购。
测试概要
测试利用了SQL脚本的多个同时调用,调用循环中的存储过程来首先加载和查询数据。
Gory细节
本测试利用简单的框架I,称为Hummer。它利用a .bat文件运行一些初始安装脚本,然后启动n个同时过程,每个过程运行相同的脚本。这是模拟多个用户争用数据库资源。 每个脚本包括对DELAY的一个偶然调用。这允许多个过程共享数据库资源,也很好地模拟了实际的OLTP工作任务。
总共有5项具有不同参数的测试。下图显示了所有Test Run 2的细节,并以之作为示例。
.bat script执行以下步骤:
放弃并重新建立数据库
创建表和索引
创建存储过程
设置所有的控制参数
执行DBCC FREESYSTEMCACHE(’ALL’)
执行DBCC DROPC及LEANBUFFERS
启动16过程,每个过程运行主要的测试脚本
CREATE DATABASE脚本创建数据文件,该文件的初始大小是400MB,Log文件的初始大小是20MB,每个文件按规定增长10%。经过Test Run 1之后,Data文件并不增长,但是Log文件增长到48MB(2008)和53MB(2005)。
如系统细节中所示,OS、SQL Server和 Log都在盘C上,而Data文件在盘D上。
主要测试脚本完成以下步骤:
启动延迟1秒(以允许所有过程的启动)
循环200000次
读取控制参数(SP调用)。如果在测试中完成读取控制参数,就停止读取控制参数(这允许用户在测试运行中改变参数。)
每300次循环,延迟1秒
为初始20000循环创建一个厂商记录(SP调用)
为初始20000循环创建卡记录(SP调用)
为初始40000循环创建采购记录(SP调用)
每10 个循环
10次有1次:插入采购记录
10次有1次:更新厂商记录
10次有8次:读卡记录
循环结束
重要的是要理解每个过程都要插入20000个厂商记录、20000个记录。所以,插入记录的总数(初始设置)是320000、 320000和 640000。Test Run 2的循环完成以下工作:
初始20000循环:创建厂商记录、卡记录和采购记录,进行插入、更新或读取
下一个20000循环:创建采购记录,进行插入、更新或读取
最后160000循环:进行插入、更新或读取
经过初始40000循环后,所有的插入、更新或读取操作都进行了随机记录。
测试参数
Results
随附的结果文件包括每个过程的输出和每次运行的性能图,一张是在测试开始的时候,一张是在测试结束后。从性能图中可以看到,在相同的硬件上运行相同的工作任务时,SQL Server 2008在每次测试时都明显占用了更多的CPU。
结论
这些测试表明,如果所测试的工作任务并不利用任何特别的SQL Server 2008特性,SQL Server 2008并不比SQL Server 2005更快或更慢。而SQL Server 2005比SQL Server 2000的性能改进更多。尽管如此,这并不意味着用户不应该迁移到SQL Server 2008,数据库管理员需要在进行系统升级前要做些改变,以避免不必要的成本。
更多精彩
赞助商链接