周文琼 王乐球 曹重 简璇
(1.广东科学技术职业学院,广东珠海 519080;2.中山大学,广东珠海 519080;3.南方电网综合能源有限公司,广州 510000;4.重庆电力局,重庆 404100)
在国家电力公司提出发展“数字电力”这一大背景下[1],用电营销系统在各级电网公司得到广泛应用,80%以上的电力营销系统采用了ORACLE数据库作为数据库平台,对于电网公司系统管理员来说,非常希望ORACLE数据库运行稳定和性能良好。但是随着数据量的不断增加,DBA(Database Administrator,数据库管理员)常常面临着数据库性能问题。下面对一个电力营销系统实际生产中遇到的案例进行剖析,从中可以领会到Oracle数据库诊断性能的思路和方法,特别是解决SQL性能优化问题。
用电营销管理是电力企业管理工作的重要内容,主要承担电能销售和社会应用管理工作,是电力生产供销的最后环节,也是电力工业生产和经营成果的最终体现。用电营销的业务主管部门是营销部,其主管业务包括:用电审批、核算发行、电费收缴、购电发行、设备管理、指标查询、线损分析和客户管理等,是供电公司直接面向广大电力客户的窗口。
电力营销管理系统基于现代计算机与通信技术,是将电力营销工作进行信息化管理的综合信息系统[2]。从20世纪90年代初的“用电管理信息系统”开始,电力营销信息化经过了二十多年的开发和建设,以地市级为单位的管理系统己经建立起来,能够高效地完成用电经营管理的日常工作,辅助领导优化决策,显著提高了企业的用电管理水平和工作效率。
根据用电营销业务的专业分工,目前综合性的电力营销系统一般分为五个子系统,即营销业务管理、电量采集、客户缴费、客户服务等四个业务子系统,加上营销与服务监管子系统,形成“4+1”的核心框架。如图1所示。
其中营销业务子系统是用电营销系统的核心模块,支持供电公司业扩、抄核收、计量、用电检查以及业务稽查等日常营销业务的处理,是其它模块实施的基础;电量采集子系统利用调度实时系统、配电信息采集系统等系统的数据采集功能,将购电侧、供电侧、销售侧三个环节的实时信息整合在一起,形成购、供、售三个环节实时信息的统一监控;客户缴费子系统与银行交易系统同共形成统一的银行信息交互与交易结算的银联交易体系;客户服务子系统是通过电话、传真、网站、短信等手段,实现营业厅、电话、网站三维一体的客户服务平台。
图1 电力营销系统功能结构图
目前,省供电公司的营销业务是由几级组织共同组成的纵横向综合在一起的系统结构。
1)从横向看,它分为以下几个层次:
a)从省供电公司横向看有营销处、财务处、生计处、计划处等;b)从省下属分公司 (地市级供电公司)横向看有用电科、财务科、生计科、计划科等;c)从地市下属子公司 (县级供电公司)横向看有用电股、财务股、生计股、计划股等;d)从县 (市)下属镇级供电公司横向看有用电班、财务班、生计班、计划班等。
2)从纵向看,各层次有如下关系:
由于地市级分公司因其所在城市是其供电地区的负荷中心、业务中心和利润中心,它除了实现供用电企业产、供、销环节的业务之外,还代集团公司管理本供电地区控股的县市级子公司,受省电力集团公司委托代管当地政府控股的县市级子公司和趸售子公司,因而产生按业务分类产生的营销、财务、生技、计划等纵向管理关系。
系统数据库服务器的配置环境如表1所示。
表1 数据库服务器配置环境
本文涉及的性能问题是“用户电量突变分析”(居民用户),该模块对抄表质量的稽查非常重要。“用电电量突变分析”主要查找有电量突增突减等异常现象的用户,以便发现错抄问题或设备故障问题。
电力用户分为高压用户、低压用户和居民用户,三类用户报装流程和管理方式各不相同,居民用户具有信息简单、数据量大的特点,“用户电量突变分析”模块涉及的数据库模型图如图2所示。
用电营销系统数据库数据量的评估如表2所示。
表2 用电营销系统主要业务数据量评估
图2 居民电费台账数据库模型
在基于ORACLE数据库的电力实际应用中,80%的性能问题是由于用户使用了不恰当的SQL查询语句造成的,因此优化SQL语句尤其是复杂SQL语句可以提升整个系统的运行效率。在集中式ORACLE数据库中,SQL查询的执行总代价主要包括:I/0代价、CPU代价和内存代价,调整影响执行效率的三大因素可以减少系统总代价。SQL语句优化的步骤如图3所示。
Oracle数据库的客户端工具SQL*PLUS提供了AUTOTRACE功能,可以跟踪SQL的执行计划,并收集统计信息,经常被作为SQL的优化工具之一被使用[3]。
2.1.1 启用AUTOTRACE功能
在Oracle 11g,运行MYMORACLE_HOME dbmsadminutlxplan.sql脚本创建plan_table表,便可启动该功能。
2.1.2 使用AUTOTRACE功能
AUTOTRACE常用选项如下:
图3 SQL优化步骤
物化视图 (MV,Materialized Views)从Oracle8i被引入,也被称为快照,物化视图是包括一个查询结果的数据库对像,它通过预计算或汇总构建独立存贮,MV将查询结果存储在一个段中,当用户提交查询时返回查询结果,而不需要重新执行查询,从而极大提高相关性能。物化视图是典型的以空间换时间的手段,通过物化视图,Oracle可以实现更少的逻辑读取,更少的写操作,更少的cpu消耗及更快的响应速度[4]。
用SQL创建物化视图的常用语法如下:
主要参数的含义如下:
1)refresh:视图刷新的方式。
·fast:增量刷新。只刷新自上次刷新以后进行的修改,假设前一次刷新的时间为t1,那么使用fast模式刷新物化视图时,只向视图中添加t1到当前时间段内,主表变化过的数据。为了记录这种变化,建立增量刷新物化视图还需要一个物化视图日志表。create materialized view log on(主表名)。
·complete:全部刷新,相当于重新执行一次创建视图的查询语句。
·force:默认方式。如可以使用fast模式时,采用fast方式;否则采用complete方式。
2)on:数据刷新的时间:
·on demand:在用户需要刷新的时候刷新;
·on commit:当主表数据提交时,立即刷新MV中的数据;
·start with:从指定的时间开始;
·next:每隔指定时间刷新一次。
系统运行初期,“用户电量突变分析”模块运作正常,问题出现约在系统运行一年后,操作员及技术员同时报告该模块运行缓慢。
以下是问题诊断和解决过程,由于这个模块不影响其他正常营销业务,选择在下班后进行诊断。我们进入该模块,做好初始选择后,单击【确定】进行查询。
系统界面一直处于等待状态,检查系统CPU和进程状况,判断数据库经历等待后,我们查询v$session_wait获取各进程等待事件:
发现存在db file sequential read等待,表明全表扫描操作成为该模块的性能影响因素。
下面的脚本通过上述获取等待事件session的SID,获取影响性能的问题SQL:
定位到问题SQL后,将问题SQL编辑成脚本文件qSql.sql,检查该SQL的执行计划:
问题SQL访问数据的条件为:绝对值 (本期有功电量-上期有功电量)/上期有功电量>0.3
该条件的意义是查找电量增加或减少幅度超过30%的数据,访问的v_JMDLDF实际上是一个视图,查询视图创建语句:
从上面的SQL执行计划可以看出,SQL调用了四个底层表,逻辑读高达1538827。降低逻辑读是解决问题的关键。SQL涉及的四个底层表分别是:CSB(参数表)、JMDLDF_HIS(居民电量电费历史表)、JMDLDF(居民电量电费当月表)和JMYH(居民用户表),其中:CSB查询当前的计费年月,数据量非常小;JMDLDF_HIS查询上月的有功电量信息,虽然按年度做了分区表,但一年的数据约600万行,该SQL对其做了全表扫描,导致模块执行缓慢;JMDLDF查询当月的有功电量信息,约50万行数据;JMYH根据户号查询居民的用户信息,约50行数据。
每月居民电量电费信息与居民用户信息的数量相当,约为50万行,因此我们可以建立一个物化视图,生成包含约50万行数据的电量对比数据,而非每次查询时再去三张大规模基表做连接查询;再在该物化视图上创建基于函数的索引。
1)创建物化视图。
2)创建基于函数的索引。
3)查询电量突变用户信息的SQL。
优化后系统性能大大提高,主要指标对比如表3所示,SQL执行时间优化前后比较棒图如图4所示。
表3 数据库服务器配置环境
图4 优化前后比较
使用物化视图Vm_JMDLDF代替普通视图V_JMDLDF,系统“用户电量突变分析”模块速度大大提高,而且前端的应用程序不需要做任何的修改。性能何以提高的原因如下:
1)物化视图的使用:视图是外模式的基本单位,常常在应用系统中使用视图,对视图的查询,Oracle都实际上转换为视图SQL语句的查询,而物化视图是一种特殊的物理表,可以提高系统查询性能。
2)基于函数索引的建立:索引是影响SQL语句性能的一个重要因素,建立合适的索引可以避免全表扫描减少I/0开销,提高数据查询速度。普通视图上无法创建索引,而在物化视图上可以创建索引;基于函数的索引是ORACLE 8i的新特性,它易于使用并且提供计算好的值,在不修改应用程序的逻辑上提高了查询性能。
Oracle的物化视图功能强大,值得去研究和探索。本文针对电力营销系统应用中出现的性能问题,结合实际用电营销业务,提供了创建物化视图的解决思路和和方案,该问题的圆满解决取决于用户对Oracle数据库和电力企业业务的了解。随着企业信息化进程的加速,企业管理信息系统中的数据量的持续上升,数据库性能的优化将越来越引起人们的重视[6]。
[1]周文瑜,王涛,沈又幸.用电营销决策支持系统的研究与开发[J].电网技术,2006,30(S):540-543.
[2]马力克,郭斌.宁夏电力公司营销信息化管理平台构建[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数据库管理艺术11g新特性[M].北京:人民邮电出版社,2009.
[5]盖国强.深入浅出Oracle DBA入门、进阶与诊断案例[M].北京:人民邮电出版社,2006.
[6]高原,耿国华,刘晓宁.Oracle数据库系统事后优化研究[J].计算机工程与应用,2005,2:181-182.