数据库实例,单数据库,多数据库,单实例,多实例不同情况下的数据访问效率测试

最近公司的项目准备优化一下系统的性能,希望在数据库方面看有没有提升的空间,目前压力测试发现数据库服务器压力还不够大,Web服务器压力也不是很大的情况下,前台页面访问却很慢,看有没有办法充分利用数据库服务器的性能,于是做了一个单数据库,多数据库,单实例,多实例不同情况下的数据访问效率测试。
测试环境:
CPU:Inter Core2 Quad,Q8300,2.50GHz; 内存:4.00GB 系统:Windows 7 32位系统 数据库系统:SqlServer 2008,有两个实例,一个是默认实例,一个是命名实例QE2


测试数据:
67万真实的基金收益数据,将这个表的数据放到了3个数据库中,详细内容见下面的连接字符串配置:

测试内容:
首先筛选出表中所有的基金代码,然后统计每只基金的最新收益率日期,对应的T-SQL代码如下:
declare @max_fsrq datetime declare @currJJDM varchar(10) declare @temp table (jjdm2 varchar(10)) declare @useTime datetime set @useTime =GETDATE (); insert into @temp(jjdm2) select jjdm from [FundYield] group by jjdm order by jjdm asc while EXISTS (select jjdm2 from @temp) begin set @currJJDM=(select top 1 jjdm2 from @temp) select @max_fsrq = MAX(fsrq) from [FundYield] where jjdm=@currJJDM delete from @temp where jjdm2 =@currJJDM print @max_fsrq end print 'T-SQL Execute Times(ms):' print datediff(ms,@useTime,getdate())
根据这个功能,写了一个.net控制台程序来测试,测试程序没有使用任何数据访问框架,直接使用ADO.NET,下面是测试结果:
第一次,数据库没有创建索引,进行全表扫描:
------单数据库,单线程测试--------- used all time is(ms):59916 ------同一实例,双数据库,单线程测试--------- used all time is(ms):59150 ------同一实例,双数据库,多线程测试--------- Tread 2 used all time is(ms):51223 Tread 1 used all time is(ms):58175 ====All thread completed!======== ------双实例,双数据库,单线程测试--------- used all time is(ms):58230 ------双实例,双数据库,多线程测试--------- Tread 2 used all time is(ms):52705 Tread 1 used all time is(ms):58293 ====All thread completed!========






第二次,数据库响应的字段创建索引,下面是测试结果:
------单数据库,单线程测试--------- used all time is(ms):1721 ------同一实例,双数据库,单线程测试--------- used all time is(ms):1737 ------同一实例,双数据库,多线程测试--------- Tread 2 used all time is(ms):1684 Tread 1 used all time is(ms):1714 ====All thread completed!======== ------双实例,双数据库,单线程测试--------- used all time is(ms):1874
------单数据库,单线程测试--------- used all time is(ms):1699 ------同一实例,双数据库,单线程测试--------- used all time is(ms):1754 ------同一实例,双数据库,多线程测试--------- Tread 1 used all time is(ms):1043 Tread 2 used all time is(ms):1103 ====All thread completed!======== ------双实例,双数据库,单线程测试--------- used all time is(ms):1838 ------双实例,双数据库,多线程测试--------- Tread 1 used all time is(ms):1072 Tread 2 used all time is(ms):1139 ====All thread completed!========












测试结论:
综合全表扫描访问和有索引方式的访问,
单线程访问:
  • 在同一个数据库实例上,双数据库没有体现出优势,甚至单数据库稍微优胜于多数据库;
  • 在两个数据库实例上,双实例双实例要落后于单实例单数据库;
多线程访问:
  • 双数据库实例稍微落后于单数据库实例;

综合结论,看来不论是双数据库还是双实例,对比与单实例或者单数据库,都没有体现出优势,看来前者的优势不在于访问效率,一位朋友说,数据库实例是不同的服务,控制粒度更小,维护影响比较低。但我想,双数据库实例,双数据库,多核CPU,应该跟两台数据库服务器差不多的性能吧,怎么没有体现优势呢?也许是我的测试机器仅仅有一个磁盘,这里磁盘IO成了瓶颈。
这个测试有没有意义,或者这个结果的原因,还请大牛们多多指教!
Tags:  删除数据库实例 数据库实例是什么 数据库测试 数据库设计实例 数据库实例

延伸阅读

最新评论

发表评论