什么是SQL性能調優(yōu)?

      數(shù)據(jù)庫管理員 (DBA) 就像賽車技師。構建和優(yōu)化高性能車輛需要進行細微的微調和對細節(jié)的關注。這里的調整和那里的調整可以將你的單圈時間縮短幾分之一秒。當然,那幾分之一秒可以決定你是贏還是輸。作為 DBA,您有責任微調您的 SQL 查詢,使它們具有額外的功能。即使是速度上的微小改進也可能使您領先于競爭對手,并使您成為客戶(或老板)眼中的贏家。

      什么是SQL性能調優(yōu)?-南華中天

      雖然 SQL 性能調優(yōu)不是一夜之間成為專家的事情,但在您作為云 DBA 起步時,有一些準則需要遵循。本指南將為您提供一個基本框架,供您發(fā)展技能和知識庫。您將學習一些重要的交易技巧,例如如何分桶思考和對相關指標進行分組。還包括數(shù)據(jù)庫維護任務的一般清單和 SQL 調優(yōu)軟件的免費演示。

      1、什么是SQL性能調優(yōu)?

      明確定義什么是 SQL 性能調優(yōu)并了解您要實現(xiàn)的目標可能會有所幫助。SQL 性能調優(yōu)是改進在數(shù)據(jù)庫中執(zhí)行的查詢的過程,目的是盡可能高效和快速地返回所需的結果。可能有幾十種方法可以返回相同的結果,而 SQL 性能調優(yōu)就是找到最快/成本最低的一種。

      SQL 調優(yōu)中沒有萬靈藥。在一種情況下可能是最佳實踐的方法不適用于另一種情況。并非所有數(shù)據(jù)庫在用途(思考 OLTP 與 OLAP/數(shù)據(jù)倉庫)或大小(思考 gigs 與 teras)方面都是平等的。這是一個不斷測試和記錄結果,然后再次測試的過程。

      在執(zhí)行性能調優(yōu)任務時,重要的是:

      1. 分桶思考
      2. 關注相關指標
      3. 隨著時間的推移衡量結果
      4. 定期維護數(shù)據(jù)庫

      2. 分桶思考

      當面臨數(shù)據(jù)庫性能調優(yōu)任務時,可能很難決定從哪里開始。您可能還不知道數(shù)據(jù)庫的哪個方面需要注意。在談論在云中管理數(shù)據(jù)庫時,您可能不得不考慮一些在本地數(shù)據(jù)庫時不必擔心的事情。

      制定行動計劃的最佳方式是分桶思考。查看您的數(shù)據(jù)庫,就像機械師分析剛進店的汽車一樣。一次查看所有內容并不是很有幫助,因此機械師會根據(jù)問題的功能和位置來查看問題。是暫停的問題嗎?引擎?還是需要身體鍛煉?您可以將這些稱為汽車維修的“桶”。

      在數(shù)據(jù)庫性能調優(yōu)方面,將潛在問題分成不同的桶意味著根據(jù)共性組織一切。對于數(shù)據(jù)庫和調整 SQL,桶可以被認為是:

      • 資源(物理或虛擬)
      • 索引/數(shù)據(jù)模型
      • 查詢結構
      • 并發(fā)(阻塞——多個線程請求鎖定同一數(shù)據(jù)庫資源)

      從那里,您可以深入到其他“桶”以確定問題的根源。以資源為例,因為如果您的數(shù)據(jù)庫位于云中,這可能是您必須更加關注的一件事。以下是在考慮使 SQL 語句運行得更好時要考慮的一些資源類別:

      • 記憶
      • 磁盤 I/O(容量和延遲)
      • 中央處理器
      • 網(wǎng)絡

      相同的進一步細分可用于其他“存儲桶”,但我們不會深入研究這些“存儲桶”,因為在考慮內部部署與云時它們不會發(fā)生重大變化。

      3.關注相關指標

      當您測試您的查詢并微調您的數(shù)據(jù)庫時,您將跟蹤特定指標以便繪制隨時間改進的圖表。這些指標可能包括:

      • 等待狀態(tài)(數(shù)據(jù)庫花時間為最終用戶執(zhí)行查詢)
      • CPU 利用率和信號等待
      • 提交響應時間
      • SQL語句編譯
      • 交易吞吐量
      • 內存壓力(閂鎖爭用和數(shù)據(jù)快速沖出內存)
      • 磁盤 I/O 延遲
      • 網(wǎng)絡帶寬和使用情況(這對于支持云中的數(shù)據(jù)庫尤為重要)

      使用等待狀態(tài)作為用于關聯(lián)的指標的指南。如果您的數(shù)據(jù)庫將所有時間都花在磁盤讀取上,那么查看內存壓力(為什么它總是不得不返回到磁盤?)和磁盤性能(讀取延遲)作為相關指標來查看這些特定資源是否導致性能問題.?另一個很好的例子是阻塞。如果您的數(shù)據(jù)庫將所有時間都花在等待釋放鎖上,則您無法關聯(lián) CPU、內存、磁盤或網(wǎng)絡爭用或壓力。

      在性能指標方面,數(shù)據(jù)庫分析工具是您最好的朋友。Database Performance Analyzer中的儀表板功能提供了一個有價值的窗口,用于了解指標如何相互關聯(lián)。多維性能分析為您提供了正確的上下文,因此您可以從多個角度查看數(shù)據(jù)并三角測量性能問題的根本原因。多維視圖為您提供所需的人物、內容、時間、地點和原因的答案。

      使用SolarWinds???SQL Sentry,DBA 可以通過快速查看實時和歷史事件及性能數(shù)據(jù),更深入地了解整個 Microsoft 數(shù)據(jù)資產(chǎn)。SQL Sentry還可以顯示執(zhí)行計劃圖、查詢歷史記錄等,因此您可以快速找到并修復可能有問題的查詢。

      4. 隨著時間的推移衡量結果

      要了解您的 SQL 查詢的執(zhí)行情況,您需要隨時間跟蹤您的指標。在幾周甚至幾個月的時間里收集數(shù)據(jù)將使您對數(shù)據(jù)庫的整體性能有一個全面的了解。這將幫助您查看總體情況,而不是單個事件的快照。它可以幫助您回答以下問題:“我現(xiàn)在的表現(xiàn)是否比以往更差?”?憑借隨時間繪制性能圖表的能力,可以將其用作基準來確定任何給定時間范圍內的性能是否超出正常范圍。一個例子可能是將月末活動與上個月末而不是上周進行比較。

      5.數(shù)據(jù)庫維護任務

      數(shù)據(jù)庫維護對于 SQL 調優(yōu)至關重要,因為此任務使您能夠發(fā)現(xiàn)潛在問題并解決您可能從未意識到的問題。維護任務可能因環(huán)境而異,但建議執(zhí)行一些常見或一般任務。

      在進入具體的維護任務之前,這里有幾個每個 DBA 都應該熟悉的首字母縮略詞:

      • SLA – 服務水平協(xié)議(您和企業(yè)最終用戶達成的協(xié)議)
      • RPO – 恢復點目標
      • RTO – 恢復時間目標
      • MTTI – Mean Time To Innocence(證明問題不在于數(shù)據(jù)庫所花費的時間)

      請牢記這些首字母縮略詞,以下是您作為 DBA 需要執(zhí)行日常維護的主要領域:

      1. 備份——這需要以符合 RPO/RTO/SLA 目標的方式完成,但它會因系統(tǒng)而異。一種可能的方法是在工作時間進行每周完整備份、每日差異/增量備份和每小時事務日志備份(對于 SQL Server?)。這將為您提供相當數(shù)量的保護,但并不適用于所有系統(tǒng)。

      例如,一個 30PB 的數(shù)據(jù)庫不太可能需要每周進行完整備份。另外,了解恢復到昨天、上周、上個月或去年需要多長時間也很重要。您需要制定恢復計劃并使您的備份符合該計劃。

      記住,如果你不能調整你的數(shù)據(jù)庫環(huán)境,你可能不會得到加薪,但如果你不能保證你可以恢復,你將沒有工作。

      2. 索引維護——您的索引需要經(jīng)常檢查,最有可能每天檢查一次。但是,您可能不想每晚都重建索引。同樣,這取決于系統(tǒng)和重建所需的時間長度。索引中的碎片級別可能導致更新統(tǒng)計信息或重新組織索引比重建索引更好。

      3. 更新統(tǒng)計數(shù)據(jù)——理想情況下需要每天檢查統(tǒng)計數(shù)據(jù)。這些檢查取決于系統(tǒng)、更新統(tǒng)計信息的時間長度、數(shù)據(jù)庫對象(表和索引)中的變動量,以及下次運行時將被迫重新編譯的查詢。

      4. 腐敗檢查——你應該把檢查腐敗作為首要任務,至少每月一次。

      5. 捕獲配置詳細信息——對于數(shù)據(jù)庫和服務器,您希望每天獲取配置設置的詳細信息,并在進行更改時進行跟蹤。您可以擴展它以捕獲其他內容,例如創(chuàng)建或刪除的登錄/用戶、這些用戶的權限等。詳細程度取決于每個 DBA 的勤奮程度,以及他們保持低 MTTI 的愿望。

      6.有用的資源

      除了維護任務清單之外,這里還有一些有用的資源可以幫助您作為數(shù)據(jù)庫管理員進行開發(fā):

      • 對于 SQL 查詢調優(yōu),請查看此12 步指南
      • 要編寫更好的 SQL 查詢,請深入閱讀T-SQL 查詢一書
      • 免費試用數(shù)據(jù)庫性能分析器
      • SQL Server 性能調優(yōu)的 3 個有用技巧
      • 下載SQL Sentry 的免費試用版

      結論

      如您所見,作為云 DBA 包含許多與傳統(tǒng) DBA 相同的關注點和活動。我們可以使用許多與過去相同的工具和方法來解決性能問題。云和未來的 DBA 可能需要對技術有更廣泛的理解。因此,擺脫那些網(wǎng)絡技能,讓你的頭腦進入云端。