快捷搜索:

利用虚拟硬盘(把内存当作硬盘)来提高数据库

虚拟硬盘:便是把内存算作硬盘来用,比如有2G的内存,那么可以拿出来1G的内存算作硬盘来用。

自从知道了“虚拟硬盘”这个东东,我就不停在想若何才能把这个虚拟硬盘发挥到极致,上一篇也写了一些简单的利用,当然前进的效率并不多,并不是很抱负。我最想前进的是前进数据库的读取速率,也便是前进分页效率。一开始是想把数据库文件放到虚拟硬盘里面,这样读取速率不就快乐吗?然则当我把一个250万笔记录的数据库放在了虚拟硬盘上做测试后,发明效果并不抱负。

250万笔记录,使用主键排序(凑集索引),可以前进几倍的效率,然则假如换成一样平常的字段(nvarchar类型的,没有设置索引),查看第1000页的数据的时刻居然超时了?!这个也太。。。照样“内存”了吗?无意间看了一眼硬盘唆使灯,这个灯在显示数据的时刻居然不停在亮!不会把,从虚拟硬盘里面读数据,硬盘灯为什么会亮呀?看来SQL Server2000在大年夜量数据排序的时刻会往硬盘里面写数据。查看了一下发明SQL Server2000会往Tempdb数据库里面写数据,居然写了100多M的数据,看来这是照成超时的缘故原由了。

那么能不能把Tempdb换到虚拟硬盘里面呢?一开始用了一个笨着,竟然把SQL Server2000给弄逝世了,害得我重装了一遍。后来才发明,有现成的SQL语句可以应用。好了现在可以改Tempdb的位置了,再来测试一遍。这回效果对照抱负,翻到第5000页,花费了11秒多,没有超时。

USE master

Go

ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 't:datatempdb.mdf')

Go

ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 't:datatemplog.ldf')

Go

Tempdb数据库里并不会寄放紧张数据,损掉落了也不会有什么大年夜问题,只必要在重启谋略机后把文件拷贝以前就可以了,价值不大年夜,效率却可以前进很多,有削减了硬盘的读写次数,保护了硬盘嘛,应该是一个很好的措施。

测试的详细环境:

SQL Server 2000 ,Northwind数据库里的Products表,内外貌有2523136笔记录数,  每页15笔记录,共168210页。

ProductID 字段是主键,凑集索引,其他字段都没有索引。

1、应用倒置Top的分页算法,按照ProductName,ProductID来排序。一开始对照慢,必要20多秒(必要把数据读取到Tempdb),后来就快了一些,11秒阁下。便是说翻到了第1000页、第 5000页只必要11秒阁下,硬盘灯也没怎么亮。第10000页,12秒。第十万页,22秒。(留意:这是250万笔记录,按照nvarchar字段排序的结果)

第99999页应用的SQL语句:

select * from Products where productid in

( select top 15 productid from

( select top 1499985 productname,productid from Products

order by productname,productid ) as t

order by t.productname desc,t.productid desc )

order by productname,productid

2、应用Max分页算法,按照主键(ProductID)字段排序。这个就异常快了,10000页以内都是0毫秒到32毫秒,第五万页是200毫秒阁下,第十万页是300多毫秒,第十六万页(快到着末了)是600毫秒阁下。可以用秒杀来形容了。

第1600000页应用的SQL语句:

select top 15 * from Products

where productid>=

(SELECT max(productid ) from

(select top 2399986 productid from Products order by productid ) as t )

order by productid

2.1、同样的前提下,假如Tempdb放在物理硬盘里面的话,速率慢很多。下面是测试数据。(应用Max分页算法,按照主键(ProductID)字段排序)

页号

光阴:毫秒

第1页

156

第2页

15

第10000页

1390

第10001页

47

第140000页

8391

第140001页

546

第160000页

1766

第160001页

600

留意:这里并不是想说分页算法若何若何的快,而是想说,对付SQL Server2000来说,假如把Tempdb数据库的文件(tempdb.mdf)放在虚拟硬盘里面,可以前进很大年夜的效率!至于SQL Server 2005还没有测试。

您可能还会对下面的文章感兴趣: