[SQL][效能調校] 使用 Buffer Pool Extension 和 OCZ ZD-XL SQL Accelerator 效能比較

[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 秒鐘的時間。所以囉,如果能妥善的規劃資料表,搭配合適的索引,那遠比你花上大錢來的有效率,但如果系統已經沒有辦法來調整,那麼從硬體來調整,也不失為一種可行的方案囉。