《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 業(yè)界動(dòng)態(tài) > 油田開發(fā)數(shù)據(jù)的優(yōu)化管理

油田開發(fā)數(shù)據(jù)的優(yōu)化管理

2008-08-19
作者:牟 菁

  摘 要:介紹了數(shù)據(jù)庫查詢速度緩慢的常規(guī)解決方法及其主要缺點(diǎn),提出利用Oracle分區(qū)功能解決問題,并結(jié)合油田開發(fā)數(shù)據(jù)庫現(xiàn)狀,詳細(xì)描述了分區(qū)的具體實(shí)現(xiàn)方法。結(jié)合使用情況,總結(jié)實(shí)施效果,對(duì)大數(shù)據(jù)量表的維護(hù)和優(yōu)化有一定的參考價(jià)值。
  關(guān)鍵詞: Oracle數(shù)據(jù)庫 分區(qū)Partition 表空間" title="表空間">表空間Tablespace 數(shù)據(jù)文件" title="數(shù)據(jù)文件">數(shù)據(jù)文件Datafile


  伴隨著信息高速公路的飛速建設(shè),油田的各項(xiàng)勘探開發(fā)數(shù)據(jù)都做到了及時(shí)準(zhǔn)確入庫,數(shù)據(jù)庫中數(shù)據(jù)量日益增加。以其下屬的某個(gè)采油廠為例,數(shù)據(jù)量已達(dá)到2GB,各種數(shù)據(jù)庫表更是多達(dá)1千多個(gè)。與此同時(shí),又產(chǎn)生了一個(gè)新問題,那就是雖然各種生產(chǎn)數(shù)據(jù)都已入庫,但是由于數(shù)據(jù)量巨大,造成查詢速度非常緩慢。
  本文以油井日度數(shù)據(jù)表(dba01)為例進(jìn)行說明。該表是最基礎(chǔ)的開發(fā)數(shù)據(jù),每天每一口井都有記錄進(jìn)入到數(shù)據(jù)庫中。油田規(guī)定,該數(shù)據(jù)15個(gè)月內(nèi)必須保存在線,15個(gè)月下來這個(gè)表就有997890條記錄。
  這接近100萬條的記錄大大增加系統(tǒng)開銷,在用戶提交查詢后,經(jīng)常需要等待五六分鐘才能得到結(jié)果,有時(shí)甚至查不出數(shù)據(jù),給用戶的感覺是仿佛處于“死機(jī)”狀態(tài)。
1 常規(guī)解決辦法
  解決大表查詢速度緩慢的問題,最初的對(duì)策是在后臺(tái)創(chuàng)建很多中間表。
  例如:要得到采油廠生產(chǎn)日數(shù)據(jù)匯總情況,了解全廠每天的油井開井?dāng)?shù)、水井開井?dāng)?shù)、日產(chǎn)油量、注采比等重要數(shù)據(jù),其缺點(diǎn)主要有兩個(gè):
  (1)中間表的建立會(huì)占用大量表空間,即查詢速度的提高是以犧牲服務(wù)器空間為代價(jià),造成了巨大的資源浪費(fèi);
  (2)隨著各種應(yīng)用的不斷開展,中間表的數(shù)量也越來越多,這就人為加大了數(shù)據(jù)管理和維護(hù)的工作量。
  因此,要從根本上解決大表存在的查詢速度緩慢的問題,必須找到更為有效的方法。
