SQL Server調優的五個步驟

2021-04-19 22:11:04 字數 3478 閱讀 3851

步驟1 優化應用工作量

優化應用效能的第一步是優化工作量。在該部分調優方**中列出的優化步驟能夠解決很多常見的效能和可延展性問題。這些優化可以幫助降低由於特殊的設計或低效的實施導致的效能瓶頸影響,並且可以保證系統資源能夠充分和有效利用。例如,解決低效率的查詢計畫或低效率的快取等問題將會更加有效率地發揮sql伺服器快取機制,從而整體上降低i/o操作。

■ 編譯/重新編譯- 資料庫,cpu

●評估有關的語句的作用,將資料修改**和資料定義命令相分離。

●解決過時的索引統計。

●使用變數或其他邏輯替代臨時表。微軟忠告:頻繁地編譯/重新編譯會消耗很高的cpu和磁碟i/o資源,會增加整體的工作量競爭。

■ 低效率的查詢計畫-資料庫,cpu

確定是否存在明顯的cpu競爭,如果有,請確定無效率查詢計畫是如何占用過多的cpu資源。是否存在資料庫模式,應用需求,使用者使用的報表工具,或其它條件促使在生產環境下執行無效率的查詢,使用hash連線和排序操作的查詢,結果會消耗很高的cpu和i/o。

步驟2 減少讀/寫活動

一旦你的應用**被調優,接下來達到最佳效能就是減少應用執行時讀寫活動量或i/o,乙個最常見的應用**錯誤是編寫低效率的資料查詢操作;查詢返回很多的資料-太多的列或行-sqlserver會負載很大。無論是應用設計允許使用者建立自己的(通常無效率的),不限定每頁結果的查詢,還是後端**使用巢狀查詢,這些查詢會返回很多的資料(包括用檢視或表值函式寫的查詢),你的應用做為乙個整體可能會訪問更多的遠超過需要的資料。在一些情況下,檢查完你的應用**後,你可能會認識到你的**將會返回底層表中的所有資料,來滿足查詢需要!分析存在的索引和它們維護模式,確定新增索引是否合適,分析資料庫檔案的增長情況會幫你極大減少應用的讀寫活動量,可以釋放寶貴的磁碟資源。

■ 無效率的或缺失的索引-db i/o

確定是否存在明顯的磁碟i/o競爭,如果存在,需要分析缺失或或無效率的索引是如何導致磁碟i/o瓶頸的。dba們必須評估應用的 sql**保證語句盡可能有效率地執行;這項任務通常必需建立索引來最有效地提取資料。如果應用的sql**發生變化,訪問不同的表或從目的表選擇更多的/不同的列,當前的索引可能會不起作用。需要分析說明sql **無效率使用存在的索引或語句正在用表掃瞄蒐集資料的地方。

■ 磁碟i/o-資料庫檔案的增長-db i/o

確定是否存在明顯的磁碟i/o競爭,如果存在,需要關注頻繁使用擴充套件段的資料庫。dba們應關注在一定的時間視窗內頻繁使用擴充套件段的資料庫。當sql server增大資料庫檔案時,檔案傾向於破碎,操作將非常消耗cpu和i/o。

■ 磁碟i/o-資料庫檔案配置-db i/o

●資料檔案和日誌檔案配置在同一磁碟裝置上。

●資料庫檔案數量少於可用的cpu數量,特別是tempdb資料庫。

●資料庫檔案數量少於可用的磁碟i/o裝置數量。

步驟3 減少競爭

現在,已經優化應用的i/o訪問,下一步要完成的效能優化就是確保高度的併發不會導致物件競爭情況的增加。即使資料訪問被優化了,使用鎖和閂鎖的sql server引擎,會同步和保護資料訪問,在高負載下也會出現阻塞問題。智慧型的事務控制邏輯,可保證事務不會執行過長時間,或者只在適當得資料上加鎖,因而其是達到高併發的關鍵。使用適當的事務隔離層可保證減少不必要的讀操作阻塞,評估鎖提示的需要可保證鎖的不必要的保持,這些都可以極大提高應用的效能。為了減少或消除閂鎖問題,保證應用不要將ddl和dml的操作混在一起。一旦解決這些問題,你就應該分析你的應用時如何訪問資料的,以便確定是否可以通過資料分割槽的方式提高應用效能。

■ 阻塞鎖-物件競爭-資料庫鎖

確定是否存在明顯的鎖競爭,如果存在,看看經常出現鎖競爭的資料庫表,幫助識別故障點和缺失的索引,應用傾向於訪問資料庫中的某些特定的表多一些。當隔離層設定不正確時,事務會執行很長時間,由於涉及到的索引導致不能訪問資料,處理發生衝突或發生阻塞等。許多應用管理員沒有意識到資料庫遭受阻塞的程度;我們需要分析和發現由頻繁的短期鎖大量累積而導致的明顯競爭。

