Oracle数据库的性能优化

2013-10-23 09:12
天津冶金 2013年4期
关键词:合金数据库性能

左 娜

(天津钢铁集团有限公司炼钢厂,天津300301)

1 引言

Oracle数据库是当前应用最为广泛的大型关系数据库之一,其性能直接关系到整个应用系统的运行效率,在现代化的冶金企业得到了充分的应用,引起信息化数据维护人员对其性能优化的高度重视。天津钢铁集团有限公司炼钢厂的二级系统,无论是转炉区域还是连铸区域应用的都是Oracle9i数据库,所以本文以Oracle数据库在转炉区域的应用为例,进行分析研究。

2 Oracle数据库的优化方法

在转炉区域的二级系统中,现场数据采集采取直接与PLC通讯,读取PLC原始数据,并根据采集到的数据进行逻辑判断,对生产状态进行判断,根据不同的工艺过程进行生产信息整合存档,将整合好的数据存储到服务器的数据库中。根据现场生产的需要,各个工位都有二级客户端进行现场显示生产状态,分布图见图1。

当二级系统中频繁调用生产数据,大量的数据交换使数据存储出现响应速度慢或无反映,二级客户端不能及时准确地显示现场生产状况,影响调度人员对现场的生产节奏的掌控,影响生产。所以,一个性能良好的数据库后台对于二级系统极其重要,同时,对于数据库系统优化也是数据库维护人员的重要职责,笔者结合工作中遇到的问题进行解决和归纳,提出几种数据库优化的简单而有效的方法。

图1 数据通讯分布图

2.1 根据存储数据和数据应用的情况,建立数据的正确表达方式

如转炉二级系统的合金上料部分,一个生产炉次需要多次添加合金料,每次的加料数据(合金料名称和添加重量及添加时间)都需要存储在数据库中,并以熔炼号为关键字进行查询汇总,在二级客户端对工艺人员进行显示。对于该功能数据库后台数据结构设计部分,有两种方法进行实现。

一种可以在建合金加料(BOF_ALLOY_PROD)表中,建立多个合金料名称(MAT_name)及其对应重 量 的 字 段 (MAT_weight), 如 MAT_name_i、MAT_weight_i(i=1……n),即每一炉的投料只有一条加料数据;对于这种表结构就需要设计人员对于生产过程中添加合金料的次数有所了解和预估值,因为表结构固定后,对于添加合金料的次数就会由数据库表结构的字段约束,对于少于表字段定义的次数的合金添加数据都会进行记录,相反,超出数据结构定义部分会无法记录,对于生产过程中,出现异常多次添加合金料的数据就会丢失。对于这种数据结构定义的优点,就是数据查询响应速度快,数据库负载小,对于现场越多处调用数据时优势显示的越明显。

另一种可以在建合金加料(BOF_ALLOY_PROD)表中,建立一个合金料名称(MAT_name)及其记录重量的字段(MAT_weight),也就是每投一次料就生成条数据记录,就是在冶炼一炉钢水的过程中,会出现多条添加合金料的生产数据。对于这种数据结构,对于生产过程中的添加次数没有定值约束,只要生产就会生成一条记录存入数据库。两种表达式列表见表1。

数据库的设计人员对于数据库的需求分析,必须准确地反映用户的实际要求,其结果将直接影响到数据库后面各个阶段的设计,及设计结果是否合理和实用。对于这两种的数据表结构各有利弊,数据库设计人员应根据现场的生产工艺及数据存储,及其数据在应用过程中的调用情况进行取舍。

2.2 对数据库有宏观的数据存储管理,即对数据物理存储方式(表结构、表空间)的管理

表1 两种表达式列表

数据库的设计人员在数据库的设计过程中最经常犯的错误是:表结构和索引设计时,使表与索引共建在一个表空间中。在数据量不是很大,查询不频繁的时候,数据库的设计缺点就不会暴露出来。但是在炼钢厂二级系统中,转炉区域的数据收集,尤其是转炉倾角和氧枪高度的数据表,每5 s就有一条记录入库,生产一炉钢水就会有千条左右记录,每天生产按40炉计算就会有4万的记录,数据库数据的归档保留时间是6个月,每个月按30天计算,数据库中的数据量就达到了720万条记录,如果数据表仅仅是存放数据,数据库的设计缺陷不明显,但是现场就有二级程序是枪位图和转炉倾角图,根据时间进行绘图,这就需要频繁地从数据库中调用查询数据,就会发现数据的查询速度很慢,而且会爆出“程序出错,错误编号:-12535,错误描述ORA-12535:TNS:操作超时”的错误。产生问题的根本原因是数据查询的时间超长,不能及返回查询数据结果,使前台的运行程序没有响应、挂掉。在ER关系上,这种表和索引共在一个表空间,设计并不存在缺陷,但是在应用时,这成为了一大弊病,解决的方法就是将表数据和索引数据分开表空间存储进行优化:

