sqlserver性能調優第一步

jopen 9年前發布 | 13K 次閱讀 SQL Server 數據庫服務器 SQLServer


相信不少的朋友,無論是做開發、架構的,還是DBA等,都經常聽說“調優”這個詞。說起“調優”,可能會讓很多技術人員心頭激情澎湃,也可能會讓很多人感覺苦惱,不知道如何入手。當然,也有很多人對此不屑一顧,因為并不是每個人做的項目都對性能要求很高。

在主流的企業級開發和互聯網應用中,數據庫的重要性是不言而喻的,而數據庫的性能對于整個系統的性能而言也是至關重要的,這里無庸贅述。

sqlserver的性能調優,其實是個很寬廣的話題。坦白講,想從概念到實踐的完全講清楚并掌握透徹,可能至少需要幾本書的內容。本文只是一個最基本的概念總結,希望讀者能對此有新的認識,在調優路上有所幫助。如果感興趣的朋友很多,后續可能會分享一些實戰經驗和技巧。

這里提醒大家一句:不要輕易相信網上流傳的那些“sql優化金句”、"sql優化偏方",自己多實踐幾遍,才是硬道理。

首先搞清楚,性能調優的目標

從最直觀,最常見的角度來講,主要包含如下兩點:

優化響應時間

何為“優化響應時間” 呢?說的通俗點,就是經過調優后,執行查詢、更新等操作的時候,數據庫的反應速度更快,花費的時間更少。

比較常見的,以前執行某條sql查詢語句,可能需要3秒鐘,加了索引后,1秒鐘不到就搞定了。加索引,這也是最典型最"廉價"的優化手段。

在做“優化響應時間”時,需要了解:用戶環境,程序,環境,用戶和數據等方面的知識。

優化吞吐量

說起“吞吐量”,那就要想到“并發”了。其實就是“同時處理請求”的能力。如何提高數據庫"抗并發"的能力呢?首先要了解sqlserver是如 何訪問數據的,如何控制并發訪問的(事務隔離級別,鎖等),如何與底層操作系統進行交互的,還要了解“多線程、進程”等方面的知識。

比較常見的手段,通過降低事務隔離級別(一定程度地犧牲數據一致性等),這種“軟手段”通常會起到很好的效果。其次,單臺DB Server達到一定瓶頸后,可以通過“集群”等手段,實現讀寫請求的“負載均衡”,來達到“抗并發”的目的(降低單機的QPS和TPS),效果也是立竿 見影的。

性能調優的方法論--迭代

sqlserver性能調優第一步

基線

通俗點講,就是用來計算或者比較的標準。通常以當前系統性能為基準,或者以匹配系統性能為基準。指各個組件發揮到最大。

成本

用來升級,更換等提升組件性能時的時間,金錢,勞力等等。

基線的定義,以用戶期望值為基礎,可能會涉及以下因素

以往的經驗,應用程序的基準,業界的標準,以前版本的情況

基線的表示方式,包括:每秒完成的批處理(作業),每秒傳輸量,每秒數據量,磁盤掃描時間等等

分析影響性能的因素:

數據庫設計(是否復合范式,是否合理歸檔、分區、分表等)

軟件系統 (操作系統優化,數據庫系統的配置,資源的規劃和監控等)

硬件基礎架構 (設備規格,硬件性能,負載均衡,容災等)

Sql語句的寫法、索引和統計信息,事務和鎖,應用程序訪問代碼(連接過多、頻繁開關等)

性能調優的順序:

sqlserver性能調優第一步

DETECT 方法

發現問題、探究原因、提供可能的解決方法、執行最有可能的解決方案、確認是否成功解決(如果沒有,重復前面的步驟)、完成其余的工作

DETECT方法論 中的這些工作細分起來,會有很多,這里暫時不做過多描述。具體調優的步驟、性能調優工具的使用,有機會再分享。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!