2 采用分區(qū)功能解決問題
  (1) 分區(qū)的定義
  分區(qū)將表分離在若干不同的表空間上,將大的表和索引拆分成小的易于管理的數(shù)據(jù)片段,分而治之支撐無限膨脹的大表,給大表物理一級(jí)的可管理性。將大表分割成較小的分區(qū)可以改善表的維護(hù)、備份、恢復(fù)、事務(wù)及查詢性能。針對(duì)我廠大量的油水井日度數(shù)據(jù),可以推薦使用Oracle9的分區(qū)功能。
  (2)分區(qū)的優(yōu)點(diǎn)
  首先,能夠成倍提高查詢速度:分區(qū)管理后,服務(wù)器可以進(jìn)行智能的分區(qū)檢測(cè)。跳過與查詢無關(guān)的分區(qū)訪問,并跳過不在線的分區(qū)。
  其次,增強(qiáng)系統(tǒng)可用性" title="可用性">可用性:如果表的一個(gè)分區(qū)由于系統(tǒng)故障而不能使用,其余好的分區(qū)仍然可以使用。
  不同分區(qū)可以跨表空間存儲(chǔ), 降低了磁盤損壞帶來的數(shù)據(jù)不可用性。
3 分區(qū)的管理
  (1)建立表的各個(gè)分區(qū)的表空間
  下面是創(chuàng)建2004年第一季度" title="第一季度">第一季度表空間的操作語句,指定所建立表空間的名字,所用數(shù)據(jù)文件的名稱、大小和存放目錄,并由存儲(chǔ)字句指定在該空間中所建立對(duì)象的缺省存儲(chǔ)參數(shù)。
  CREATE TABLESPACE ts_dba01_2004q1
  DATAFILE ′/home2/oracle/test/dba01_2004q1.dat′SIZE 200MB DEFAULT STORAGE (INITIAL 30m NEXT 30m MINEXTENTS 3 PCTINCREASE 0);
  (2)建立分區(qū)表
  下面是建立dba01表的操作語句,指定表名、列名及列的數(shù)據(jù)類型等。這些都與常規(guī)創(chuàng)建表的語句相同。
  CREATE TABLE dba01
  (jh varchar2(16) not null,
  rq date not null,
  cyfs varchar2(3),
  dwdm varchar2(11),
  ......
  PARTITION BY RANGE (rq)
  PARTITION dba01_2003q4
  VALUES LESS THAN (TO_DATE(′2004-01-01′,′YYYY-MM-DD′)
  TABLESPACE ts_dba01_2003q4,
  PARTITION dba01_2004q1
  VALUES LESS THAN (TO_DATE(′2004-04-01′,′YYYY-MM-DD′)
  TABLESPACE ts_dba01_2004q1)
  這是創(chuàng)建分區(qū)的語句,指定按照日期進(jìn)行分區(qū),例如:
  日期>=′2004-01-01′并且<′2004-04-01′(即2004年第一季度)的數(shù)據(jù)放在dba01_2004q1分區(qū)內(nèi)。其他分區(qū)也依此原則建立。
  (3)分區(qū)表的擴(kuò)充
  在2004年年底,向表中加入2005年的表空間,同樣是每季度一個(gè)表空間,預(yù)計(jì)每個(gè)分區(qū)為200MB。下面是創(chuàng)建2005年第一季度表空間的操作語句,指定表空間名稱、數(shù)據(jù)文件名稱及大小等。
  CREATE TABLESPACE ts_dba01_2005q1
  DATAFILE ′/home2/oracle/test/dba01_2005q1.dat′ SIZE 200MB
  DEFAULT STORAGE (INITIAL 40m NEXT 40m MINEXTENTS 3 PCTINCREASE 0)
  其他季度表空間也如此建立。
  (4)為表添加表空間
  操作語句如下:
  ALTER TABLE dba01
  ADD PARTITION dba01_2005q1
  VALUES LESS THAN (TO_DATE(′2005-04-01′,′YYYY-MM-DD′)
  TABLESPACE ts_dba01_2005q1;
  (5)刪除不必要的分區(qū)
  采油廠規(guī)定:必須保存15個(gè)月的日度數(shù)據(jù)在線。到2005年,必須把2003年3季度的數(shù)據(jù)備份,將該分區(qū)刪除,騰出空間供后續(xù)數(shù)據(jù)循環(huán)使用。刪除分區(qū) ALTER TABLE dba01 DROP PARTION dba01_2003q3;
  利用操作系統(tǒng)工具刪除這個(gè)分區(qū)所占用的文件
  oracle$ rm /home2/oracle/test/dba01_2003q3.dat
  (6)查看分區(qū)信息
  可通過對(duì)數(shù)據(jù)字典USER_EXTENTS進(jìn)行查詢,操作如下:
  SVRMGRL >SELECT * FROM user_extents
  WHERE SEGMENT_NAME=′dba01′;
  (7)卸載分區(qū)
  Oracle9的EXPORT 工具可卸載分區(qū)并導(dǎo)出數(shù)據(jù),例如到2002年,可將2000年的數(shù)據(jù)按分區(qū)卸載。
  例如:要卸載2003年3季度的數(shù)據(jù),操作如下:
  oracle$ exp tycx/***
  tables=dba01:dba01_2003q3 file= dba01_2003q3.dmp
  在語句中要指定用戶名、口令、需要卸出的表名及分區(qū)名、卸出文件名稱等。
  (8)導(dǎo)入分區(qū)
  Oracle9的IMPORT工具可導(dǎo)入分區(qū)并加載數(shù)據(jù),例如在2005年,用戶要查看2003年的數(shù)據(jù),必須導(dǎo)入該年數(shù)據(jù)。
  · 建立該表2003年的四個(gè)表空間和相應(yīng)的分區(qū);
  · 下面是導(dǎo)入2003年3季度分區(qū)數(shù)據(jù)的操作語句:
  oracle$ imp tycx/***
  file=dba01_2003q3.dmp tables= (dba01: dba01_2003q3)
4 實(shí)施效果
  (1)能夠成倍提高查詢速度
  分區(qū)管理后,服務(wù)器可以進(jìn)行智能的分區(qū)檢測(cè),跳過與查詢無關(guān)的分區(qū)訪問,跳過不在線的分區(qū)。
  (2)增強(qiáng)系統(tǒng)可用性
  如果表的一個(gè)分區(qū)由于系統(tǒng)故障而不能使用,其余好的分區(qū)仍然可以使用。
  不同分區(qū)可以跨表空間存儲(chǔ), 降低了磁盤損壞帶來的數(shù)據(jù)不可用性。
  以油井日數(shù)據(jù)表為例:
  不采用分區(qū)技術(shù)時(shí),若表空間文件受到破壞,會(huì)影響到所有數(shù)據(jù)都無法使用,必須將該表全部記錄(多達(dá)100萬條)重新恢復(fù),工作量很大,恢復(fù)期間用戶根本無法查詢數(shù)據(jù),完全不能使用。
  而采用分區(qū)技術(shù)后,由于整個(gè)表已按季度拆分為6個(gè)分區(qū),因此當(dāng)某一個(gè)表空間文件被破壞,則僅是該分區(qū)表空間所對(duì)應(yīng)的季度數(shù)據(jù)無法使用,其他季度數(shù)據(jù)仍然可以正常使用,對(duì)用戶的查詢以及其他應(yīng)用影響不大。
  通過合理應(yīng)用Oracle9的分區(qū)功能,可以大大改善系統(tǒng)的性能,降低大表數(shù)據(jù)管理和維護(hù)的工作量,對(duì)大表的查詢、增加、修改等操作可以分解到表的不同分區(qū)并行執(zhí)行,可使運(yùn)行速度更快。對(duì)促進(jìn)無紙化辦公,輔助生產(chǎn)有積極的推動(dòng)作用。
參考文獻(xiàn)
1 Joseph C.Johson , Matthew Weishan編著. Oracle8i DBA performance Tuning and Network Administrator. 北京:電子工業(yè)" title="電子工業(yè)">電子工業(yè)出版社,2001
2 Carol McCullough-Dieter 編著. Oracle9i數(shù)據(jù)庫管理員:實(shí)現(xiàn)與管理. 北京:清華大學(xué)出版社,2003
3 Daniel Benjamin編著.OCP Oracle 9i Datebase New Features For Administrators考試指南.北京:電子工業(yè)出版社,2002

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。