相信不少的朋友,無論是做開發、架構的,還是DBA等,都經常聽說“調優”這個詞。說起“調優”,可能會讓很多技術人員心頭激情澎湃,也可能會讓很多人感覺苦惱。當然,也有很多人對此不屑一顧,因為並不是每個人接觸到的項目都很大,也不是每個人做的項目都對效能要求很高。
在主流的企業級開發和互連網應用中,資料庫的重要性是不言而喻的,而資料庫的效能對於整個系統的效能而言也是至關重要的,這裡無庸贅述。
sqlserver的效能調優,其實是個很寬廣的話題。坦白講,想從概念到實踐的完全講清楚並掌握透徹,可能至少需要幾本書的內容。本文只是一個概念級的總結,希望讀者能對此有新的認識,在調優路上有所協助。如果感興趣的朋友很多,後續可能會分享一些實戰經驗。
首先搞清楚,效能調優的目標
從最直觀,最常見的角度來講,主要包含如下兩點:
最佳化回應時間
何為“最佳化回應時間” 呢?說的通俗點,就是經過調優後,執行查詢、更新等操作的時候,資料庫的反應速度更快,花費的時間更少。
比較常見的,以前執行某條sql查詢語句,可能需要3秒鐘,加了索引後,1秒鐘不到就搞定了。加索引,這也是最典型最"廉價"的最佳化手段。
在做“最佳化回應時間”時,需要瞭解:使用者環境,程式,環境,使用者和資料等方面的知識。
最佳化輸送量
說起“輸送量”,那就要想到“並發”了。其實就是“同時處理請求”的能力。如何提高資料庫"抗並發"的能力呢?首先要瞭解sqlserver是如何訪問資料的,如何控制並發訪問的(交易隔離等級,鎖等),如何與底層作業系統進行互動的,還要瞭解“多線程、進程”等方面的知識。
比較常見的手段,通過降低交易隔離等級(一定程度地犧牲資料一致性等),這種“軟手段”通常會起到很好的效果。其次,單台DB Server達到一定瓶頸後,可以通過“叢集”等方式,實現請求的“負載平衡”的,來達到“抗並發”的目的,效果也是立竿見影的。
效能調優的方法論--迭代
基準
通俗點講,就是用來計算或者比較的標準。通常以當前系統效能為基準,或者以匹配系統效能為基準。指各個組件發揮到最大。
成本
用來升級,更換等提升組件效能時的時間,金錢,勞力等等。
基準的定義,以使用者期望值為基礎,可能會涉及以下因素
以往的經驗,應用程式的基準,業界的標準,以前版本的情況
基準的表示方式,包括:每秒完成的批處理(作業),每秒傳輸量,每秒資料量,磁碟掃描時間等等
分析影響效能的因素:
資料庫設計(是否複合範式,是否合理歸檔、分區、分表等)
軟體系統 (作業系統最佳化,資料庫系統的配置,資源的規劃和監控等)
硬體基礎架構 (裝置規格,硬體效能,負載平衡,容災等)
Sql語句的寫法、索引和統計資訊,事務和鎖,應用程式存取碼(串連過多、頻繁開關等)
效能調優的順序:
從左往右,從技術難度、成本、實效去考慮
DETECT 方法
發現問題、探究原因、提供可能的解決方案、執行最有可能的解決方案、確認是否成功解決(如果沒有,重複前面的步驟)、完成其餘的工作
DETECT方法論 中的這些工作細分起來,會有很多,這裡暫時不做過多描述。具體調優的步驟、效能調優工具的使用,下篇文章繼續。