[SQL][效能調校] 使用 Buffer Pool Extension 和 OCZ ZD-XL SQL Accelerator 效能比較
這幾天在測試完 OCZ ZD-XL SQL Accelerator ( 網址 ) 之後,就有朋友在詢問說,那如果在同樣的狀況下,將同樣的空間配置給使用 SQL Server 2014 的 BPE ( 可參考網址 ) ,和 OCZ ZD-XL SQL Accelerator 兩者來做比較,到底哪樣的效能會比較好呢 ?
基本上 BPE 在 MSDN 的文件中有說明,建議最大的比例是 32 倍,一般建議配置 1:4 到 1:8 的範圍較為合適( 可參考網址 : 緩衝集區擴充 ),在使用上是 By Instance 來配置的,因此 SQL Server 會自己調配合適的資料放到 BPE 的 Cache 檔案內;而對於 OCZ ZD-XL SQL Accelerator 來說,Cache 的檔案是越大越好,並且是 By Database 來配置的,因此可以限制只有特定的資料庫才使用該 Cache,另外最大的差異是只要 SQL Server 2008 以上的資料庫都可以搭配使用。
為了做測試,因此使用跟之前測試 OCZ ZD-XL SQL Accelerator 相同的主機 ( E5-1650 , 32GB RAM ),測試資料庫內有 2 千萬筆紀錄 14GB,設置三種配置狀況
1. SQL Server 最小記憶體 : 128MB ; 最大記憶體 2048MB
2. SQL Server 最小記憶體 : 128MB ; 最大記憶體 2048MB , 配置 64GB Cache 給 OCZ ZD-XL SQL Accelerator
3. SQL Server 最小記憶體 : 128MB ; 最大記憶體 2048MB , 配置 64GB Cache 給 BPE 來使用
測試語法如下
DECLARE @I INT;
DECLARE @J INT;
DECLARE @K INT;
SET @I = 0 ;
SET @J = 0 ;
WHILE @I < 10
BEGIN
SET @K = ROUND( DATEPART( ms, GETDATE())*37/97.0*10000 , 0 ) ;
SELECT * FROM BigTable where A5 = @K;
SET @J = @J + @@ROWCOUNT ;
SET @I+=1 ;
END
PRINT @J
測試三次的時間如下
第一次 |
第二次 |
第三次 |
|
第 1 項 |
12分44秒 |
12分48秒 |
12分45秒 |
第 2 項 (OCZ) |
2分21秒 |
0分45秒 |
0分43秒 |
第 3 項 (BPE) |
5分59秒 |
5分09秒 |
5分10秒 |
而此時如果使用以下的指令來查看 Cache 的狀況
SELECT COUNT(*) AS cached_pages_count
FROM sys.dm_os_buffer_descriptors
WHERE is_in_bpool_extension = 1
會發現 SQL Server 在使用 BPE 的時候,並不會就把所有的 Table 資料都放到 BPE 的 Cache 資料內,因此在效能測試上看起來並沒有比使用 OCZ ZD-XL SQL Accelerator 來的快,但相對來說比起都沒有的狀況,在效能上也有不錯的改善。因此看起來如果在使用 SQL Server 2014 的狀況下,使用 BPE 應該也是一種不錯的效能改善方向,如果還能配合將 tempdb 也移到 SSD 上,應該算是比較沒有風險的改善。但如果費用允許的話,看來搭配 OCZ ZD-XL SQL Accelerator ,也都不失為一種改善方式。
在測試這個案例的同時,有朋友也有問到說,那如果建立合適的 INDEX 來做比較的話呢 ? 那麼同樣的測試語法,如果有正確的使用到 Index,那麼就算沒有 OCZ & BPE 的狀況下,只需要不到 1 秒鐘的時間。所以囉,如果能妥善的規劃資料表,搭配合適的索引,那遠比你花上大錢來的有效率,但如果系統已經沒有辦法來調整,那麼從硬體來調整,也不失為一種可行的方案囉。