■ 阻塞鎖-鎖型別-資料庫鎖

確定是否存在明顯的鎖競爭,如果存在,按照資料庫分析鎖的型別。某些應用以不同的方式訪問不同的特定資料庫。其原因可能是不同的開發人員開發的**不同,或需求不斷變化等等。按照資料庫顯示不同的sql server鎖型別的分析結果,顯示鎖的行為與整體活動時間的比較分析的重要程度,這些將有助於應用程式開發人員正確地修改他們的應用**。

■ 記憶體緩衝區閂鎖-資料庫閂鎖

確定是否存在明顯的記憶體緩衝區閂鎖競爭,如果存在,很多的記憶體緩衝區閂鎖等待是i/o瓶頸和熱頁的跡象。因為記憶體緩衝區閂鎖與i/o競爭沒有直接關係,因而這對sql server的可用記憶體數量是很關鍵的。

■ 內部快取記憶體閂鎖競爭- 資料庫閂鎖

確定是否存在明顯的內部快取記憶體閂鎖競爭,如果存在,識別出**存在大部分競爭。內部快取記憶體閂鎖可用在多種不同的情況;可能最常見的例子是內部快取記憶體的競爭(不是緩衝池頁),尤其當使用堆,text或兩者同時使用的時候。如果解決log和pagelatch_up的競爭後沒有作用,通常將資料分割槽可以很好緩解內部快取記憶體閂鎖的競爭。

步驟4 解決資源瓶頸

到目前為止,你已經確保你的查詢正確地使用了底層的系統資源,並且盡可能有效地訪問資料。現在你應該確定是否有資源瓶頸使你的應用慢下來。在應用上你可以做許多調優工作,在某些情況下外部因素仍是效能優化的最後障礙。這部分調優方法描述了特定資源的瓶頸。例如,sql server有足夠的記憶體來支援良好的效能嗎?有竊取sql server記憶體的外部應用程式嗎?你的硬碟效能能足夠支援你的工作量嗎?你的應用能有效率地記錄日誌嗎,記錄日誌的時間是否需要提高?最後,並行可以幫助你的查詢執行更快,還是sql server花費更多的時間協調併發執行緒,從而使得併發帶來更多的阻礙?應該考慮到應用效能的這些方面,可以保證充分利用底層系統資源,並且可以幫助確定哪些硬體需要擴容。

■ 記憶體壓力-系統記憶體

確定是否存在明顯的記憶體壓力,如果存在,請分析:

● 外部的記憶體壓力可以影響sql server的效能。許多dba和dba的經理們不明白病毒檢測軟體的配置不當和在乙個exchange server上安裝sql server所帶來的影響。

● sql server沒有足夠的記憶體達到理想的功能。如果sql server不能分配給快取足夠的記憶體,頁的平均壽命將減少,系統範圍記憶體分頁交換就會增加。

■ 日誌等待

確定是否有明顯的日誌等待,如果有,分析有多少因素減慢sql server記錄日誌。

步驟5 基線偏離分析

毫無疑問,對應用效能的最好的比較衡量是它自己過去的效能。需要分析應用效能是在**與過去的所觀測的行為發生了偏離。這意味著你能快速,容易地看出你的應用的伸縮狀況,以及確定應用的構建和系統變化等因素對企業效能的影響。我們可以分析多種主要資源的使用的偏離情況。我們需要分析出哪種主要的資源分類會受到影響,根據分析所提供的邏輯和分析度量值與其它支援資訊,可以更快地理解如何獲得應用的最佳效能。

■ cpu使用率偏離,cpu等待時間偏離,i/o等待時間偏離,閂鎖等待時間偏離, 鎖等待時間偏離,工作量偏離

● 確定這些指標是否與過去典型的使用情況發生了重要變化。

● 這些變化應該再核實確認,確保它們不會成為有問題的變化。

sql server效能調優

我踩過的聽過的那些坑 第24 24周 資料庫維護 database maintenance 第23 24周 臨時資料庫 tempdb 第22 24周 等待和i o延遲統計 第21 24周 效能監控 pal工具 第20 24周 死鎖 deadlocking 第19 24周 鎖公升級 lock esca...

SQL Server效能調優系列

這是關於sql server調優系列文章,以下內容基本涵蓋我們日常中所寫的查詢運算的分解以及調優內容項,皆為原創.資料庫技術經驗篇 sql server調優系列基礎篇 sql server調優系列基礎篇 常用運算子總結 sql server調優系列基礎篇 聯合運算子總結 sql server調優系列...

SQL Server效能調優系列

這是關於sql server調優系列文章,以下內容基本涵蓋我們日常中所寫的查詢運算的分解以及調優內容項,皆為原創.sql server調優系列基礎篇 sql server調優系列基礎篇 常用運算子總結 sql server調優系列基礎篇 聯合運算子總結 sql server調優系列基礎篇 並行運算總...