功能更新|DAS推出全局Workload优化功能,实现SQL自动诊断
背景
日常的數據庫優化中,在數據庫的表上創建合適的索引是解決慢SQL查詢問題的一種非常重要且常用的方案。在處理過程中,DBA或者開發人員通常會根據實例上的慢SQL信息進行優化,DAS自動SQL優化功能已經實現了根據慢SQL進行自動診斷,并創建合適的索引。但該方案會面臨如下幾個挑戰:
為了解決上述問題,DAS推出了全局Workload優化功能,它可以及時檢測到數據庫的負載變化,識別到新增SQL、執行變化的SQL以及性能不佳的SQL,并綜合考慮SQL的執行頻率和相關SQL信息,給出優化建議。
解決方案介紹
? ? ?全局Workload優化,主要由三部分組成。
? ? ?Workload檢測:根據數據庫實例上和Workload相關的性能指標(如RT,CPU等)以及全量SQL相關指標(執行次數、執行耗時、掃描行數等),訓練數據模型,實時檢測Workload的SQL執行情況,從而識別新增SQL、執行變化的SQL,以及整個負載變化的周期。
? ? ? 如下圖所示,全量SQL執行狀況指標在period1和period2呈周期性狀態,至period3,執行狀況發生變化。全局Workload優化,根據數據訓練模型,輕松實現識別負載變化的時間區間。
? ? 全局診斷:全局診斷優化則根據數據庫在某一時間范圍內的全部SQL執行情況,綜合考慮SQL的查詢和寫入性能以及空間占用情況,推薦最優索引組合,從而從SQL角度最大限度提高數據庫的性能,降低數據庫導致的問題的概率。
智能壓測:智能壓測可以回放實例上某個時間段內的全部SQL(該功能會在相關文章中詳細解讀),將全局診斷和智能壓測結合后,系統可以在測試實例上根據診斷建議自動創建索引,回放歷史流量并對比采納建議前后的SQL執行情況,生成測試報告。
具體實現
觸發時機
全局workload診斷支持用戶自定義觸發和系統自動檢測觸發兩種模式:用戶觸發可以根據業務需求制定時間區間,觸發全局診斷獲取優化建議;自動檢測會實時監測實例的負載信息,檢測到數據庫有異常SQL出現,或者發現Workload整體趨勢變化,及時觸發全局workload診斷。其中異常SQL包括:(1) 新增SQL;(2) 執行次數占比浮動20%以上SQL;(3) 執行平均RT浮動20%以上SQL等。
通過自動檢測機制,可以幫助用戶及時發現結構設計落后于業務變化的場景,減少故障發生的概率以及資源浪費。
數據來源
全局workload診斷的數據來源是SQL審計,包括SQL類型、SQL模版、執行次數以及SQL性能信息等。SQL審計會記錄診斷時間內執行的所有SQL,因此可以發現不是慢SQL但性能欠佳的SQL問題。
關聯SQL分析
通過解析SQL模版和元數據,可以分析出SQL、表、列之間的訪問關系,從而得到可能相互影響的SQL集合。通過關聯性分析,可以有效地減少后續求解問題的復雜度,同時為索引上線后的性能跟蹤服務提供基礎的數據支持。
候選索引生成及代價評估
該模塊和后面的優化求解是全局workload優化的核心模塊。在單SQL的索引推薦中可以根據一些規則或者經驗來推薦索引,也能取得一定的效果,但基于全局workload的優化基于規則的方法就幾乎無效了,必須能夠將代價進行量化。我們基于DAS實現的外置優化器,可以做到快速準確的解析語法樹、采樣收集統計信息、生成候選索引以及計算使用某個索引的代價。
優化求解
在確定候選索引集以及索引代價的情況下,選擇最有索引集合的過程可以等價為一個背包問題的變種。選擇某個索引的收益等價為放入背包物品的價值,由于創建一個索引既可以給查詢帶來正收益也會對寫入和空間成本帶來副收益,因此價值可以是正數也可以是負數。背包的容量是一個表上最多建立索引的閾值(用戶設置或系統默認,并非數據庫存儲約束)。我們的目標是使得背包中物品價值最大。另外需要注意的是,當選擇一個索引后,它會對其他索引的價值產生影響,因此在每次迭代選擇物品時需要根據已經存在索引的情況,更新剩余待選索引的價值。
索引I代價 = 執行次數 * (a*讀收益 - b*寫代價 - c*空間占用)
效果驗證
為了保證優化建議的有效性,我們和智能壓測功能整合到一起,提供快速方便的驗證方案。智能壓測系統會自動搭建測試實例上并同步真實數據,然后在測試上自動采納優化建議,回放診斷時間段內的全量SQL并采集SQL執行的性能數據,最后對比生成測試報告。這種方案的好處是既保證了測試場景和線上業務的一致性,又不會對線上運行業務造成影響,同時還能預估采納建議后產生的影響。
示例
比如表1中存在6條SQL,如果獨立的看每一條SQL,得到的優化索引可能為表2中的4條索引;而從workload維度來看,索引可以合并為表3的兩條索引。兩種結果對比,整體RT下降14.45%,索引空間節省50%。
SQL2 : ?idx_is_deleted_gmt_modified (is_deleted, gmt_modified)
SQL4 : ?idx_name(name) ?
SQL5: ? idx_name_id_birth_date (name, id, birth_date) ??
SQL6: ? idx_name_nick_name (name, nick_name)
idx_is_deleted_gmt_modified (is_deleted, gmt_modified)
idx_name_id_birth_date (name, id, birth_date)?
未來計劃
? ? 全局Workload優化未來會打造自動優化的閉環,包括workload異常檢測、全局workload診斷、智能壓測效果評估,自動采納建議、效果跟蹤及異常處理。另外,目前全局workload優化考慮了SQL執行頻率,SQL查詢和寫入的影響,但沒有考慮固定參數或者參數傾斜等問題,后面可以進一步將這些業務屬性納入到考慮因素當中。
相關閱讀:
數據庫自治服務DAS發布年度新版本:1-5000,”數據庫自動駕駛“進入規模化時代
深度技術揭秘 | 大促狂歡背后,如何有效評估并規劃數據庫計算資源?
重磅 | 數據庫自治服務DAS論文入選全球頂會SIGMOD,領航“數據庫自動駕駛”新時代
干貨|SQL請求行為識別新功能上線,幫助解決異常SQL檢測之大海撈針問題
干貨|一文讀懂阿里云數據庫Autoscaling是如何工作的
原文鏈接:https://developer.aliyun.com/article/785130?
版權聲明:本文內容由阿里云實名注冊用戶自發貢獻,版權歸原作者所有,阿里云開發者社區不擁有其著作權,亦不承擔相應法律責任。具體規則請查看《阿里云開發者社區用戶服務協議》和《阿里云開發者社區知識產權保護指引》。如果您發現本社區中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區將立刻刪除涉嫌侵權內容。總結
以上是生活随笔為你收集整理的功能更新|DAS推出全局Workload优化功能,实现SQL自动诊断的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云原生不仅颠覆了技术栈,背后的每个岗位也
- 下一篇: 搜索运营有哪些玩法,你知道吗?