首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

利用虛擬硬碟 (RAM Disk) 加速 SQL Server 2000:tempdb 置記憶體實測續篇

     編輯:關於SqlServer

續篇:無索引排序 250 萬筆,虛擬硬碟 11 秒 vs 硬碟逾時

上篇驗證有索引查詢提升 8 倍,本篇測試 **無索引 `ORDER BY ProductName, ProductID` 分頁** 場景。

測試環境

  • 筆電:Core 2 7250 2.0GHz、4GB RAM (2GB 劃分 RamDisk,讀 5.5GB/s、寫 3.5GB/s)、160GB HDD (70MB/s)。
  • SQL Server 2000 + ASP.NET 2.0、Northwind `Products` 擴充至 252 萬筆 (每頁 15 筆,共 16.8 萬頁)。
  • 對比兩庫:`northwnd_Disk` (實體碟) vs `northwnd_Ram` (RamDisk)。

關鍵發現:tempdb 才是關鍵

  • 初測將整庫放 RamDisk,**無索引排序翻第 1000 頁直接逾時**,硬碟燈狂閃。
  • 發現 SQL Server 2000 大量排序會大量寫入 **tempdb** (寫入 100MB+),才是瓶頸。
  • 將 **tempdb 移至 RamDisk** (`ALTER DATABASE tempdb MODIFY FILE ...`),重測:
頁碼RamDisk (tempdb 在記憶體)實體碟
第 1,000 頁~11 秒逾時
第 5,000 頁~11 秒逾時
第 10,000 頁~12 秒逾時
第 100,000 頁~22 秒逾時

移動 tempdb 指令

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
-- 重啟 SQL Server 服務生效

結論與風險

  • **tempdb 置記憶體 = 釋放排序/雜湊/版本存放區 I/O 瓶頸**,對無索引大掃描排序效果驚人。
  • tempdb 內容無持久化需求,重啟自動重建,**風險極低、收益極高**。
  • RamDisk 軟體需支援開機自動掛載、掉電保護 (如有 UPS) 或接受重啟後資料遺失。
  • 現代 SQL Server (2012+) 已大幅優化 tempdb (多檔案、記憶體優化、延遲持久性),**物理記憶體足夠大時,直接加大實體記憶體並設定多 tempdb 檔案通常優於 RamDisk**。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved