Themis是宜信公司DBA團隊開發的一款數據庫審覈產品,可幫助DBA、開發人員快速發現數據庫質量問題,提高工做效率。html
此平臺可實現對Oracle、MySQL數據庫進行多維度(對象結構、SQL文本、執行計劃及執行特徵)的審覈,用以評估對象結構設計質量及SQL運行效率。可幫助DBA及開發人員,快速發現定位問題;並提供部分輔助診斷能力,提高優化工做效率。所有操做都可經過WEB界面進行,簡單便捷。此外,爲了更好知足個性化需求,平臺還提供了擴展能力,用戶可根據須要自行擴展。python
開源地址: https://github.com/CreditEaseDBAmysql
點擊查看Themis的部署攻略git
規則解析分爲四塊:對象類規則解析、文本類規則解析、執行計劃類規則解析、統計信息類規則解析。每一個模塊均可以使用手動或自動的方式進行。github
配置data/analysis_o_obj.json文件web
{ "module": "analysis", "type": "OBJ", "db_server": "127.0.0.1", "db_port": 1521, "username": "schema", "db_type": "O", "rule_type": "OBJ", "rule_status": "ON", "create_user": "system", "task_ip": "127.0.0.1", "task_port": 1521 }
配置db_server、db_port、username、create_user、task_ip選項,其餘的保持默認便可,username是須要審覈的目標對象的名字。redis
python command.py -m analysis_o_obj -c data/analysis_o_obj.json
使用上面的命令開始採集obj數據sql
配置data/analysis_m_obj.json文件mongodb
{ "module": "mysql", "type": "OBJ", "db_server": "127.0.0.1", "db_port": 3306, "username": "schema", "db_type": "mysql", "rule_type": "OBJ", "rule_status": "ON", "create_user": "mysqluser", "task_ip": "127.0.0.1", "task_port": 3306 }
配置db_server、db_port、username、create_user、task_ip、db_port選項,其餘的保持默認便可。數據庫
運行命令:
python command.py -m analysis_m_obj -c data/analysis_m_obj.json
oracle和mysql對象類規則是不須要依賴於採集的數據的,它是直接鏈接到數據庫裏進行查詢的,因爲有的庫較大可能時間會比較久,建議在業務低峯期進行。
配置data/analysis_o_text.json文件
{ "module": "analysis", "type": "TEXT", "username": "schema", "create_user": "SYSTEM", "db_type": "O", "sid": "cedb", "rule_type": "TEXT", "rule_status": "ON", "hostname": "127.0.0.1", "task_ip": "127.0.0.1", "task_port": 1521, "startdate": "2017-02-23", "stopdate": "2017-02-23" }
配置sid、username、create_user、task_ip、hostname、startdate、stopdate選項,因爲數據是按天採集的,所以暫時只支持startdate和stopdate保持一致,hostname和task_ip能夠保持一致,其餘的保持默認便可。
執行下面的命令便可以進行規則解析:
python command.py -m analysis_o_plan -c data/analysis_o_plan.json
配置data/oracle_m_text.json文件
"module": "analysis", "type": "TEXT", "hostname_max": "127.0.0.1:3306", "username": "schema", "create_user": "mysqluser", "db_type": "mysql", "rule_type": "TEXT", "rule_status": "ON", "task_ip": "127.0.0.1", "task_port": 3306, "startdate": "2017-02-21 00:00:00", "stopdate": "2017-02-22 23:59:00" }
配置username、create_user、taskip、taskport、hostname、hostname_max、startdate、stopdate選項,hostname和task_ip能夠保持一致,其餘的保持默認便可。
運行下面的命令便可以進行規則解析:
python command.py -m analysis_m_text -c data/analysis_m_text.json
上面兩步中的username爲須要審覈的對象。
配置data/analysis_o_plan.json文件
{ "module": "analysis", "type": "SQLPLAN", "capture_date": "2017-02-23", "username": "schema", "create_user": "SYSTEM", "sid": "cedb", "db_type": "O", "rule_type": "SQLPLAN", "rule_status": "ON", "task_ip": "127.0.0.1", "task_port": 1521 }
主要是對capture_date,username, create_user, sid,db_type,rule_type,task_ip,task_port參數進行配置,type分爲SQLPLAN,SQLSTAT,TEXT,OBJ四種類型,rule_type的類型同SQLPLAN,只不過一個是表明模塊的類型,一個表明規則的類型,db_type分爲"O"和「mysql」兩種類型,分別表明oracle和mysql,capture_date爲咱們欠扁配置的數據的抓取日期。
python command.py -m analysis -c data/analysis_o_plan.json
運行上面的命令便可生成解析結果。
配置data/analysis_m_plan.json文件
{ "module": "analysis", "type": "SQLPLAN", "hostname_max": "127.0.0.1:3306", "db_server": "127.0.0.1", "db_port": 3306, "username": "schema", "db_type": "mysql", "rule_status": "ON", "create_user": "mysqluser", "task_ip": "127.0.0.1", "rule_type": "SQLPLAN", "task_port": 3306, "startdate": "2017-02-21 00:00:00", "stopdate": "2017-02-22 23:59:00" }
type類型的含義同上面oracle,hostname_max爲mysql的ip:端口號的形式,每個hostname_max表明一個mysql實例,startdate和stopdate須要加上時、分、秒,這一點同oracle不大同樣。
python command.py -m analysis -c data/analysis_m_plan.json
而後運行上面的命令進行mysql的plan的規則解析。
配置data/analysis_o_stat.json文件
{ "module": "analysis", "type": "SQLSTAT", "capture_date": "2017-02-23", "username": "schema", "create_user": "SYSTEM", "sid": "cedb", "db_type": "O", "rule_type": "SQLSTAT", "rule_status": "ON", "task_ip": "127.0.0.1", "task_port": 1521 }
配置sid、username、create_user、task_ip、capture_date選項,其餘保持默認便可。
運行命令:
python command.py -m analysis_o_stat -c data/analysis_o_stat.json
進行數據採集。
配置文件data/analysis_m_text.json
{ "module": "analysis", "type": "SQLSTAT", "hostname_max": "127.0.0.1:3306", "db_server": "127.0.0.1", "db_port": 3306, "username": "schema", "db_type": "mysql", "rule_status": "ON", "create_user": "mysqluser", "task_ip": "127.0.0.1", "rule_type": "SQLSTAT", "task_port": 3306, "startdate": "2017-02-21 00:00:00", "stopdate": "2017-02-22 23:59:00" }
配置username、create_user、task_ip、task_port、hostname、hostname_max、startdate、stopdate選項,hostname和task_ip能夠保持一致,其餘的保持默認便可。
運行命令:
python command.py -m analysis_m_text -c data/analysis_m_text.json
進行數據採集。
上面介紹的手動規則解析都是能夠進行測試,或者在一些特殊狀況下使用,大部分狀況咱們會使用自動規則解析。
自動規則解析咱們使用celery來完成,關於celery 的使用,請參考http://docs.celeryproject.org...。
下面是經常使用的一些關於celery的命令:
開啓規則解析 celery -A task_other worker -E -Q sqlreview_analysis -l info 開啓任務導出 celery -A task_exports worker -E -l info 開啓obj信息抓取 celery -A task_capture worker -E -Q sqlreview_obj -l debug -B -n celery-capture-obj 開啓flower celery flower --address=0.0.0.0 --broker=redis://:password@127.0.0.1:6379/ 開啓plan、stat、text抓取 celery -A task_capture worker -E -Q sqlreview_other -l info -B -n celery-capture-other
最後咱們會將規則解析都加入到supervisor託管,而後經過web界面生成任務,而後用celery進行調度,經過flower查看任務執行狀態。
關於具體使用請參考supervisor的配置。
平臺的核心就是規則。規則是一組過濾條件的定義及實現。規則集的豐富程度,表明了平臺的能力。平臺也提供了擴展能力,用戶可自行定義規則。 從分類來看,規則可大體分爲幾類。
規則能夠包含參數。例如:執行計劃規則中,有個是大表掃描。這裏就須要經過參數來限定大表的定義,可經過物理大小來指定。
規則權重及扣分,最終會累積爲一個總的扣分,平臺會按百分制進行折算。經過這種方式,可起到必定的量化做用。
有問題能夠直接在 https://github.com/CreditEase... 提出。
本文選自:wiki:https://tuteng.gitbooks.io/th...。
因爲篇幅關係內容有所調整,請點擊連接查看原文。
來源:宜信技術學院