通常SQL語句可以分為分為四大類:數(shù)據(jù)查詢語言DQL,數(shù)據(jù)操縱語言DML慎菲,數(shù)據(jù)定義語言DDL嫁蛇,數(shù)據(jù)控制語言DCL。
但在數(shù)據(jù)的操作上露该,可以根據(jù)SQL對于IO睬棚、CPU、內(nèi)存等資源的消耗可以分為AP的SQL和TP的SQL。
通常情況下單個TP的SQL語句對于資源的消耗是非常的少的抑党。而AP的SQL會消耗量的IO包警、內(nèi)存、CPU等資源底靠。過程如下圖:
ap_tp_decide
SQL的判別可以從幾個點(diǎn)入手:
1)基于規(guī)則的判別害晦。
SQL語法可以解析為抽象語法解析樹,通過觀察者模型對語法解析數(shù)進(jìn)行規(guī)則分析暑中,提取出SQL語法的關(guān)鍵信息點(diǎn)可以進(jìn)行簡單的做甄別出SQL的類別壹瘟。如TP 類SQL會有事務(wù)級別的插入、修改鳄逾、刪除等操作稻轨,也會有指定條件的簡單查詢等操。AP類SQL通常會有大量的分類統(tǒng)計與語法嵌套严衬,根據(jù)類似SQL的規(guī)則的甄別可以通吵握撸可以判斷出70%左右的SQL的類別。對于無法做到甄別的可以再通過算法模型做進(jìn)一步判別
2)基于算法模型的判別请琳。
基于算法模型的判別需要從幾個步驟入手:訓(xùn)練集粱挡、驗證集數(shù)據(jù)準(zhǔn)備與標(biāo)注、特征變量處理俄精、訓(xùn)練模型選擇询筏、模型參數(shù)優(yōu)化、驗證準(zhǔn)確性竖慧、根據(jù)驗證準(zhǔn)確性做進(jìn)一步優(yōu)化嫌套。
訓(xùn)練集、驗證集準(zhǔn)備:
開啟數(shù)據(jù)庫的日志記錄功能圾旨,把SQL語句以及對應(yīng)的資源消耗等記錄記錄下來踱讨,用做算法模型需要使用的數(shù)據(jù),并把數(shù)據(jù)分成訓(xùn)練集合驗證集砍的。
特征變量處理:
可以對數(shù)據(jù)的特征變量進(jìn)行進(jìn)一步加工處理痹筛,如對SQL可以進(jìn)一步處理為語法樹,根據(jù)語法樹展開放入到特征變量中去廓鞠。
訓(xùn)練模型選擇:
本次做的處理是分類模型帚稠,是對SQL語句或者SQL解析后的語法樹進(jìn)行分類,所以我們可以選擇分類模型來處理這個事情床佳,但由于數(shù)據(jù)庫對于性能要求很高滋早,所以在選擇時也要從模型調(diào)用的性能做為考慮。
模型參數(shù)優(yōu)化:
通常指的就是模型調(diào)參砌们,這個是一個算法模型的常規(guī)做法根據(jù)不同的參數(shù)進(jìn)行優(yōu)化杆麸。
驗證準(zhǔn)確性:
把數(shù)據(jù)代入到驗證集中對數(shù)據(jù)做進(jìn)一步校驗搁进,驗證算法的準(zhǔn)確度。
以上為SQL 解析的 AP/TP 判別角溃,「分布式技術(shù)專題」是國產(chǎn)數(shù)據(jù)庫hubble團(tuán)隊精心整編拷获,專題會持續(xù)更新,歡迎大家保持關(guān)注减细。