張潔 趙玉梅 史哲 張紅杰 張衛(wèi)華 尹龍
摘? 要: 隨著地震勘探精度不斷提高,野外勘探數(shù)據(jù)量逐年增大,GeoEast系統(tǒng)中運(yùn)行的項(xiàng)目數(shù)據(jù)量呈PB級(jí)增長(zhǎng)。Oracle服務(wù)器負(fù)載過(guò)重導(dǎo)致假死和死機(jī)、監(jiān)聽(tīng)服務(wù)異常給GeoEast項(xiàng)目的正常運(yùn)行帶來(lái)了重重困難。針對(duì)上述問(wèn)題,從GeoEast數(shù)據(jù)庫(kù)調(diào)優(yōu)技術(shù)的研究入手,分析造成Oracle負(fù)載重的各項(xiàng)因素,以及對(duì)不同場(chǎng)景下監(jiān)聽(tīng)狀態(tài)的判斷等,歸納出一些數(shù)據(jù)庫(kù)調(diào)優(yōu)技術(shù)和方法,以作參考。
關(guān)鍵詞: GeoEast; Oracle數(shù)據(jù)庫(kù); Oracle監(jiān)聽(tīng); 作業(yè)調(diào)度
中圖分類號(hào):TP311.5? ? ? ? ? 文獻(xiàn)標(biāo)志碼:A? ? ?文章編號(hào):1006-8228(2019)05-12-04
Abstract: With the increasing accuracy of seismic exploration, the amount of field exploration data has increased year by year, and the amount of project data running in the GeoEast system has increased by PB level. Excessive load on the Oracle server leads to suspended animation and crash, and the abnormality of the listening service brings difficulties to the normal operation of the GeoEast project. In order to solve above problems, this paper starts with the research of GeoEast database tuning technology, analyzes the factors that cause the heavy load of Oracle and the judgment of the monitoring state in different scenarios, and summarizes some database tuning techniques and methods for future reference.
Key words: GeoEast; Oracle database; Oracle listener; job scheduling
0 引言
近年來(lái),隨著油氣勘探的不斷深入,油田開(kāi)發(fā)對(duì)地震數(shù)據(jù)的精度要求越來(lái)越高,地震勘探逐步朝著高密度、寬頻帶、全波場(chǎng)方向發(fā)展,地震勘探數(shù)據(jù)量呈幾何級(jí)數(shù)增長(zhǎng)。GeoEast系統(tǒng)作為國(guó)內(nèi)首款由中國(guó)石油集團(tuán)東方地球物理公司自主研發(fā)的大型地震資料處理解釋一體化軟件[1],在廣泛應(yīng)用于海量地震數(shù)據(jù)處理的同時(shí),也面臨著一些挑戰(zhàn)。在GeoEast系統(tǒng)中,Oracle數(shù)據(jù)庫(kù)起著至關(guān)重要的作用。其數(shù)據(jù)庫(kù)保存了所有項(xiàng)目、工區(qū)的信息,以及需要進(jìn)行大量計(jì)算的近地表信息。在GeoEast軟件中,幾乎所有的操作都要通過(guò)數(shù)據(jù)庫(kù)來(lái)進(jìn)行。一旦數(shù)據(jù)庫(kù)中有大量運(yùn)算產(chǎn)生,就會(huì)使數(shù)據(jù)庫(kù)節(jié)點(diǎn)發(fā)生堵塞甚至假死,造成整套GeoEast系統(tǒng)停滯或者無(wú)法使用。如果數(shù)據(jù)庫(kù)因異常中斷或服務(wù)器死機(jī)等原因而發(fā)生損壞,將會(huì)對(duì)項(xiàng)目造成致命的后果。為了提高GeoEast系統(tǒng)運(yùn)行效率,需要結(jié)合生產(chǎn)現(xiàn)狀對(duì)數(shù)據(jù)庫(kù)調(diào)優(yōu)技術(shù)進(jìn)行分析與研究,以滿足GeoEast海量數(shù)據(jù)處理的需求。
1 GeoEast數(shù)據(jù)庫(kù)負(fù)載的自動(dòng)控制
目前一套數(shù)據(jù)庫(kù)服務(wù)器上往往有多個(gè)GeoEast項(xiàng)目同時(shí)運(yùn)行,生產(chǎn)項(xiàng)目所使用的集群計(jì)算節(jié)點(diǎn)數(shù)量多達(dá)上百臺(tái),項(xiàng)目總數(shù)據(jù)量呈PB級(jí),同時(shí)運(yùn)行的作業(yè)數(shù)量成百上千[2],這些都給數(shù)據(jù)庫(kù)服務(wù)器的運(yùn)行帶來(lái)了巨大的壓力。針對(duì)這些問(wèn)題做了大量的研究與測(cè)試,并提出了一定的優(yōu)化技術(shù)解決方案。
1.1 存在的問(wèn)題
在GeoEast使用中,數(shù)據(jù)庫(kù)服務(wù)器往往出現(xiàn)CPU負(fù)載大、內(nèi)存消耗大、數(shù)據(jù)庫(kù)連接進(jìn)程多等現(xiàn)象,產(chǎn)生這種現(xiàn)象的根本原因是由于系統(tǒng)中同時(shí)有大量的作業(yè)在運(yùn)行,服務(wù)器負(fù)載過(guò)重,造成系統(tǒng)反應(yīng)慢甚至服務(wù)器死機(jī)[3]。情況嚴(yán)重的話會(huì)導(dǎo)致整套集群所有計(jì)算節(jié)點(diǎn)全部空轉(zhuǎn)、GeoEast軟件無(wú)法進(jìn)行交互操作、所有作業(yè)全部停滯無(wú)法運(yùn)行等后果。
1.2 負(fù)載控制解決方案
1.2.1 GeoEast數(shù)據(jù)庫(kù)負(fù)載影響因素分析及閾值設(shè)置
通過(guò)對(duì)影響GeoEast數(shù)據(jù)庫(kù)負(fù)載的因素進(jìn)行大量的測(cè)試與分析,歸納總結(jié)出四種與數(shù)據(jù)庫(kù)服務(wù)器負(fù)載緊密相關(guān)的主要因素:數(shù)據(jù)庫(kù)進(jìn)程數(shù)、系統(tǒng)負(fù)載、CPU利用率以及內(nèi)存利用率。對(duì)各項(xiàng)因素設(shè)置高低閾值范圍。
⑴ Oracle進(jìn)程數(shù):數(shù)據(jù)庫(kù)相關(guān)進(jìn)程總數(shù)。GeoEast系統(tǒng)在作業(yè)多、數(shù)據(jù)量大的情況下會(huì)與數(shù)據(jù)庫(kù)之間頻繁地進(jìn)行通訊,產(chǎn)生多個(gè)訪問(wèn)oracle數(shù)據(jù)庫(kù)的進(jìn)程。如果數(shù)據(jù)庫(kù)進(jìn)程數(shù)過(guò)多,則會(huì)對(duì)軟件、oracle服務(wù)器產(chǎn)生巨大的壓力。結(jié)合GeoEast大數(shù)據(jù)的處理現(xiàn)狀,經(jīng)過(guò)反復(fù)的測(cè)試和運(yùn)用,在滿足生產(chǎn)和機(jī)器性能的條件下建議將該因素低閾值設(shè)置為13500,高閾值設(shè)置為14000。
⑵ 系統(tǒng)負(fù)載:系統(tǒng)CPU繁忙程度的度量,即一段時(shí)間內(nèi)CPU正在處理以及等待CPU處理的進(jìn)程數(shù)之和的統(tǒng)計(jì)信息。若服務(wù)器核心數(shù)為N,則建議將負(fù)載指標(biāo)低閾值設(shè)置為N,高閾值設(shè)置為N+2。該指標(biāo)可根據(jù)設(shè)備實(shí)際配置和作業(yè)運(yùn)行情況進(jìn)行調(diào)整[4]。
⑶ CPU利用率:程序在運(yùn)行期間實(shí)時(shí)占用的CPU百分比。建議將GeoEast數(shù)據(jù)庫(kù)服務(wù)器CPU利用率低閾值設(shè)定為70%,高閾值設(shè)定為80%,超過(guò)高閾值后系統(tǒng)響應(yīng)變慢,整體性能有明顯下降。
⑷ 內(nèi)存利用率:進(jìn)程實(shí)際所開(kāi)銷的內(nèi)存百分比。當(dāng)軟件與數(shù)據(jù)庫(kù)之間的通訊進(jìn)程較多時(shí),會(huì)出現(xiàn)內(nèi)存被耗盡而去調(diào)用swap交互區(qū)的情況,從而直接影響到軟件系統(tǒng)的整體性能,無(wú)論是作業(yè)的速度還是軟件的交互效率,都會(huì)受到嚴(yán)重的影響。建議設(shè)置內(nèi)存利用率低閾值80%,高閾值90%。
1.2.2 GeoEast作業(yè)調(diào)度機(jī)制
GeoEast系統(tǒng)中作業(yè)的調(diào)度與分發(fā)是通過(guò)GJSF(GeoEast Job Scheduling Facility)系統(tǒng)實(shí)現(xiàn)的。作業(yè)調(diào)度主控程序jsfserver負(fù)責(zé)監(jiān)聽(tīng)各個(gè)計(jì)算節(jié)點(diǎn)的資源連接請(qǐng)求,同時(shí)負(fù)責(zé)與各節(jié)點(diǎn)控制程序和各控制臺(tái)程序進(jìn)行通信,完成作業(yè)/節(jié)點(diǎn)的管控、管理命令的執(zhí)行,以及各種事件的派發(fā)等。計(jì)算節(jié)點(diǎn)控制程序nodectrl負(fù)責(zé)收集本節(jié)點(diǎn)以及本節(jié)點(diǎn)上所有活躍作業(yè)的資源使用狀況,監(jiān)控各作業(yè)的運(yùn)行狀態(tài),收集各作業(yè)的標(biāo)準(zhǔn)輸出,并以報(bào)告的形式發(fā)送給調(diào)度服務(wù)器;負(fù)責(zé)執(zhí)行調(diào)度服務(wù)器發(fā)送的各種系統(tǒng)管理命令和作業(yè)管理命令;負(fù)責(zé)與協(xié)同式作業(yè)進(jìn)行通信,完成相關(guān)消息的接收、轉(zhuǎn)發(fā)和處理[5]。如果可以根據(jù)數(shù)據(jù)庫(kù)服務(wù)器實(shí)時(shí)的運(yùn)行狀況動(dòng)態(tài)地控制系統(tǒng)中的作業(yè)調(diào)度,在數(shù)據(jù)庫(kù)負(fù)載高的時(shí)候?qū)⒄{(diào)度中新分配的作業(yè)狀態(tài)轉(zhuǎn)為queue排隊(duì)等待狀態(tài),在數(shù)據(jù)庫(kù)負(fù)載降低的時(shí)候?qū)⑴抨?duì)的作業(yè)恢復(fù)成active正常運(yùn)行狀態(tài),可有效降低因作業(yè)數(shù)量過(guò)多而可能造成的服務(wù)器死機(jī)的風(fēng)險(xiǎn)。
1.2.3 通過(guò)作業(yè)調(diào)度控制數(shù)據(jù)庫(kù)負(fù)載
根據(jù)上面總結(jié)的四種與數(shù)據(jù)庫(kù)負(fù)載相關(guān)的主要因素,通過(guò)程序的編寫,對(duì)各項(xiàng)指標(biāo)設(shè)置高低閾值,從而動(dòng)態(tài)控制服務(wù)器上的作業(yè)調(diào)度,實(shí)現(xiàn)數(shù)據(jù)庫(kù)負(fù)載的自動(dòng)調(diào)節(jié)(圖1)。
每個(gè)因素指標(biāo)都有高、低兩個(gè)閾值,當(dāng)任意一項(xiàng)指標(biāo)達(dá)到高閾值時(shí),服務(wù)器會(huì)掛起GJSF作業(yè)調(diào)度;當(dāng)所有指標(biāo)回落到低閾值以下時(shí),服務(wù)器自動(dòng)恢復(fù)GJSF作業(yè)調(diào)度。通過(guò)控制作業(yè)數(shù)量避免數(shù)據(jù)庫(kù)服務(wù)器超負(fù)荷運(yùn)行,從而保證整套GeoEast系統(tǒng)正常運(yùn)行。
1.2.4 過(guò)期進(jìn)程清理
GeoEast一些過(guò)期卻沒(méi)有正常退出的進(jìn)程往往占用了大量的數(shù)據(jù)庫(kù)進(jìn)程,如圖2中,一個(gè)打開(kāi)超過(guò)半個(gè)月的交互界面沒(méi)有正常退出占用了312個(gè)數(shù)據(jù)庫(kù)連接數(shù)。這一類型的過(guò)期進(jìn)程如果在系統(tǒng)中大量存在也會(huì)造成數(shù)據(jù)庫(kù)進(jìn)程過(guò)多導(dǎo)致數(shù)據(jù)庫(kù)服務(wù)器性能下降。
針對(duì)這一類情況,通過(guò)編程實(shí)現(xiàn)每天固定時(shí)間自動(dòng)查殺超過(guò)7天的sjob、thjob等作業(yè)和GeoSeismicView、jobeditor、GeoJobConsole等進(jìn)程,釋放一些不需要的數(shù)據(jù)庫(kù)進(jìn)程。
1.3 應(yīng)用效果
通過(guò)負(fù)載自動(dòng)調(diào)節(jié)技術(shù),數(shù)據(jù)庫(kù)服務(wù)器假死或死機(jī)的頻率大幅降低,對(duì)數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行監(jiān)控可以看到,調(diào)優(yōu)前數(shù)據(jù)庫(kù)服務(wù)器CPU的系統(tǒng)開(kāi)銷極大,而用戶實(shí)際開(kāi)銷很小,內(nèi)存損耗大,swap分區(qū)占用率高,整個(gè)系統(tǒng)響應(yīng)速度緩慢。而調(diào)優(yōu)后各項(xiàng)數(shù)值都明顯下降,數(shù)據(jù)庫(kù)服務(wù)器死機(jī)風(fēng)險(xiǎn)大大降低,系統(tǒng)的運(yùn)行效率提高,達(dá)到了滿意的效果(圖3)。
2 GeoEast數(shù)據(jù)庫(kù)監(jiān)聽(tīng)進(jìn)程的自動(dòng)控制
2.1 研究背景
2.1.1 數(shù)據(jù)庫(kù)監(jiān)聽(tīng)的作用
數(shù)據(jù)庫(kù)監(jiān)聽(tīng)進(jìn)程用于監(jiān)聽(tīng)所有來(lái)自客戶端的連接請(qǐng)求,并提供處理數(shù)據(jù)庫(kù)服務(wù)方面的請(qǐng)求。該進(jìn)程負(fù)責(zé)監(jiān)聽(tīng)用戶的連接請(qǐng)求,每當(dāng)收到一個(gè)用戶請(qǐng)求,監(jiān)聽(tīng)器進(jìn)程就會(huì)創(chuàng)建一個(gè)影子進(jìn)程,然后把用戶請(qǐng)求轉(zhuǎn)交給這個(gè)影子進(jìn)程,由影子進(jìn)程繼續(xù)完成用戶提交的各種命令。一旦監(jiān)聽(tīng)進(jìn)程把用戶轉(zhuǎn)交給影子進(jìn)程,監(jiān)聽(tīng)進(jìn)程的任務(wù)就算完成了,會(huì)繼續(xù)去監(jiān)聽(tīng)下一個(gè)用戶請(qǐng)求。
2.1.2 數(shù)據(jù)庫(kù)監(jiān)聽(tīng)故障的影響
在GeoEast系統(tǒng)中,數(shù)據(jù)庫(kù)監(jiān)聽(tīng)一旦出現(xiàn)故障,會(huì)導(dǎo)致作業(yè)與數(shù)據(jù)庫(kù)連接異常、用戶打不開(kāi)文件及應(yīng)用模塊、GeoEast作業(yè)出錯(cuò)、已打開(kāi)的geoeast主控?zé)o響應(yīng)等情況,導(dǎo)致整套軟件無(wú)法正常運(yùn)行[6]。
2.2 監(jiān)聽(tīng)自動(dòng)控制的實(shí)現(xiàn)
2.2.1 監(jiān)聽(tīng)狀態(tài)四種場(chǎng)景
根據(jù)監(jiān)聽(tīng)服務(wù)的運(yùn)行狀態(tài)、監(jiān)聽(tīng)進(jìn)程個(gè)數(shù)的判斷可以將數(shù)據(jù)庫(kù)的監(jiān)聽(tīng)狀況大致分為以下四種場(chǎng)景:
⑴ 監(jiān)聽(tīng)服務(wù)運(yùn)行正常,監(jiān)聽(tīng)進(jìn)程個(gè)數(shù)異常;
⑵ 監(jiān)聽(tīng)服務(wù)運(yùn)行異常,監(jiān)聽(tīng)進(jìn)程個(gè)數(shù)正常;
⑶ 監(jiān)聽(tīng)服務(wù)運(yùn)行異常,監(jiān)聽(tīng)進(jìn)程個(gè)數(shù)異常;
⑷ 沒(méi)有檢測(cè)到監(jiān)聽(tīng)服務(wù)。
四種場(chǎng)景下監(jiān)聽(tīng)的狀態(tài)各不相同,需要針對(duì)實(shí)際情況進(jìn)行監(jiān)聽(tīng)的動(dòng)態(tài)控制。
2.2.2 監(jiān)聽(tīng)服務(wù)狀態(tài)判定
通過(guò)程序的編寫,對(duì)數(shù)據(jù)庫(kù)監(jiān)聽(tīng)服務(wù)狀態(tài)是否正常進(jìn)行檢查,再對(duì)監(jiān)聽(tīng)數(shù)量進(jìn)行檢查(見(jiàn)圖4),根據(jù)不同場(chǎng)景選擇是否啟動(dòng)、停止、重啟監(jiān)聽(tīng)服務(wù),并生成監(jiān)聽(tīng)檢查日志。
2.3 應(yīng)用效果
通過(guò)對(duì)監(jiān)聽(tīng)服務(wù)自動(dòng)控制,可以實(shí)現(xiàn)不同狀態(tài)下監(jiān)聽(tīng)服務(wù)的保護(hù)。
應(yīng)用1:監(jiān)聽(tīng)狀態(tài)正常,但監(jiān)聽(tīng)進(jìn)程個(gè)數(shù)異常,自動(dòng)殺掉多余的監(jiān)聽(tīng)進(jìn)程。
應(yīng)用2:監(jiān)聽(tīng)狀態(tài)異常,但監(jiān)聽(tīng)進(jìn)程個(gè)數(shù)正常,自動(dòng)重啟監(jiān)聽(tīng)進(jìn)程。
應(yīng)用3:監(jiān)聽(tīng)狀態(tài)異常,且監(jiān)聽(tīng)進(jìn)程個(gè)數(shù)也異常,自動(dòng)重啟監(jiān)聽(tīng)進(jìn)程,并殺掉多余的監(jiān)聽(tīng)進(jìn)程。
應(yīng)用4:當(dāng)沒(méi)有檢測(cè)到監(jiān)聽(tīng)進(jìn)程時(shí),自動(dòng)啟動(dòng)監(jiān)聽(tīng)進(jìn)程。
3 結(jié)束語(yǔ)
隨著地震資料兩寬一高處理技術(shù)的不斷進(jìn)步和野外原始數(shù)據(jù)量的不斷增大,隨之而來(lái)的海量數(shù)據(jù)給數(shù)據(jù)庫(kù)服務(wù)器帶來(lái)的各種挑戰(zhàn)和影響一直是GeoEast系統(tǒng)運(yùn)維工作的一個(gè)難點(diǎn)。本文經(jīng)過(guò)不斷的摸索與研究,通過(guò)閾值檢測(cè)控制作業(yè)調(diào)度的方法實(shí)現(xiàn)了GeoEast數(shù)據(jù)庫(kù)負(fù)載的自動(dòng)控制,通過(guò)不同場(chǎng)景下監(jiān)聽(tīng)狀態(tài)與個(gè)數(shù)的掃描,實(shí)現(xiàn)了數(shù)據(jù)庫(kù)監(jiān)聽(tīng)進(jìn)程的自動(dòng)控制,大大降低了GeoEast數(shù)據(jù)庫(kù)故障率,提高了數(shù)據(jù)庫(kù)的運(yùn)行效率。該技術(shù)適用于所有的GeoEast數(shù)據(jù)庫(kù)服務(wù)器,具有良好的推廣應(yīng)用前景。此外,在GeoEast數(shù)據(jù)庫(kù)參數(shù)調(diào)優(yōu)方面還存在提升空間,有待于我們結(jié)合實(shí)際生產(chǎn)進(jìn)一步探索與研究。
參考文獻(xiàn)(References):
[1] 徐少波,白雪蓮,曾強(qiáng),林茂春,黃燕,潘煥革.GeoEast地震數(shù)據(jù)處理解釋一體化軟件系統(tǒng)[J].石油工業(yè)計(jì)算機(jī)應(yīng)用,2016.3(24):6-P11
[2] 尹龍,張衛(wèi)華,程實(shí),郭冶,梁妍,牛犇.大規(guī)模計(jì)算機(jī)集群在地震勘探資料處理中的應(yīng)用探討[J].計(jì)算機(jī)時(shí)代,2016.8:1-P3
[3] 龔莉,趙玉梅,張紅杰,鄭玉霞,劉宗祥.GeoEast海量數(shù)據(jù)處理資源優(yōu)化配置技術(shù)研究與應(yīng)用[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2014.6:101-103
[4] 陳繼紅,趙書(shū)華,祝寬海,王仕檢.優(yōu)化系統(tǒng)配置提高GeoEast系統(tǒng)運(yùn)行效率[J].物探裝備,2010.4(20):219-222
[5] 羅剛,陳繼紅,孫孝萍,周坤,杜吉國(guó).大規(guī)模異構(gòu)集群地震作業(yè)調(diào)度與資源管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].石油地球物理勘探,2017.52:200-206
[6] 劉峰.Linux下Oracle集群常見(jiàn)問(wèn)題及解決策略[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2012.6:38-39