孫向征
(天津市機(jī)器人產(chǎn)業(yè)協(xié)會(huì),天津 300384)
國(guó)外研究人員提出數(shù)據(jù)庫(kù)輔助診斷框架,此框架能夠?qū)?shù)據(jù)庫(kù)運(yùn)行時(shí)相關(guān)運(yùn)行指標(biāo)進(jìn)行監(jiān)測(cè),性能出現(xiàn)問(wèn)題是,用戶能夠劃出存在性能異常區(qū)域,并通過(guò)框架搜索異常指標(biāo),此類異常指標(biāo)具備一定劃分能力,給定指標(biāo)斷言,通過(guò)斷言能夠?qū)⑻幱谡^(qū)域點(diǎn)與處于異常區(qū)域點(diǎn)有效分開(kāi),按照遺產(chǎn)指標(biāo),用戶便能夠發(fā)現(xiàn)問(wèn)題產(chǎn)生原因??蚣苣軌虬延脩舴答佭M(jìn)行整合,生成因果模型,模型原因便為數(shù)據(jù)庫(kù)的性能問(wèn)題出現(xiàn)根因,結(jié)果為異常指標(biāo)斷言,同時(shí)在未來(lái)推斷中也可以應(yīng)用相關(guān)模型[1-2]。該框架能夠合并因果模型,有效提升模型診斷能力。另外,國(guó)外學(xué)者還提出數(shù)據(jù)庫(kù)的性能診斷框架與以往工作形式不同主要表現(xiàn)為,此框架能夠自行診斷性能問(wèn)題,并在決策樹(shù)模型中將診斷功能和調(diào)優(yōu)功能融合應(yīng)用,決策樹(shù)非葉節(jié)點(diǎn)屬于條件判斷,葉節(jié)點(diǎn)屬于需調(diào)優(yōu)資源,針對(duì)數(shù)據(jù)庫(kù)診斷,系統(tǒng)將按照數(shù)據(jù)庫(kù)的當(dāng)前運(yùn)行狀態(tài)由根節(jié)點(diǎn)開(kāi)始,按照非葉節(jié)點(diǎn)相關(guān)條件有選擇性地訪問(wèn)子節(jié)點(diǎn),系統(tǒng)對(duì)以上步驟進(jìn)行重復(fù),循環(huán)制葉節(jié)點(diǎn)停止,葉節(jié)點(diǎn)資源為需調(diào)優(yōu)資源。同時(shí),框架能夠?qū)?shù)據(jù)庫(kù)資源、負(fù)載進(jìn)行建模,通過(guò)數(shù)據(jù)庫(kù)結(jié)構(gòu)信息提升準(zhǔn)確性,用戶通過(guò)不同資源的配置情況下數(shù)據(jù)庫(kù)的運(yùn)行性能對(duì)決策樹(shù)進(jìn)行調(diào)優(yōu)。但是,決策模型需通過(guò)特定專家系統(tǒng)領(lǐng)域知識(shí)和數(shù)據(jù)庫(kù)中的文檔作為基礎(chǔ),通用性存在一定的限制。
診斷工具DIADS,其適用于SAN做底層存儲(chǔ)結(jié)構(gòu)的DBMS上,注釋計(jì)劃圖是一種模型,Query Layer為數(shù)據(jù)庫(kù)查詢計(jì)劃,其中Database Layer為數(shù)據(jù)庫(kù)運(yùn)行性能指標(biāo),SAN Layer為儲(chǔ)存物理結(jié)構(gòu)體系,把查詢計(jì)劃中操作符與相關(guān)物理、邏輯資源以圖方式相互聯(lián)系,便能夠發(fā)現(xiàn)性能問(wèn)題,借助此模型和歷史數(shù)據(jù)加以診斷[3]。如果查詢的執(zhí)行時(shí)間與預(yù)期不符,系統(tǒng)將按照查詢計(jì)劃提取各操作符消耗時(shí)間,把存在異常操作符通過(guò)學(xué)習(xí)算法進(jìn)行提取,按照模型查詢存在異常硬件資源。
通過(guò)使用LSTM編碼器-解碼器模型監(jiān)測(cè)高維時(shí)間的序列異常,在設(shè)定時(shí)間中監(jiān)測(cè)指標(biāo)數(shù)據(jù)時(shí)間序列,系統(tǒng)能夠自身判斷其正常與否。此算法主要思想為,建立編碼器-解碼器。如圖1所示,其輸入為某段時(shí)間監(jiān)控?cái)?shù)據(jù),輸出為相同維度、相同長(zhǎng)度時(shí)序數(shù)據(jù),模型對(duì)某段時(shí)間序列以逆序方式重建,按照重建的結(jié)果質(zhì)量對(duì)時(shí)間序列異常性進(jìn)行判斷。訓(xùn)練階段,只需要借助正常數(shù)據(jù)對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,損失函數(shù)為重構(gòu)結(jié)果相關(guān)誤差,通過(guò)訓(xùn)練,神經(jīng)網(wǎng)絡(luò)便將具備正常序列建模能力,出入異常的時(shí)間序列,模型將出現(xiàn)誤差重構(gòu)。在結(jié)構(gòu)部分設(shè)置有Attention機(jī)制和記憶網(wǎng)絡(luò),提升模型的擬合數(shù)據(jù)性能。
因?yàn)閷?shí)際應(yīng)用中,對(duì)于收集異常數(shù)據(jù)比較困難,所以,通過(guò)設(shè)定算法中異常閾值,借助極值理論方式,此方式為:設(shè)定異常數(shù)據(jù)出現(xiàn)在數(shù)據(jù)集概率非常小,設(shè)定比較小的概率,按照數(shù)據(jù)集對(duì)異常閾值進(jìn)行求解。第一,在數(shù)據(jù)集內(nèi)選擇分位數(shù),之后選擇大于該數(shù)部分?jǐn)?shù)據(jù),按照極值理論,部分?jǐn)?shù)據(jù)線性變換后符合帕累托分布,對(duì)分布參數(shù)進(jìn)行求解,之后按照概率對(duì)異常閾值進(jìn)行求解。
應(yīng)用此算法的優(yōu)勢(shì)主要表現(xiàn)在:神經(jīng)網(wǎng)絡(luò)能夠?qū)r(shí)間序列有效應(yīng)用,監(jiān)控?cái)?shù)據(jù)存在互相關(guān)聯(lián)情況,神經(jīng)網(wǎng)絡(luò)能夠準(zhǔn)確獲取高維數(shù)據(jù)關(guān)聯(lián)性;相比部分時(shí)間序列異常算法監(jiān)控?cái)?shù)據(jù)庫(kù)時(shí),對(duì)區(qū)域異常加以關(guān)注,并非單點(diǎn)異常關(guān)注,此方式具有一定考慮時(shí)間的策略,提升監(jiān)控的魯棒性;對(duì)異常閾值進(jìn)行設(shè)定時(shí),無(wú)需提前搜集異常數(shù)據(jù)樣本,只需設(shè)定異常發(fā)生概率求解閾值即可,實(shí)際應(yīng)用中,用戶能夠按照業(yè)務(wù)需求對(duì)概率進(jìn)行調(diào)整。同時(shí),該異常監(jiān)測(cè)手段能夠在數(shù)據(jù)動(dòng)態(tài)環(huán)境中對(duì)閾值進(jìn)行調(diào)整,適用于數(shù)據(jù)動(dòng)態(tài)偏移場(chǎng)景中。
確定異常區(qū)域之后,需找出具備強(qiáng)特征指標(biāo),系統(tǒng)通過(guò)模仿DBA自動(dòng)收集在異常區(qū)域下形狀特異的監(jiān)控指標(biāo),并且能定量地描述這種異常的程度。設(shè)計(jì)Kolmogorov-Smirnov(KS)檢測(cè)方式對(duì)問(wèn)題進(jìn)行解決。KS檢驗(yàn)方式屬于統(tǒng)計(jì)檢驗(yàn),對(duì)兩組數(shù)據(jù)的分布相似情況進(jìn)行比較,優(yōu)點(diǎn)為,其為非參數(shù)檢驗(yàn)方式,與T檢驗(yàn)不同,該檢驗(yàn)手段無(wú)需提前對(duì)數(shù)據(jù)分布進(jìn)行假設(shè),少量點(diǎn)存在偏差,不會(huì)對(duì)結(jié)果造成影響,所以,在大噪音、小樣板數(shù)據(jù)場(chǎng)景中應(yīng)用穩(wěn)定性較高。此方式有效性建立在兩個(gè)假設(shè)之上:第一,異常發(fā)生,特征較為明顯指標(biāo)數(shù)據(jù)分布將出現(xiàn)較大變化;第二,數(shù)據(jù)庫(kù)處于正常運(yùn)行情況時(shí),在一段時(shí)間中指標(biāo)點(diǎn)分布較為穩(wěn)定,滿足未知分布情況。通過(guò)實(shí)踐操作發(fā)現(xiàn),多數(shù)的監(jiān)控指標(biāo)均滿足這兩個(gè)假設(shè),指標(biāo)呈現(xiàn)為線性遞增,采用差分方式與護(hù)理,因?yàn)榭紤]根因的觸發(fā)時(shí)間無(wú)法準(zhǔn)確定位,則指標(biāo)記錄將存在滯后性,僅能夠在特定時(shí)間窗口中對(duì)數(shù)據(jù)進(jìn)行處理,假設(shè)時(shí)間窗口中數(shù)據(jù)分為3段,前2段屬于正常數(shù)據(jù),第3段為異常數(shù)據(jù),系統(tǒng)首先對(duì)前2段數(shù)據(jù)檢驗(yàn),之后對(duì)后2段檢驗(yàn),經(jīng)過(guò)檢驗(yàn),對(duì)結(jié)果差值進(jìn)行統(tǒng)計(jì),作為異常指標(biāo)評(píng)價(jià)依據(jù),當(dāng)數(shù)據(jù)庫(kù)中的異常實(shí)例轉(zhuǎn)變?yōu)楫惓O蛄縑,則向量?jī)?nèi)各維均對(duì)應(yīng)指標(biāo)異常程度,取值范圍設(shè)定為[0,1],倘若數(shù)值接近0,說(shuō)明監(jiān)控指標(biāo)不存在異常。
實(shí)驗(yàn)中需要對(duì)三個(gè)問(wèn)題進(jìn)行驗(yàn)證:AutoMonitor是否對(duì)數(shù)據(jù)庫(kù)運(yùn)行狀態(tài)存在影響;監(jiān)測(cè)模塊是否能夠以較快的速度進(jìn)行部署,達(dá)到高精度監(jiān)測(cè);分析模塊與其他方法相比,準(zhǔn)確率情況。
將兩部配置完全一致的阿里云服務(wù)器為實(shí)驗(yàn)環(huán)境,服務(wù)器性能參數(shù)為:操作系統(tǒng)為Ubuntu16.04 64位;內(nèi)存2G;CPU單核Intel(R)Xeno(R)Platinum 8163 CPU@2.5GHz。Python2.7和Python3.6為解釋器。實(shí)驗(yàn)借助TPC-C為Benchmark,整理數(shù)據(jù)庫(kù)運(yùn)行中常見(jiàn)問(wèn)題根因。如表1所示。
表1 Pos tgre SQL數(shù)據(jù)庫(kù)常見(jiàn)的問(wèn)題根因
在實(shí)驗(yàn)中借助OLTP工具實(shí)現(xiàn)TPC-C基準(zhǔn),應(yīng)用此工具能夠產(chǎn)生不同的請(qǐng)求頻率與不同時(shí)間長(zhǎng)度的TPC-C負(fù)載以及不同規(guī)模表數(shù)據(jù)。因?yàn)樵趯?shí)際環(huán)境中數(shù)據(jù)庫(kù)運(yùn)行狀態(tài)相關(guān)數(shù)據(jù)無(wú)法準(zhǔn)確獲取,上表所述故障案例借助手動(dòng)方式模擬觸發(fā),借助兩部服務(wù)部,一部為用戶,另一部用于數(shù)據(jù)庫(kù)的服務(wù)器。實(shí)驗(yàn)時(shí),用戶啟動(dòng)OLTP執(zhí)行負(fù)載,實(shí)驗(yàn)中啟動(dòng)異常程序生成性能異常,異常結(jié)束后,讓數(shù)據(jù)庫(kù)處于正常狀態(tài)運(yùn)行,之后結(jié)束實(shí)驗(yàn)。在實(shí)驗(yàn)中需要注意的是,對(duì)I/O、CPU瓶頸,實(shí)驗(yàn)中借助開(kāi)源工具搶占I/O、CPU資源。數(shù)據(jù)表的備份、還原,借助數(shù)據(jù)導(dǎo)出和數(shù)據(jù)導(dǎo)入命令進(jìn)行。物理設(shè)計(jì)錯(cuò)誤,開(kāi)銷查詢以及負(fù)載超常實(shí)驗(yàn)中則按照具體情況發(fā)生現(xiàn)象產(chǎn)生。網(wǎng)絡(luò)故障,借助內(nèi)置命令對(duì)流量進(jìn)行控制,通過(guò)手動(dòng)方式減緩?fù)ㄐ潘俣?。鎖競(jìng)爭(zhēng),借助TPC-C部分?jǐn)?shù)據(jù)表在短時(shí)間中進(jìn)行大量訪問(wèn),因?yàn)榭紤]數(shù)據(jù)庫(kù)的訪問(wèn)請(qǐng)求多樣性,當(dāng)各組生成數(shù)據(jù),應(yīng)當(dāng)設(shè)定不同訪問(wèn)頻率。
選取不同請(qǐng)求頻率,因?yàn)閱未螌?shí)驗(yàn)存在不穩(wěn)定性,在不停請(qǐng)求頻率進(jìn)行20組實(shí)驗(yàn)。另外,因?yàn)榭紤]實(shí)驗(yàn)平均數(shù)不穩(wěn)定性,在試驗(yàn)中將分位數(shù)做評(píng)價(jià)指標(biāo)。對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行分析,開(kāi)啟監(jiān)控工具的性能損失比較小,分位數(shù)平均延遲的增加小于5%。分析原因?yàn)椋罕O(jiān)控?cái)?shù)據(jù)的請(qǐng)求頻率是1 s/次,用戶訪問(wèn)數(shù)據(jù)庫(kù)頻率較短,實(shí)踐中,該請(qǐng)求頻率滿足推斷精確程度,倘若按照具體需求降低訪問(wèn)頻率,能夠在此基礎(chǔ)上降低性能損失;收集包括操作系統(tǒng)和數(shù)據(jù)庫(kù),兩者數(shù)據(jù)都將被數(shù)據(jù)庫(kù)、操作系統(tǒng)進(jìn)程生成。即系統(tǒng)沒(méi)有提升數(shù)據(jù)收集開(kāi)銷,開(kāi)銷的增加是源自于訪問(wèn)數(shù)據(jù),I/O、CPU額外增加開(kāi)銷較小。通過(guò)以上分析可以得出,現(xiàn)存數(shù)據(jù)庫(kù)的監(jiān)測(cè)框架為輕量,實(shí)用價(jià)值較高。
該試驗(yàn)是對(duì)數(shù)據(jù)庫(kù)診斷系統(tǒng)監(jiān)測(cè)模塊有效性進(jìn)行驗(yàn)證,選取8 000段長(zhǎng)度32正常時(shí)間的序列作模型訓(xùn)練數(shù)據(jù),神經(jīng)網(wǎng)絡(luò)超參數(shù)見(jiàn)表2。
表2 神經(jīng)網(wǎng)絡(luò)模型超參數(shù)
對(duì)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練結(jié)果、監(jiān)測(cè)模塊的實(shí)驗(yàn)結(jié)果以及算法性能對(duì)比結(jié)果進(jìn)行分析,得出AutoMonitor方式最優(yōu)。首先,復(fù)雜深度的生成模型存在較多參數(shù),倘若沒(méi)有充分調(diào)優(yōu)將難以學(xué)習(xí),導(dǎo)致性能下降。針對(duì)工程類型任務(wù),在選用模型算法時(shí)不可過(guò)于注重精度,還應(yīng)當(dāng)考慮模型訓(xùn)練速度和穩(wěn)定性。
本文實(shí)驗(yàn)內(nèi)容對(duì)監(jiān)測(cè)模塊、推斷模塊應(yīng)用的準(zhǔn)確性進(jìn)行分析,實(shí)驗(yàn)結(jié)果說(shuō)明兩個(gè)模塊局具備較高的準(zhǔn)確性,具有一定應(yīng)用價(jià)值。但是,該系統(tǒng)也存在一定不足,僅適用于PostgreSQL數(shù)據(jù)庫(kù),系統(tǒng)處于離線狀態(tài)時(shí)需要進(jìn)行大量的訓(xùn)練,可嘗試把框架應(yīng)用至MySQL數(shù)據(jù)庫(kù)中,并把框架可以擴(kuò)展至云數(shù)據(jù)庫(kù)中。