作者介紹
白鱔(徐戟):南京基石數(shù)據(jù)技術(shù)有限責(zé)任公司技術(shù)總監(jiān),南瑞子衿技術(shù)團(tuán)隊(duì)首席架構(gòu)師。曾供職于DEC、長(zhǎng)天集團(tuán)、聯(lián)想集團(tuán)等。在軟件開(kāi)發(fā)、系統(tǒng)運(yùn)維、系統(tǒng)優(yōu)化、信息系統(tǒng)國(guó)產(chǎn)化替代等領(lǐng)域從事技術(shù)工作30年多,參與了運(yùn)營(yíng)商、金融、政府、能源等行業(yè)的信息化建設(shè)。著有《OracleRAC日記》《OracleDBA優(yōu)化日記》和《DBA的思想天空》等技術(shù)專著。深圳市信創(chuàng)產(chǎn)業(yè)聯(lián)盟高級(jí)顧問(wèn),OracleACE,POSTGRESQLACEDIRECTOR。
以下為正文:
和人大金倉(cāng)數(shù)據(jù)庫(kù)的第一次接觸是2014年某省的省調(diào)要把Oracle數(shù)據(jù)庫(kù)去掉,換成人大金倉(cāng)數(shù)據(jù)庫(kù)。當(dāng)時(shí)省調(diào)自動(dòng)化處的處長(zhǎng)十分憂慮,認(rèn)為調(diào)度這么復(fù)雜并且關(guān)鍵的系統(tǒng),用Oracle還算比較省心,換了國(guó)產(chǎn)數(shù)據(jù)庫(kù),會(huì)不會(huì)今后都沒(méi)有好日子過(guò)了。2016年,全國(guó)產(chǎn)方案的調(diào)控云在他那兒成功上線,這也確實(shí)讓我這個(gè)OracleDBA感到有些意外。在此期間,我們的優(yōu)化團(tuán)隊(duì)也參與了一些基于金倉(cāng)數(shù)據(jù)庫(kù)的優(yōu)化工作,第一次接觸了這個(gè)國(guó)產(chǎn)數(shù)據(jù)庫(kù)。說(shuō)實(shí)在的,這次優(yōu)化雖然按用戶的需求完成了任務(wù),不過(guò)也讓我們感到了國(guó)產(chǎn)數(shù)據(jù)庫(kù)與Oracle的技術(shù)差距。因?yàn)槲覀儓F(tuán)隊(duì)缺乏對(duì)金倉(cāng)數(shù)據(jù)庫(kù)的了解,并且當(dāng)時(shí)能夠獲得的文檔也十分有限,而人大金倉(cāng)數(shù)據(jù)庫(kù)能夠?qū)ν馓峁┑目捎^測(cè)性接口也十分有限,也沒(méi)有我們?cè)贠racle數(shù)據(jù)庫(kù)上習(xí)慣使用的AWR報(bào)告,ASH報(bào)告,等待事件分析等功能。因此我們不知道如何去更好的調(diào)優(yōu)金倉(cāng)數(shù)據(jù)庫(kù),使之與用戶的應(yīng)用更為融合,優(yōu)化主要集中在和開(kāi)發(fā)商一起對(duì)慢SQL的優(yōu)化上,對(duì)于其他的問(wèn)題,我們是無(wú)能為力的。
轉(zhuǎn)眼六、七年過(guò)去了,在此期間也或多或少的和金倉(cāng)數(shù)據(jù)庫(kù)打交道,不過(guò)并不深入,干的主要的活還是和開(kāi)發(fā)商一起優(yōu)化SQL。隨著信創(chuàng)工作的開(kāi)展,有不少客戶都選擇了金倉(cāng)數(shù)據(jù)庫(kù)替代Oracle,于是針對(duì)金倉(cāng)的運(yùn)維與運(yùn)維工具的需求多了起來(lái),因此我們的數(shù)據(jù)庫(kù)運(yùn)維工具D-SMART與金倉(cāng)KES的對(duì)接也日益急迫。
作為一款深度運(yùn)維工具,D-SMART要覆蓋健康監(jiān)控、故障預(yù)警、問(wèn)題診斷、定期巡檢、專項(xiàng)審計(jì)等諸多自動(dòng)化運(yùn)維功能,想要在KES完成這些自動(dòng)化工具,KES本身能夠提供的可觀測(cè)性接口就十分關(guān)鍵。有些國(guó)產(chǎn)、開(kāi)源數(shù)據(jù)庫(kù)因?yàn)榭捎^測(cè)性接口過(guò)于簡(jiǎn)單,導(dǎo)致D-SMART對(duì)其的支持能力很難提升。
再次和人大金倉(cāng)結(jié)緣,KES的版本已經(jīng)是V8了,令人高興的是,KES的官方文檔比起六、七年前有了較大的提升。豐富的文檔為我們梳理KES的運(yùn)維知識(shí)提供了很大的便利,我和幾個(gè)KES的老用戶交流的時(shí)候,他們也覺(jué)得V8版本在文檔上的提高還是挺大的,這些文檔對(duì)他們?nèi)粘_\(yùn)維也很有幫助。
在可觀測(cè)性方面,KESV8也有了很大的提升。這一點(diǎn)我們可以從KWR報(bào)告的內(nèi)容上看得出來(lái)。KWR是模仿OracleAWR的一個(gè)性能分析報(bào)告。AWR是DBA運(yùn)維Oracle數(shù)據(jù)庫(kù)不可或缺的工具,因此很多國(guó)產(chǎn)數(shù)據(jù)庫(kù)也都提供類似AWR的功能,也有一些朋友為MYSQL/PG等開(kāi)源數(shù)據(jù)庫(kù)也提供了類似的報(bào)告。只不過(guò)這些報(bào)告大多數(shù)是照貓畫虎,只學(xué)了OracleAWR的形,而沒(méi)有得到AWR的神。數(shù)據(jù)不夠豐富與有效導(dǎo)致了這些類AWR報(bào)告實(shí)際上對(duì)運(yùn)維的作用有限。
KWR報(bào)告的基本內(nèi)容還是全面致敬OracleAWR報(bào)告的,負(fù)載文件、重要百分比、操作系統(tǒng)、IO,時(shí)間模型、TOPSQL、數(shù)據(jù)庫(kù)狀態(tài)統(tǒng)計(jì)等一應(yīng)俱全。不過(guò)大多數(shù)國(guó)產(chǎn)數(shù)據(jù)庫(kù)的類AWR報(bào)告也包含這些內(nèi)容。我們還需要進(jìn)一步觀察其實(shí)際內(nèi)容。
從TOPWAITEVENTS上我們看到了最想看到的AVGTimes指標(biāo),在很多國(guó)產(chǎn)數(shù)據(jù)庫(kù)上我們也能看到等待事件,但是我們僅能看到等待事件的次數(shù)統(tǒng)計(jì),無(wú)法了解到等待事件的等待時(shí)長(zhǎng)信息。等待次數(shù)只能讓我們感受到數(shù)據(jù)庫(kù)的并發(fā)方面的等待,并不能告訴我們哪些等待事件存在問(wèn)題。比如說(shuō)WALWriteLock等待,我們知道在報(bào)告期間一共產(chǎn)生了98103次,但是如果僅僅知道等待次數(shù),我們是無(wú)法確定WAL寫入是否存在性能問(wèn)題的。但是如果我們看到了平均等待時(shí)間是20.94毫秒,那么我們基本上可以確定當(dāng)前系統(tǒng)肯定是存在問(wèn)題了。
發(fā)現(xiàn)了日志寫存在問(wèn)題,那么我們就可以從HostIO這一章節(jié)去做進(jìn)一步分析了,在這里我們明顯看出了寫IO延時(shí)存在問(wèn)題,要遠(yuǎn)遠(yuǎn)高于讀IO的延時(shí)。在數(shù)據(jù)庫(kù)的可觀測(cè)性接口上能夠提供等待時(shí)長(zhǎng),是DBA最希望的。除此之外,KESV8還提供了一個(gè)類似于OracleASH的KSH,將sys_stat_activity中的采樣定期刷新到數(shù)據(jù)表中。這對(duì)于DBA分析故障,定位性能問(wèn)題提供了很有效的能力。
KESV8的等待事件等待時(shí)長(zhǎng)是采集到sys_stat_sqlwait系統(tǒng)視圖中的。其采集粒度細(xì)化到queryid,我們可以根據(jù)userid,datid,queryid,wait_event等粒度來(lái)進(jìn)行匯總分析。同時(shí)可以通過(guò)bgwait標(biāo)識(shí)位來(lái)排除后臺(tái)進(jìn)程產(chǎn)生的等待。通過(guò)統(tǒng)計(jì)數(shù)據(jù)CALLS/TIMES這對(duì)組合可以計(jì)算平均等待時(shí)間。這種設(shè)計(jì)雖然在采集與存儲(chǔ)這些數(shù)據(jù)上會(huì)消耗一些性能,但是對(duì)于大多數(shù)應(yīng)用場(chǎng)景來(lái)說(shuō),影響并不大,與這些數(shù)據(jù)帶來(lái)的運(yùn)維方面的能力提升相比,這點(diǎn)性能損耗完全能夠接受。當(dāng)然在一些高并發(fā),低延時(shí)SQL為主,對(duì)響應(yīng)時(shí)間有嚴(yán)格要求的場(chǎng)景,這方面的性能損失可能無(wú)法接受,可以通過(guò)參數(shù)關(guān)閉這方面的數(shù)據(jù)采集。
我們可以通過(guò)匯總這張表的數(shù)據(jù)獲得等待事件的平均等待時(shí)間,也可以按照QUERYID來(lái)統(tǒng)計(jì)該數(shù)據(jù),從而發(fā)現(xiàn)不同SQL語(yǔ)句的buffer_content方面的差異。
這些SQL產(chǎn)生的熱塊沖突明顯是比較嚴(yán)重的,我們可以加以關(guān)注。
這幾個(gè)數(shù)據(jù)庫(kù)的數(shù)據(jù)文件讀的平均等待時(shí)間明顯存在差異,這也是我們今后可以深入分析的數(shù)據(jù)。如果我們定期采樣這個(gè)視圖,并在監(jiān)控系統(tǒng)中保存起來(lái),今后我們就可以通過(guò)兩個(gè)采樣點(diǎn)之間的DELTA值計(jì)算某個(gè)時(shí)間段內(nèi)的等待事件的平均等待時(shí)間。在KWR的采樣數(shù)據(jù)中,就已經(jīng)保存了這些數(shù)據(jù)。如果我們?cè)O(shè)置了定期采樣KWR,就可以通過(guò)這些數(shù)據(jù)來(lái)做較為粗略的分析。如果你開(kāi)啟了KWR功能,并且做了定期采樣,那么數(shù)據(jù)將會(huì)被保存在perf.kwr_snap_sql_wait表中。
KESV8提供的SYS_STAT_SQLWAIT給運(yùn)維人員提供了十分有價(jià)值的數(shù)據(jù),可以用于對(duì)數(shù)據(jù)庫(kù)、SQL以及整體性能提供強(qiáng)大的分析能力。利用KESV8提供的可觀測(cè)性接口,D-SMART構(gòu)建了數(shù)據(jù)庫(kù)運(yùn)行質(zhì)量監(jiān)控方面的基礎(chǔ)能力。
在健康模型中,我們能夠針對(duì)KES數(shù)據(jù)庫(kù)構(gòu)建類似Oracle數(shù)據(jù)庫(kù)一樣的數(shù)據(jù)庫(kù)IO相關(guān)的指標(biāo)模型。
在健康模型中,我們能夠針對(duì)KES數(shù)據(jù)庫(kù)構(gòu)建類似Oracle數(shù)據(jù)庫(kù)一樣的數(shù)據(jù)庫(kù)IO相關(guān)的指標(biāo)模型。
我們不僅能夠了解數(shù)據(jù)庫(kù)的IO負(fù)載情況,也能了解數(shù)據(jù)庫(kù)的IO質(zhì)量,從而更為準(zhǔn)確的掌握數(shù)據(jù)庫(kù)的狀態(tài),找到數(shù)據(jù)庫(kù)運(yùn)行中的短板。
數(shù)據(jù)庫(kù)等待事件分析工具也因?yàn)橛辛似骄却龝r(shí)間而可以更為準(zhǔn)確的定位數(shù)據(jù)庫(kù)中等待事件存在的問(wèn)題,從而為DBA支持問(wèn)題定位的方向。
利用專門為KES等待事件構(gòu)建的運(yùn)維知識(shí)圖譜,智能分析算法可以很準(zhǔn)確的定位到,當(dāng)前數(shù)據(jù)庫(kù)存在的主要問(wèn)題集中在并發(fā)上,次要問(wèn)題集中在IO性能上。
在構(gòu)建KES運(yùn)維知識(shí)圖譜的時(shí)候,我們除了利用了以往運(yùn)維與優(yōu)化KES的知識(shí)積累外,最重要的依據(jù)就是人大金倉(cāng)官方提供的各種手冊(cè)。只有少數(shù)幾個(gè)可觀測(cè)性接口是通過(guò)咨詢金倉(cāng)的售后服務(wù)人員后才搞明白的。從一點(diǎn)上可以看出目前金倉(cāng)KES的文檔資料還是相對(duì)豐富的。在文檔方面,金倉(cāng)數(shù)據(jù)庫(kù)雖然與Oracle數(shù)據(jù)庫(kù)還有一定的差距,不過(guò)在國(guó)產(chǎn)數(shù)據(jù)庫(kù)中已經(jīng)處于中上水平。
對(duì)比這些年與金倉(cāng)KES的兩次深度接觸,也感受到了國(guó)產(chǎn)數(shù)據(jù)庫(kù)在不斷的進(jìn)步。國(guó)產(chǎn)數(shù)據(jù)庫(kù)雖然想要趕超Oracle還比較困難,但是我們的國(guó)產(chǎn)數(shù)據(jù)庫(kù)的不斷成長(zhǎng),對(duì)于企業(yè)的大部分應(yīng)用場(chǎng)景的支持與覆蓋已經(jīng)不成問(wèn)題。我們必須給國(guó)產(chǎn)數(shù)據(jù)庫(kù)足夠的理解與支持,他們才能夠在我們的應(yīng)用需求的推動(dòng)下,慢慢的從不好用變得能用,再變得好用,國(guó)產(chǎn)數(shù)據(jù)庫(kù)的成長(zhǎng)離不開(kāi)廣大用戶的理解與支持。
免責(zé)聲明:以上內(nèi)容為本網(wǎng)站轉(zhuǎn)自其它媒體,相關(guān)信息僅為傳遞更多信息之目的,不代表本網(wǎng)觀點(diǎn),亦不代表本網(wǎng)站贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性。如稿件版權(quán)單位或個(gè)人不想在本網(wǎng)發(fā)布,可與本網(wǎng)聯(lián)系,本網(wǎng)視情況可立即將其撤除。