索引推薦神器Paw Index Advisor - 配置
Paw Index Advisor是PawSQL團隊開發的面向數據庫應用開發人員和DBA等數據庫運維人員的自動化、智能化、基于代價的索引推薦工具。
上一篇(一個優秀的數據庫索引推薦IDEA插件)簡要介紹了Paw Index Advisor的能力,這次小編詳細介紹一下索引推薦神器Paw Index Advisor的配置項及相關注意事項。
Paw Index Advisor的配置頁面如下:
Query Type(查詢類型):
指定輸入待分析SQL的類型,目前支持兩種查詢語句格式,
- SQL files,原生SQL文件, 支持ansi標準的SQL語法;詳細的語法及語法對應的索引推薦將在后一個章節(Paw Index Advisor使用手冊(2)-語法支持)中詳細描述。
- Mapper files,從Mybatis的mapper配置文件里提取SQL, 并通過解析獲取所有可能的SQL組合。Paw Index Advisor通過一個智能的引擎,能夠對mapper文件中的占位符根據其上下文推斷其數據類型并對其賦于一個合法的常量,從而使其能夠生產合法的SQL語句,以便進行后續的查詢語句結構分析。Mapper files作為輸入對于應用開發人員非常重要,因為在應用開發初期,開發人員對于前端的輸入組合無法完全掌握,所能組合的SQL業務無法確定,此選項可以確保對于所有的組合,都能夠合適的索引推薦出來以提升性能。
注意:由于Mapper配置文件可能書寫不夠規范,導致組合出的某些SQL語句在真實的場景下永遠不會出現,進而推薦出無用的索引。所以建議在程序上線后,或是在UAT測試階段,通過querylog抓取真實的SQL作為輸入,再一次使用Paw Index Advisor.
Database Vendor(數據庫類型):
指定連接的數據庫類型,目前支持MySQL,PostgreSQL,Opengauss三種數據庫類型。其他基于遵循MySQL/PostgreSQL客戶端協議的數據庫理論上也可以支持,但未經過全面測試。
數據庫連接信息,數據庫連接信息作用有兩個:
- 用來獲取SQL對應的數據庫對象,包括數據庫表,列定義,以及表上現有的索引信息。表和列定義用來解析輸入的SQL,現有的索引信息后續會被用來進行推薦索引和現有索引的排重。
- 數據庫連接信息用來對推薦的索引進行what-if 驗證,以確保推薦的索引在實際的SQL執行計劃中能夠被選中,從而提升SQL的查詢性能。
- Database host/port: 數據庫地址及端口
- ?User:數據庫用戶名:
- Password:數據庫用戶密碼
- DefaultDB: 默認數據庫名稱,鏈接默認的數據庫名稱
- Database/schema List: 數據庫列表(MySQL)或是模式列表(PostgreSQL/Opengauss).
- Deduplicate with existing indice(是否和現有的索引進行排重):選擇此選項的場景是不考慮刪除現有的索引,因為輸入的SQL只是并不能代表這個數據庫上所有的SQL場景。所以只考慮新增對輸入SQL有幫助的索引。
如果能夠確保輸入的SQL包含此數據庫所有的查詢,那么只保留推薦的索引就可以了,這種情況下可以不選擇此選項,并且使用新推薦的索引代替現有的索引。
- What-if analysis validation(是否對推薦的索引進行what-if驗證):確保推薦的索引在實際的SQL執行計劃中能夠被選中,從而避免推薦無效索引。
注意:此選項應避免在生產庫上使用,因為對于沒有內置what-if(內置虛擬索引)的數據庫(MySQL/Postgres皆是)來說,Paw Index Advisor是通過創建推薦索引并進行explain分析執行計劃,然后刪除推薦索引的方式來做的。這個過程在生產庫上會消耗一定的資源,且執行時間會比較長,可能對生產庫上的業務運行產生影響。
本次內容小編就介紹到這里了,PawSQL專注數據庫性能優化,