SQLAdvisor調研與應用
歡迎轉載,請註明作者、出處。
如有疑問,歡迎留言~
一、需求
1.1、降低慢查詢量與影響
二、SQLAdvisor
2.1、SQLAdvisor簡介
在資料庫運維過程中,優化SQL是業務團隊與DBA團隊的日常任務。例行SQL優化,不僅可以提升程式效能,還能夠降低線上故障的概率。
目前常用的SQL優化方式包括但不限於:業務層優化、SQL邏輯優化、索引優化等。其中索引優化通常通過調整索引或新增索引從而達到SQL優化的目的。索引優化往往可以在短時間內產生非常巨大的效果。如果能夠將索引優化轉化成工具化、標準化的流程,減少人工介入的工作量,無疑會大大提高DBA的工作效率
SQLAdvisor是由美團點評公司DBA團隊(北京)開發維護的SQL優化工具:輸入SQL,輸出索引優化建議。 它基於MySQL原生詞法解析,再結合SQL中的where條件以及欄位選擇度、聚合條件、多表Join關係等最終輸出最優的索引優化建議。目前SQLAdvisor在公司內部大量使用,較為成熟、穩定。
美團點評致力於將SQLAdvisor打造成一款高智慧化SQL優化工具,選擇將已經在公司內部使用較為成熟的、穩定的SQLAdvisor專案開源,github地址。希望與業內有類似需求的團隊,一起打造一款優秀的SQL優化產品。
2.2、SQLAdvisor結構流程圖
2.3、SQLAdvisor支援SQL
2.4、SQLAdvisor注意
2.5、SQLAdvisor安裝
2.5.1、下載包
2.5.2、安裝
2.5.3、SQLAdvisor使用
Usage:
SQL Advisor Summary
Help Options:
-?, --help Show help options
Application Options:
-f, --defaults-file sqls file
-u, --username username
-p, --password password
-P, --port port
-h, --host host
-d, --dbname database name
-q, --sqls sqls
-v, --verbose 1:output logs 0:output nothing
2.5.4、測試使用
[root@dbmon SQLAdvisor]# sqladvisor -u *** -p *** -h *** -P 6001 -d my -q "select * from my_db where port=6001" -v 1
2017-05-04 11:42:03 27943 [Note] 第1步: 對SQL解析優化之後得到的SQL:select `*` AS `*` from `my`.`my_db` where (`port` = 6001)
2017-05-04 11:42:03 27943 [Note] 第2步:開始解析where中的條件:(`port` = 6001)
2017-05-04 11:42:03 27943 [Note] show index from my_db
2017-05-04 11:42:03 27943 [Note] show table status like 'my_db'
2017-05-04 11:42:03 27943 [Note] select count(*) from ( select `port` from `my_db` FORCE INDEX( ux_hostportservicename ) order by host DESC,port DESC limit 353) `my_db` where (`port` = 6001)
2017-05-04 11:42:03 27943 [Note] 第3步:表my_db的行數:707,limit行數:353,得到where條件中(`port` = 6001)的選擇度:353
2017-05-04 11:42:03 27943 [Note] 第4步:開始驗證 欄位port是不是主鍵。表名:my_db
2017-05-04 11:42:03 27943 [Note] show index from my_db where Key_name = 'PRIMARY' and Column_name ='port' and Seq_in_index = 1
2017-05-04 11:42:03 27943 [Note] 第5步:欄位port不是主鍵。表名:my_db
2017-05-04 11:42:03 27943 [Note] 第6步:開始驗證 欄位port是不是主鍵。表名:my_db
2017-05-04 11:42:03 27943 [Note] show index from my_db where Key_name = 'PRIMARY' and Column_name ='port' and Seq_in_index = 1
2017-05-04 11:42:03 27943 [Note] 第7步:欄位port不是主鍵。表名:my_db
2017-05-04 11:42:03 27943 [Note] 第8步:開始驗證表中是否已存在相關索引。表名:my_db, 欄位名:port, 在索引中的位置:1
2017-05-04 11:42:03 27943 [Note] show index from my_db where Column_name ='port' and Seq_in_index =1
2017-05-04 11:42:03 27943 [Note] 第9步:開始輸出表my_db索引優化建議:
2017-05-04 11:42:03 27943 [Note] Create_Index_SQL:alter table my_db add index idx_port(port)
2017-05-04 11:42:03 27943 [Note] 第10步: SQLAdvisor結束!
三、SQLAdvisor自動化、平臺化
3.1、架構
注:
利用django, bootstrap,html 來平臺化
利用python指令碼等來實現自動化
3.2、慢日誌線上展示分析平臺具體實現
3.2.1、平臺介面
3.2.2、具體實現
3.2.3、使用
3.3、慢日誌統計分析平臺具體實現
3.3.1、介面
3.3.2、具體實現
將結果儲存在表:my_auto_tuning,my_auto_tuning_history
3.3.3、使用
3.4、線上SQL優化分析平臺具體實現
3.4.1、介面
3.4.2、具體實現
3.4.3、使用
輸出結果如下:
四、優點
<1>不影響當前架構,快速部署上線來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28823725/viewspace-2140970/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ChatGPT調研分析與應用場域結合構想ChatGPT
- 有獎調研 | 移動應用開發者生態大調查!
- 英國企業人工智慧應用調研報告人工智慧
- 變更管理與汽車研發應用
- IBM:調研顯示速度與分析成為企業推廣移動應用因素IBM
- 對MRP II系統在中國企業應用現狀的調研與思考(轉)
- GFK:中國VR行業應用調研報告(附下載)VR行業
- 談談軟體開發中的調研物件與被調研物件 (轉)物件
- 談談軟體開發中的調研物件與被調研物件(轉)物件
- 調研
- MMO產品使用者調研分析與遊戲GS支援運用遊戲
- 德勤諮詢:2020中國與全球企業人工智慧應用現狀調研人工智慧
- 11月11日線上研討會 | Excel診斷調查問卷與ODX轉換和應用Excel
- 應用調優
- U&A在產品市場競爭狀況調研中的應用
- 用 Pandoc 生成一篇調研論文
- 超實用的“情境調研”實踐方法
- SQLAdvisor安裝(CentOS 6)SQLCentOS
- ElasticJob Lite調研AST
- MySQLPartitioning調研MySql
- 調研記錄
- 《國產分散式資料庫應用現狀調研報告》閱讀小記分散式資料庫
- 調優 | Apache Hudi應用調優指南Apache
- 響應式方案調研及前端開發管理思考前端
- AI前哨站:人臉識別應用公眾調研報告(附下載)AI
- WebSocket的調研分析Web
- react拖拽元件調研React元件
- 元件化方案調研元件化
- 【有獎調研】華為安全檢測服務開發者調研問卷
- 有獎調研 | OpenSCA開源社群使用者調研問卷
- 新浪微博資料中心:手機應用使用者調研資料–資料資訊圖
- 【譯】React 應用效能調優React
- 單調棧理解及應用
- 現代廣告雜誌:移動網際網路應用(App)適老化改造調研報告APP
- UIColletionView效能調研結果UIView
- 資料庫調研:memcached資料庫
- bug管理系統調研
- 區塊鏈電子印章應用研發區塊鏈