周文瓊 王樂球 曹重 簡璇
(1.廣東科學技術(shù)職業(yè)學院,廣東珠海 519080;2.中山大學,廣東珠海 519080;3.南方電網(wǎng)綜合能源有限公司,廣州 510000;4.重慶電力局,重慶 404100)
在國家電力公司提出發(fā)展“數(shù)字電力”這一大背景下[1],用電營銷系統(tǒng)在各級電網(wǎng)公司得到廣泛應用,80%以上的電力營銷系統(tǒng)采用了ORACLE數(shù)據(jù)庫作為數(shù)據(jù)庫平臺,對于電網(wǎng)公司系統(tǒng)管理員來說,非常希望ORACLE數(shù)據(jù)庫運行穩(wěn)定和性能良好。但是隨著數(shù)據(jù)量的不斷增加,DBA(Database Administrator,數(shù)據(jù)庫管理員)常常面臨著數(shù)據(jù)庫性能問題。下面對一個電力營銷系統(tǒng)實際生產(chǎn)中遇到的案例進行剖析,從中可以領會到Oracle數(shù)據(jù)庫診斷性能的思路和方法,特別是解決SQL性能優(yōu)化問題。
用電營銷管理是電力企業(yè)管理工作的重要內(nèi)容,主要承擔電能銷售和社會應用管理工作,是電力生產(chǎn)供銷的最后環(huán)節(jié),也是電力工業(yè)生產(chǎn)和經(jīng)營成果的最終體現(xiàn)。用電營銷的業(yè)務主管部門是營銷部,其主管業(yè)務包括:用電審批、核算發(fā)行、電費收繳、購電發(fā)行、設備管理、指標查詢、線損分析和客戶管理等,是供電公司直接面向廣大電力客戶的窗口。
電力營銷管理系統(tǒng)基于現(xiàn)代計算機與通信技術(shù),是將電力營銷工作進行信息化管理的綜合信息系統(tǒng)[2]。從20世紀90年代初的“用電管理信息系統(tǒng)”開始,電力營銷信息化經(jīng)過了二十多年的開發(fā)和建設,以地市級為單位的管理系統(tǒng)己經(jīng)建立起來,能夠高效地完成用電經(jīng)營管理的日常工作,輔助領導優(yōu)化決策,顯著提高了企業(yè)的用電管理水平和工作效率。
根據(jù)用電營銷業(yè)務的專業(yè)分工,目前綜合性的電力營銷系統(tǒng)一般分為五個子系統(tǒng),即營銷業(yè)務管理、電量采集、客戶繳費、客戶服務等四個業(yè)務子系統(tǒng),加上營銷與服務監(jiān)管子系統(tǒng),形成“4+1”的核心框架。如圖1所示。
其中營銷業(yè)務子系統(tǒng)是用電營銷系統(tǒng)的核心模塊,支持供電公司業(yè)擴、抄核收、計量、用電檢查以及業(yè)務稽查等日常營銷業(yè)務的處理,是其它模塊實施的基礎;電量采集子系統(tǒng)利用調(diào)度實時系統(tǒng)、配電信息采集系統(tǒng)等系統(tǒng)的數(shù)據(jù)采集功能,將購電側(cè)、供電側(cè)、銷售側(cè)三個環(huán)節(jié)的實時信息整合在一起,形成購、供、售三個環(huán)節(jié)實時信息的統(tǒng)一監(jiān)控;客戶繳費子系統(tǒng)與銀行交易系統(tǒng)同共形成統(tǒng)一的銀行信息交互與交易結(jié)算的銀聯(lián)交易體系;客戶服務子系統(tǒng)是通過電話、傳真、網(wǎng)站、短信等手段,實現(xiàn)營業(yè)廳、電話、網(wǎng)站三維一體的客戶服務平臺。
圖1 電力營銷系統(tǒng)功能結(jié)構(gòu)圖
目前,省供電公司的營銷業(yè)務是由幾級組織共同組成的縱橫向綜合在一起的系統(tǒng)結(jié)構(gòu)。
1)從橫向看,它分為以下幾個層次:
a)從省供電公司橫向看有營銷處、財務處、生計處、計劃處等;b)從省下屬分公司 (地市級供電公司)橫向看有用電科、財務科、生計科、計劃科等;c)從地市下屬子公司 (縣級供電公司)橫向看有用電股、財務股、生計股、計劃股等;d)從縣 (市)下屬鎮(zhèn)級供電公司橫向看有用電班、財務班、生計班、計劃班等。
2)從縱向看,各層次有如下關(guān)系:
由于地市級分公司因其所在城市是其供電地區(qū)的負荷中心、業(yè)務中心和利潤中心,它除了實現(xiàn)供用電企業(yè)產(chǎn)、供、銷環(huán)節(jié)的業(yè)務之外,還代集團公司管理本供電地區(qū)控股的縣市級子公司,受省電力集團公司委托代管當?shù)卣毓傻目h市級子公司和躉售子公司,因而產(chǎn)生按業(yè)務分類產(chǎn)生的營銷、財務、生技、計劃等縱向管理關(guān)系。
系統(tǒng)數(shù)據(jù)庫服務器的配置環(huán)境如表1所示。
表1 數(shù)據(jù)庫服務器配置環(huán)境
本文涉及的性能問題是“用戶電量突變分析”(居民用戶),該模塊對抄表質(zhì)量的稽查非常重要?!坝秒婋娏客蛔兎治觥敝饕檎矣须娏客辉鐾粶p等異常現(xiàn)象的用戶,以便發(fā)現(xiàn)錯抄問題或設備故障問題。
電力用戶分為高壓用戶、低壓用戶和居民用戶,三類用戶報裝流程和管理方式各不相同,居民用戶具有信息簡單、數(shù)據(jù)量大的特點,“用戶電量突變分析”模塊涉及的數(shù)據(jù)庫模型圖如圖2所示。
用電營銷系統(tǒng)數(shù)據(jù)庫數(shù)據(jù)量的評估如表2所示。
表2 用電營銷系統(tǒng)主要業(yè)務數(shù)據(jù)量評估
圖2 居民電費臺賬數(shù)據(jù)庫模型
在基于ORACLE數(shù)據(jù)庫的電力實際應用中,80%的性能問題是由于用戶使用了不恰當?shù)腟QL查詢語句造成的,因此優(yōu)化SQL語句尤其是復雜SQL語句可以提升整個系統(tǒng)的運行效率。在集中式ORACLE數(shù)據(jù)庫中,SQL查詢的執(zhí)行總代價主要包括:I/0代價、CPU代價和內(nèi)存代價,調(diào)整影響執(zhí)行效率的三大因素可以減少系統(tǒng)總代價。SQL語句優(yōu)化的步驟如圖3所示。
Oracle數(shù)據(jù)庫的客戶端工具SQL*PLUS提供了AUTOTRACE功能,可以跟蹤SQL的執(zhí)行計劃,并收集統(tǒng)計信息,經(jīng)常被作為SQL的優(yōu)化工具之一被使用[3]。
2.1.1 啟用AUTOTRACE功能
在Oracle 11g,運行MYMORACLE_HOME dbmsadminutlxplan.sql腳本創(chuàng)建plan_table表,便可啟動該功能。
2.1.2 使用AUTOTRACE功能
AUTOTRACE常用選項如下:
圖3 SQL優(yōu)化步驟
物化視圖 (MV,Materialized Views)從Oracle8i被引入,也被稱為快照,物化視圖是包括一個查詢結(jié)果的數(shù)據(jù)庫對像,它通過預計算或匯總構(gòu)建獨立存貯,MV將查詢結(jié)果存儲在一個段中,當用戶提交查詢時返回查詢結(jié)果,而不需要重新執(zhí)行查詢,從而極大提高相關(guān)性能。物化視圖是典型的以空間換時間的手段,通過物化視圖,Oracle可以實現(xiàn)更少的邏輯讀取,更少的寫操作,更少的cpu消耗及更快的響應速度[4]。
用SQL創(chuàng)建物化視圖的常用語法如下:
主要參數(shù)的含義如下:
1)refresh:視圖刷新的方式。
·fast:增量刷新。只刷新自上次刷新以后進行的修改,假設前一次刷新的時間為t1,那么使用fast模式刷新物化視圖時,只向視圖中添加t1到當前時間段內(nèi),主表變化過的數(shù)據(jù)。為了記錄這種變化,建立增量刷新物化視圖還需要一個物化視圖日志表。create materialized view log on(主表名)。
·complete:全部刷新,相當于重新執(zhí)行一次創(chuàng)建視圖的查詢語句。
·force:默認方式。如可以使用fast模式時,采用fast方式;否則采用complete方式。
2)on:數(shù)據(jù)刷新的時間:
·on demand:在用戶需要刷新的時候刷新;
·on commit:當主表數(shù)據(jù)提交時,立即刷新MV中的數(shù)據(jù);
·start with:從指定的時間開始;
·next:每隔指定時間刷新一次。
系統(tǒng)運行初期,“用戶電量突變分析”模塊運作正常,問題出現(xiàn)約在系統(tǒng)運行一年后,操作員及技術(shù)員同時報告該模塊運行緩慢。
以下是問題診斷和解決過程,由于這個模塊不影響其他正常營銷業(yè)務,選擇在下班后進行診斷。我們進入該模塊,做好初始選擇后,單擊【確定】進行查詢。
系統(tǒng)界面一直處于等待狀態(tài),檢查系統(tǒng)CPU和進程狀況,判斷數(shù)據(jù)庫經(jīng)歷等待后,我們查詢v$session_wait獲取各進程等待事件:
發(fā)現(xiàn)存在db file sequential read等待,表明全表掃描操作成為該模塊的性能影響因素。
下面的腳本通過上述獲取等待事件session的SID,獲取影響性能的問題SQL:
定位到問題SQL后,將問題SQL編輯成腳本文件qSql.sql,檢查該SQL的執(zhí)行計劃:
問題SQL訪問數(shù)據(jù)的條件為:絕對值 (本期有功電量-上期有功電量)/上期有功電量>0.3
該條件的意義是查找電量增加或減少幅度超過30%的數(shù)據(jù),訪問的v_JMDLDF實際上是一個視圖,查詢視圖創(chuàng)建語句:
從上面的SQL執(zhí)行計劃可以看出,SQL調(diào)用了四個底層表,邏輯讀高達1538827。降低邏輯讀是解決問題的關(guān)鍵。SQL涉及的四個底層表分別是:CSB(參數(shù)表)、JMDLDF_HIS(居民電量電費歷史表)、JMDLDF(居民電量電費當月表)和JMYH(居民用戶表),其中:CSB查詢當前的計費年月,數(shù)據(jù)量非常小;JMDLDF_HIS查詢上月的有功電量信息,雖然按年度做了分區(qū)表,但一年的數(shù)據(jù)約600萬行,該SQL對其做了全表掃描,導致模塊執(zhí)行緩慢;JMDLDF查詢當月的有功電量信息,約50萬行數(shù)據(jù);JMYH根據(jù)戶號查詢居民的用戶信息,約50行數(shù)據(jù)。
每月居民電量電費信息與居民用戶信息的數(shù)量相當,約為50萬行,因此我們可以建立一個物化視圖,生成包含約50萬行數(shù)據(jù)的電量對比數(shù)據(jù),而非每次查詢時再去三張大規(guī)?;碜鲞B接查詢;再在該物化視圖上創(chuàng)建基于函數(shù)的索引。
1)創(chuàng)建物化視圖。
2)創(chuàng)建基于函數(shù)的索引。
3)查詢電量突變用戶信息的SQL。
優(yōu)化后系統(tǒng)性能大大提高,主要指標對比如表3所示,SQL執(zhí)行時間優(yōu)化前后比較棒圖如圖4所示。
表3 數(shù)據(jù)庫服務器配置環(huán)境
圖4 優(yōu)化前后比較
使用物化視圖Vm_JMDLDF代替普通視圖V_JMDLDF,系統(tǒng)“用戶電量突變分析”模塊速度大大提高,而且前端的應用程序不需要做任何的修改。性能何以提高的原因如下:
1)物化視圖的使用:視圖是外模式的基本單位,常常在應用系統(tǒng)中使用視圖,對視圖的查詢,Oracle都實際上轉(zhuǎn)換為視圖SQL語句的查詢,而物化視圖是一種特殊的物理表,可以提高系統(tǒng)查詢性能。
2)基于函數(shù)索引的建立:索引是影響SQL語句性能的一個重要因素,建立合適的索引可以避免全表掃描減少I/0開銷,提高數(shù)據(jù)查詢速度。普通視圖上無法創(chuàng)建索引,而在物化視圖上可以創(chuàng)建索引;基于函數(shù)的索引是ORACLE 8i的新特性,它易于使用并且提供計算好的值,在不修改應用程序的邏輯上提高了查詢性能。
Oracle的物化視圖功能強大,值得去研究和探索。本文針對電力營銷系統(tǒng)應用中出現(xiàn)的性能問題,結(jié)合實際用電營銷業(yè)務,提供了創(chuàng)建物化視圖的解決思路和和方案,該問題的圓滿解決取決于用戶對Oracle數(shù)據(jù)庫和電力企業(yè)業(yè)務的了解。隨著企業(yè)信息化進程的加速,企業(yè)管理信息系統(tǒng)中的數(shù)據(jù)量的持續(xù)上升,數(shù)據(jù)庫性能的優(yōu)化將越來越引起人們的重視[6]。
[1]周文瑜,王濤,沈又幸.用電營銷決策支持系統(tǒng)的研究與開發(fā)[J].電網(wǎng)技術(shù),2006,30(S):540-543.
[2]馬力克,郭斌.寧夏電力公司營銷信息化管理平臺構(gòu)建[J].中國電力,2009,04:654-69.
[3]Bob Bryla,Biju Thomas.Oracle Database 10G New Features For Administrators Study Guide[M].Burr Ridge:McGraw - Hill,2005:351 -398.
[4]Sam R.Alapati,Charles Kim.Oracle數(shù)據(jù)庫管理藝術(shù)11g新特性[M].北京:人民郵電出版社,2009.
[5]蓋國強.深入淺出Oracle DBA入門、進階與診斷案例[M].北京:人民郵電出版社,2006.
[6]高原,耿國華,劉曉寧.Oracle數(shù)據(jù)庫系統(tǒng)事后優(yōu)化研究[J].計算機工程與應用,2005,2:181-182.