MogDB SQLdiag 使用指南
前提條件
需要保證用戶提供訓練數(shù)據(jù)。
如果用戶通過提供的工具收集訓練數(shù)據(jù),則需要啟用 WDR 功能,涉及到的參數(shù)為 track_stmt_stat_level 和 log_min_duration_statement,具體情況見下面小節(jié)。
為保證預測準確率,用戶提供的歷史語句日志應盡可能全面并具有代表性。
按照要求配置 python 3.6 + 環(huán)境及其依賴。
環(huán)境配置
本功能運行環(huán)境要求 Python 3.6 版本及以上,需要的第三方依賴包記錄在 requirements.txt 文件中,可以通過 pip install 命令安裝依賴,如:
pip install requirements.txt
SQL 流水采集方法
本工具需要用戶提前準備數(shù)據(jù),訓練數(shù)據(jù)格式如下,每個樣本通過換行符分隔:
SQL,EXECUTION_TIME
預測數(shù)據(jù)格式如下:
SQL
其中 SQL 表示?SQL 語句的文本,EXECUTION_TIME 表示?SQL 語句的執(zhí)行時間,樣例數(shù)據(jù)見 sample_data 中的 train.csv 和 predict.csv。
用戶可以按照要求格式自己收集訓練數(shù)據(jù),工具也提供了腳本自動采集(load_sql_from_rd),該腳本基于 WDR 報告獲取 SQL 信息,涉及到的參數(shù)有 log_min_duration_statement 和 track_stmt_stat_level:
其中 log_min_duration_statement 表示慢 SQL 閾值,如果為 0 則全量收集,時間單位為毫秒;
track_stmt_stat_level 表示信息捕獲的級別,建議設置為 track_stmt_stat_level=‘L0,L0’
參數(shù)開啟后,可能占用一定的系統(tǒng)資源,但一般不大。持續(xù)的高并發(fā)場景可能產(chǎn)生 5% 以內(nèi)的損耗,數(shù)據(jù)庫并發(fā)較低的場景,性能損耗可忽略。
使用腳本獲取訓練集方式:load_sql_from_wdr.py [-h] --port PORT --start_time START_TIME ? ? ? ? ? ? ? ? ? ? ? ? ? ?--finish_time FINISH_TIME [--save_path SAVE_PATH]例如: ? ?python load_sql_from_wdr.py --start_time "2021-04-25 00:00:00" --finish_time "2021-04-26 14:00:00" --port 5432 ?--save_path ./data.csv
操作步驟
提供歷史日志以供模型訓練
進行訓練與預測操作:
基于模板法的訓練與預測: ? ?python main.py [train, predict] -f FILE --model template --model-path template_model_path基于DNN的訓練與預測: ? ?python main.py [train, predict] -f FILE --model dnn --model-path dnn_model_path
使用方法示例
在本工具的根目錄中,執(zhí)行下列語句可以實現(xiàn)對應功能。
使用提供的測試數(shù)據(jù)進行模板化訓練:
python main.py train -f ./sample_data/train.csv --model template --model-path ./template
使用提供的測試數(shù)據(jù)進行模板化預測:
python main.py predict -f ./sample_data/predict.csv --model template --model-path ./template --predicted-file ./result/t_result
使用提供的測試數(shù)據(jù)進行模板化模型更新:
python main.py finetune -f ./sample_data/train.csv --model template --model-path ./template
使用提供的測試數(shù)據(jù)進行 DNN 訓練:
python main.py train -f ./sample_data/train.csv --model dnn --model-path ./dnn_model
使用提供的測試數(shù)據(jù)進行 DNN 預測:
python main.py predict -f ./sample_data/predict.csv --model dnn --model-path ./dnn_model --predicted-file
使用提供的測試數(shù)據(jù)進行 DNN 模型更新:
python main.py finetune -f ./sample_data/train.csv --model dnn --model-path ./dnn_mo