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