前一陣子在FB看到James Fu線上直播,主題:如何在開發者角度,讓SQL的執行速度變快 ,雖然只有一個小時,但蠻多乾貨可以筆記下來。
SQL效能有關的硬體方面有以下三點
- CPU
- Hard Disk I/O
- RAM
- How to check Hard Disk I/O performance
首先登入SSMS的帳號,需要有備份的權限
BACKUP DATABASE [資料庫名稱] TO DISK='NUL' WITH COPY_ONLYBACKUP DATABASE TO DISK = 'NUL' 對資料庫有執行備份作業,且不產生實體備份檔案若因故寫成 TO DISK = 'NUL' ,這是會產生實體的備份檔案TO DISK='NUL' (讀資料的時間)TO DISK="C:\Temp\TEST.BAK" (讀加寫的時間)(讀加寫的時間)-(讀資料)=(寫資料時間)
經過上面驗證後,如果Hard Disk I/O有發生異常時,有可能是Hard Disk raid 電池(舉例),
但至少有一個方向可以釐清跟SQL語法無關
- 善用SQL的執際執行計畫
例如,選擇兩個查詢結果一樣的SQL,選擇一個原本的查詢方式,另一個選擇要不同查詢SQL,
實行計畫會顯示哪個一個時間用比較多,哪一個SQL用比較少?
Example - 找商品哪個沒使用過,應該使用Except或NOT IN,
(實驗檢驗真理,也許以後有更有效率的寫法)
- 檢查DataBase相容性層級是否為新版本,讓SQL Server 使用最佳化的搜尋
DataBase滑鼠點屬性,選擇"選項",再點選相容性層級,
因為相容性計畫是跟資料庫,不是跟這SQL Sverver最新版本,需手動選擇,不會自動選擇。
- DataBase File要跟CPU核心數匹配
如果只有一個DataBase File,就無法達到平行處理,會導致一直切換執行緒,導致變慢。
舉例:常發生於外包專案上,Server CPU升級了,但速度可能反而變慢,這時候就需要檢查DataBase File。
沒有留言:
張貼留言