程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 利用虛擬硬盤(把內存當作硬盤)來提高數據庫的效率

利用虛擬硬盤(把內存當作硬盤)來提高數據庫的效率

編輯:關於SqlServer

(目前只針對SQL Server 2000)可以提高很多

虛擬硬盤:就是把內存當作硬盤來用,比如有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:\data\tempdb.mdf')
Go
ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME =  't:\data\templog.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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved