Sql-Server

新伺服器中的游標性能

  • April 18, 2016

我買了一台新伺服器,規格:HP ProLiant ML310e Gen8 v2 8 GB Single Memory,Intel Xeon E3-1220v3 3,1 GHz,500 GB SATA 7.5K RPM,Windows Server 2012 R2 x64,SQL Server Standard 2014 x64,RAID 0

與我的筆記本相比:ASUS X200CA 2 GB 單記憶體、Intel Celeron 雙核 1.5 GHz、500 GB SATA 7.5K RPM、Windows 7 Ultimate x64、SQL Server Express 2014 x64、AHCI

我只是比較了這個筆記本,因為與我的舊伺服器相比差異太大(舊伺服器更快)。我用我的新伺服器設置了一些配置,並且從這篇文章SQL Server 2012 比 2008 慢一點

測試:(5 次嘗試)

select top 9000 * from faktur_detail

新伺服器:

CPU time = 20 ms,  elapsed time = 756 ms.
CPU time = 12 ms,  elapsed time = 720 ms.
CPU time = 8 ms,  elapsed time = 840 ms.
CPU time = 14 ms,  elapsed time = 689 ms.
CPU time = 17 ms,  elapsed time = 740 ms.

我的筆記本 :

CPU time = 250 ms,  elapsed time = 2403 ms.
CPU time = 172 ms,  elapsed time = 2541 ms.
CPU time = 219 ms,  elapsed time = 2848 ms.
CPU time = 140 ms,  elapsed time = 2426 ms.
CPU time = 172 ms,  elapsed time = 2410 ms.

我嘗試了更新、插入和其他正常命令,並顯示新伺服器比我的筆記本更快。問題在於游標:

測試:(5 次嘗試)

declare @ketqty varchar (50),
       @ketqtyjual varchar (50),
       @ketqtybonus varchar (50),
       @kd_barang varchar (10),
       @kd_rec int,
       @qty numeric,
       @qtyjual numeric,
       @qtybonus numeric

 DECLARE @RPREKAPJUALALL_Cursor CURSOR
 SET @RPREKAPJUALALL_Cursor = CURSOR SCROLL DYNAMIC FOR 

 select kd_rec, qtyjual , qtyBonus , Qty, kd_barang  from RPREKAPJUALALL where NamaKomputer  ='serverhp' 

 OPEN @RPREKAPJUALALL_Cursor
 FETCH NEXT FROM @RPREKAPJUALALL_Cursor INTO @kd_rec, @qtyjual,@qtybonus, @qty, @kd_barang
 WHILE @@FETCH_STATUS = 0
 BEGIN
     EXEC sp_countsatuandetail  @KD_BARANG, @qty , @RESULT = @ketqty   OUTPUT 
     EXEC sp_countsatuandetail  @KD_BARANG, @qtyjual  , @RESULT = @ketqtyjual    OUTPUT 
     EXEC sp_countsatuandetail  @KD_BARANG, @qtybonus , @RESULT = @ketqtybonus   OUTPUT 

     update RPREKAPJUALALL set ketqty =@ketqty , ketqtyjual  =@ketqtyjual ,ketqtybonus =@ketqtybonus where NamaKomputer ='serverhp' and kd_rec =@kd_rec 

    FETCH NEXT FROM @RPREKAPJUALALL_Cursor INTO @kd_rec, @qtyjual,@qtybonus, @qty, @kd_barang
  END

 CLOSE @RPREKAPJUALALL_Cursor
 DEALLOCATE @RPREKAPJUALALL_Cursor

新伺服器:

86 seconds.
93 seconds.
85 seconds.
83 seconds.
81 seconds.

我的筆記本 :

16 seconds.
12 seconds.
14 seconds.
18 seconds.
16 seconds.

我知道游標對 SQL Server 來說真的很糟糕,但我不能很快將所有游標切換到正常更新,因為以前的程序員在儲存過程中留下了很多游標。

什麼可能導致了這個問題?我現在已經為此苦苦掙扎了 2 週。我已經閱讀了很多文章。我得出的結論是這種類型的伺服器不適合成為數據庫伺服器,因為與舊伺服器相比,即使使用 SELECT 命令,該伺服器也慢了大約 2.8 倍。

舊伺服器:Intel Core i3、1TB SATA HDD 7.5K RPM、16GB 雙記憶體、Windows 7 Ultimate x64、SQL Server 2008 Express x86。

出於某種原因,我現在必須使用這個新伺服器。請幫我解決這個游標問題一段時間。這個新伺服器現在速度太慢了,甚至顯示一周的數據。我無法想像這在 1 個月、幾年後是如何結束的。

任何幫助將不勝感激。非常感謝。

我很抱歉這麼久沒有更新這個問題。我在這個問題後 2 個月解決了這個案例。

經過幾次試驗和錯誤,我對性能的最大影響是在作業系統和數據之間使用分離的硬碟。

我嘗試購買新硬碟,看起來將儲存系統從 RAID 更改為 AHCI 會在數據處理性能上產生很大差異。好吧,我們在維護作業中進行 1 小時備份,以確保線上雲服務的安全。

我對 BIOS 設置進行了一些更改,這也對該 pdf http://h20195.www2.hp.com/v2/GetPDF.aspx%2F4AA3-6555ENW.pdf中描述的性能產生了許多影響

我還將記憶體升級到 4x8GB

與我的舊伺服器相比,它現在快了 8 倍。

謝謝你的幫助。

引用自:https://dba.stackexchange.com/questions/97625