指定表数据及索引数据存储表空间SQL语法语句最简单的形式如下:

数据库表名称:BOF_TURNING_PROD

索引名称:INDEX_BOF_TURNING_PROD

将表数据存储在L2_BOF_DATA表空间里:

2.3 建立满足需求的索引

通常情况下,简单的索引经常用于扫描小表来提高数据查询效率,但在联结多个表时需要建立复合键索引来提高数据库检索效率。

在生产过程中,炼钢区域的数据一般情况下都是以转炉的熔炼号为主的相关数据存储,对于每一炉的生产过程中添加的散装料、合金数据、吹氧量、吹氩量等进行统计。对于合金数据的查询就需要建立复合索引。

转炉合金投入实绩表(BOF_Alloy_Prod)中包含字段:熔炼号HTNO;添加时间Time_Add;合金料仓号 Alloy_BUNKER_NO ;合金重量 Alloy_weight;

转炉合金料仓对应表(BOF_Alloy_list)中包含的字段:合金料仓号Alloy_BUNKER_NO;合金名称Alloy_name;

实现功能:按炉次(熔炼号为9999999)对合金投料数据进行搜索、显示:熔炼号HTNO;合金料名称 Alloy_name;合金重量 Alloy_weight;

执行的SQL语句为:selectHTNO,Alloy_name,Alloy_weigh from BOF_Alloy_Prod,BOF_Alloy_listwhereHTNO=9999999 and BOF_Alloy_Prod.Alloy_BUNKER_NO=BOF_Alloy_list.Alloy_BUNKER_NO

虽然在数据库中使用索引能提高查询效率,但是数据库的维护人员必须注意使用索引的利弊。索引不仅需要占用空间来存储(建议存储索引与表数据不在同一表空间),也需要定期维护。在数据库的应用过程中,表数据数据记录经常会根据系统应用需要被增减修改或修改索引列,同时索引也会被修改可能产生碎片,影响数据库性能。在许可的条件下,也可以阶段性地执行truncate命令删除表中所有记录,同时删除索引碎片。对于数据表进行删除或truncate表后,要及时对索引重建,提高数据库性能。

执行语句:

TRUNCATE Table表名;

ALTER INDEX索引名REBUILD表空间名称。

3 结束语

Oracle数据库系统性能优化与调整是一个复杂、繁琐的系统工程,贯穿于数据库系统开发的整个过程。当然,对于数据应用(数据查询、修改、添加、删除)时,细节处理(SQL语句的应用)对数据库性能也会有很大的影响。数据库的性能优化方法还有许多,需要在工作中不断地实践应用。本文只是根据在现场的二级系统长时间运行维护的工作中,对于一些最常见的二级系统问题进行归纳,总结出这几种最直接有效的解决问题方法。

[1]腾永昌.Oracle9i数据库管理员使用大全[M].北京:清华大学出版社,2005:766-778.

[2]Ault M.Oracle数据库管理与维护技术手册[M].北京:清华大学出版社,2003:595-663.

[3]Lawson C.Oracle性能优化科学与艺术[M].北京:清华大学出版社,2006.

[4]盖国强,冯春培.Oracle数据库性能优化[M].北京:人民邮电出版社,2006.

[5]柳丹.Oracle PL/SQL面向对象特性Web应用研究[J].计算机技术与发展,2006,16(1):234-237.

[6]苏淑文,翁敬农.Oracle系统异构环境下的信息集成[J].计算机技术与发展,2007,17(3):128-131.

[7]杜志源,刘刚,王永智.高校教务管理系统数据库性能优化的研究[J].计算机工程与设计,2007(20):5066-5068.

猜你喜欢
合金数据库性能
奥科宁克与NASA联合研发3D打印用Al-Cu-Zn-Mg合金
钼钨合金烧结致密化行为
提供将近80 Gbps的带宽性能 DisplayPort 2.0正式发布
Zr-Nb-Fe合金在LiOH溶液中的腐蚀行为
数据库
数据库
数据库
数据库
Al-Se双元置换的基于LGPS的thio-LISICON的制备与性能表征
强韧化PBT/PC共混物的制备与性能