您的当前位置:首页正文

基于Oracle数据库优化性能监控系统的设计与实现

2020-06-08 来源:好走旅游网
第33卷第2期 2012年3月 Vo1.33 No.2 Mar.2012 井冈山大学学报(自然科学版) Journal of Jinggangshan University(Natural Science) 68 文章编号:1674-8085(2012)02—0068—04 基于Oracle数据库优化Il,/士4- ̄月l匕a监控系统的设计与实现 蒋林华 (华侨大学工商管理学院,福建,泉卅I 362021) 摘要:在分析Oracle性能优化的基础上设计了一个数据库性能监控系统,并利用Java RMI动态加载技术实现 远程实时监控系统的解决方案,同时通过远程客户实现监控指令发布和实时监控数据回报。 关键词:’Oracle;性能监控;J2EE;JFreeChart 中图分类号:TP393 文献标识码:A DOI:IO.3969/j.issn.1674—8085.2012.02.017 DESIGN AND REALIZATIoN oF oRACLE PERFoRMANCE MoNIToRING SYSTEM JIANG Lin-hua (College ofBusinessAdministrator,HuaQiaoUniversity,Quanzhou,Fujian 362021,china) Abstract:A database performance monitoring system was designed with analyzing performance opti ̄zing of Oracle.It put forward a solution which developed a system of remote real—time monitor based on dymmic code downloading using Java RMI,and realization that the remote client can control the controller ard get the Real—time data. Key words:oracle;performance monitoring;J2EE;JFreeChart 随着应用的不断深入和扩大,数据库中的数据 量迅速增长,数据操作也越来越复杂,Oracle数据 库的表对象、过程SQL等往往不再按照开发人员设 服务进程是充当用户进程和SGA之同的信息 传递角色,它将用户进程提出的SQL命令与SGA 区存放的信息进行交换。用户进程和服务进程是 计时的思路运行,数据库性能成为制约整个应用系 统性能的瓶颈…。所以,DBA的一个重要工作就是 定期监控, 分析评价Oracle数据库的性能是否依 然满足客户的应用需求。因此,设计开发一个简单 高效的数据库性能监控管理工具来辅助DBA对 Oracle数据库进行性能分析和优化成为数据库应用 不断扩展的需要。 Oracle数据库性能优化的一个重要方面,尤其是当 用户的数量不断增大时,Oracle数据库性能恶化用 户响应时间比较长,需要用户长时间的等待,建立 与数据库的重复性临时连接的web应用系统会导 致性能下降。 1.2 Oracle的内存结构 Oracle的内存结构包括SGA和PGA(PGA是 不共享的,即其包含的信息是不一样的)。SGA是 l Oracle的结构和性能 由Oracle的体系结构来看,主要包括用户进程 和服务进程、Oracle的内存结构和Oracle数据库三 个部分。 Oracle Instance的基本组成部分,包含一个Oracle 实例的数据和控制信息的共享内存结构,主要是用 于存储数据库信息的内存区,该信息为数据库进程 所共享。它是在Oracle服务器所驻留的计算机的实 际内存中得以分配,如果实际内存不够再往虚拟内 存中写。 1.1用户进程和服务进程 收稿日期:2012—01—13;修改日期:2012—02—21 作者简介:蒋林华(1979一),男,湖南永州人,实验师,主要从事计算机应用技术研究(E—mail:yalin@hqu.edu.cn). 井冈山大学学报(自然科学版) 69 SGA在实例启动时被自动分配,当实例关闭 时被收回。数据库的所有数据操作都通过SGA来 进行。SGA中的数据库高速缓冲、重演日志缓冲、 共享池、以及大缓冲池和Java池等组件的大小对数 据库性能有比较大的影响,它们直接影响磁盘I/O 不管库缓存中出现了哪种类型的等待事件,想 要确定哪些会话在等待以及在等待的是什么资源, 可以通过v¥SESSION WAIT视图查询进行诊断。 也可以使用DBA WAITERS视图并执行以下查询 SELECT waitingsession,holdingsession FROM db _的频率,从而影响Oracle数据库的效率。 1.3 Oracle数据库 a waiters。如果等待事件持续的时间过长,那么库 缓存内部很可能发生了错误或故障。唯一的补救办 Oracle数据库是由数据文件、控制文件组成和 日志文件组成。它们的逻辑结构和物理结构影响磁 盘I/O速度和效率,磁盘I/O速度对整个系统性能 有重要影响。影响磁盘//O性能的主要有磁盘竞争、 I/0次数过多和数据块空间的分配管理。 总之,对Oracle数据库的优化调整首先从整体 环境考虑,包括数据缓冲区调整、SQL语句的重载 率调整、磁盘、网络等。其中对控制SGA配置的初 始化参数以及数据库的全局参数的值要特别注意。 2 Oracle主要监控对象及其实现 要优化Oracle数据库性能,DBA监控对象主 要是对Oracle性能有比较大影响的部分,如:SQL 语句的重载率、内存分配、磁盘I/O、Oracle等待、 用户锁信息、回滚段等方面。以下重点介绍各种监 控对象的具体实现【20]。 2.1监控SQL语句的重载率 SQL的重载率,就是相同的语句,由于无法使 用共享池里已经保存的执行计划而不得不重新将 代码载入后执行分析,建立查询树后再进行执行的 一个过程。每当有应用程序要执行SQL或PL/SQL 语句时,这些代码必须先暂存在Oracle的库缓存 中。当应用程序运行代码时,Oracle会先搜索库缓 存看该代码是否已经存在于内存中。如果代码已经 写入内存中,Oracle就可以重新使用该已存代码f也 称为软解析1。如果内存里找不到该代码,Oracle必 须将代码载入到内存中(也称为硬解析或库缓存不 命中)。库缓存偶尔会给用户带来的麻烦通常源于各 种锁以及随之而来的由锁机制引发的以下等待事 件:(1)库缓存加载锁:当有其他用户端对同一对 象使用了库缓存加载锁时, 新来的客户端必须等 待先前的用户将锁释放出来;(2)库缓存锁:比如 两个用户端想要同时编译某段相同的代码时;(3) 库缓存pin:这时意味着其他会话以不兼容模式锁 定了该子堆。 法就是杀死持有该锁的所有进程。 2.2调整内存分配 内存资源的监控主要是Oracle为一个实例分配 的一组共享内存缓冲区,它包含该实例的数据和控 制信息的监控。内存结构(SGA)由三部分构成: 共享池、缓冲区高速缓存、重做日志缓冲区。 2.2.1 共享池 共享池由库高速缓存区和数据字典缓冲区构 成,包含用来处理的SQL语句信息和数据字典存储 区,共享SQL区包含执行特定的SQL语句所用的 信息。库高速缓存区是SGA中的一块区域,Oracle 对最近执行的SQL语句执行计划和解析树进行缓 存。对缓存的语句核查每一条进入的SQL语句,无 论什么时候只要可能,重新使用执行计划。库高速 缓存区的命中率表明了SQL语句使用的频繁程度, 其相关性能参数可由V¥LIBRARYCACHE视图查 询。 2.2.2缓冲区高速缓存 用户进程所存取的所有数据都是经过缓冲区 高速缓存来存取,所以该命中率对Oracle性能至关 重要。存放数据库中数据库块的copy。它由一组缓 冲块组成,这些缓冲块为所有与该实例相连的用户 进程共享。缓冲块的数目由初始化参数 DB Block buffers确定,缓冲块的大小由初始化参 数DB BLOCK SIZE确定。大的数据块可提高查询 速度。 Oracle用LRU(Least recently used)机制维护 数据库缓冲区,使得最近使用的块存放在数据库缓 冲区。重新获取数据的时候,可以直接从缓冲区中 来获得,而不必进行 ,从而提高性能。LRU命 中率反映是否存在LRU latch争用。LRU命中率要 求大于99%,如果该值过低,应考虑增加 DBBLOCKLRULATCHES。 ———2.2.3重做日志缓冲区 重做日志缓冲区用于在内存中存储未被刷新 写入联机重做日志文件信息。它是循环使用的缓冲 70 井冈山大学学报(自然科学版) 区,当重做日志缓冲区填满时,将其内容写入联机 重做日志文件。可通过计算重做缓冲区分配尝试统 计信息的比率来衡量重做日志缓冲区的性能。 用户服务进程尝试把新的联机日志写入日志 缓冲区时,如此时无可用缓冲区,就会试图覆盖日 志缓冲区的现有条目。但当LGWR进程还没有将 当前的条目写入到联机日志文件,用户服务进程就 必须等待,然后重新尝试。redo buffer allocation retries就是统计这种情况发生的次数,而redo entries反映DML、DDL语句的重做信息的总数[4J。 日志缓冲区的大小由初始化参数LOG BUFFER确 定,大的日志缓冲区可减少日志文件I/O的次数。 2.3磁盘I/0 磁盘I/O速度对数据库系统读取性能有比较大 的影响,其中主要有磁盘竞争、I/0读取次数过多 和数据块空间的分配管理。数据文件、事务日志文 件分别存放在不同的磁盘上,这样事务处理执行的 磁盘访问不妨碍对相应的事物日志登记的磁盘访 问;一个应用的表数据和索引分散存放不同表空间 上,并且尽量把不同类型的表空间存放在不同磁盘 上,这样就消除了表数据和索引数据的磁盘竞争。 监控数据文件的磁盘I/O情况可以通过查询 v¥filestat,v¥datafile,v¥tempfile等数据视图获得, 主要包括磁盘物理读写次数,执行I/O所花费的最 长、最短时间,执行读写I/O所花费的最长、最短 时间。根据监控数据,可以发现最有可能引起磁盘 I/O瓶颈的文件,并进行性能调整。 3系统功能模块 通过对Oracle性能元数据的抽取,实现对监控 对象性能的实时跟踪和分析,将采集到的性能信息 以简洁、直观的图形化方式呈现给DBA,从而帮助 DBA更好、更快地定位和解决系统性能的瓶颈。监 控系统主要由以下几个功能模块组成: 3.1数据库概览 ’ 后台数据库性能指标的概览,主要是一些直观 反映数据库状况的概要信息,包括CPU和内存使 用、SGA、进程、磁盘存储等。 3.2例程监控模块 提供对数据库配置信息、例程信息及内存分配 信息的查询,如数据库启动的初始化参数、数据打 开模式及是否归档等;并对内存分配的共享池、缓 冲区及PGA进行建议,以曲线形式直观地显示各 内存分配的指标变化趋势,方便DBA对Oracle数 据库进行适当调整。 3_3性能监控模块 主要对CPU使用状况进行监控,具体包括: 对SGA中的共享池、缓存区高速缓存、重做日志 缓冲区中统计信息监控,并统计各性能比率及相关 命中率;监控回滚段信息和I/O统计信息,了解各 数据文件在系统FO的读写状况;对锁信息进行监 控,并对各Latch的使用信息及其相关的比率进行 监控等。 3.4安全管理模块 对用户的账户信息进行监控,如查看用户的账 户状态、所使用的默认表空间、临时表空间及概要 文件,并可查询用户拥有的角色信息及已授予的系 统权限及对象权限等。 3.5存储管理模块 直观显示数据库控制文件、表空间、数据文件 信息及重做日志文件,方便DBA实时了解数据库 文件存储状态变化。 3.6数据库活动情况 监控当前数据库的活动session,通过动态性能 视图查找活动session的执行语句,V¥open cursor 视图列出session打开的所有cursor,从等待、阻塞 锁、事务等子部分详细反应数据库的活动情况。 3.7 SQL活动情况 根据实时显示的SQL语句,发现数据库的SQL 语句中重载率比较高的部分,并将较高重载率的 SQL语句进行终止。 4详细设计与实现 设计采用MVC(模型/视图/控制器)模式【5 】, 以保证系统的易用性和可扩展性,采用JSP.Servlet. JavaBean技术实现如图1所示的B/S三层架构。前 端是IE客户端,中间是基于J2EE实现的应用服务 层,后台是存放历史性能数据的MySQL数据库和 被监控的Oracle数据库。 MVC的模型部分代表系统的状态,是系统业 务逻辑核心,本系统主要对应实时监控模块。实时 监控部分采用RMI(Remote Method Invocation)技 术实现。它通过定时轮询或客户请求机制从后台数 据库获取性能参数,以异步方式发送到客户端,并 井冈山大学学报(自然科学版) 71 将相应的性能参数记录到历史性能数据库。这样的 处理方式使得客户端程序不需要实现底层JDBC访 问机制,而是直接调用RMI应用服务器提供的高层 API;同时,应用服务器则可通过对客户端请求施 加一定约束来保证系统的安全性。RMI应用程序实 现主要包括以下几个步骤:定义和注册RMI服务器 _÷定义和实现RMI远程调用接口_÷定义和实现 RMI远程客户端_÷产生stub/skeleton--,运行服务端 和客户端程序。 IECI ‘ J2EE^pp s‘ 妄 I==}I厂] a RM 0 lI 臣S…k ̄lemtm  一 鬻 I.....__J √ 端 l=={ L1l{l:  ]TML.XMI., l ,ITML I 图1系统框架 Fig.1 System仔ame、vork 主页面的Applet通过RMI远程调用获取监控 数据,RMI服务器将查询结果封装在视图类 ViewBean中返回给Applet。Applet先将数据缓存, 然后调用主页绘图类绘制结果数据,以Applet插件 和HTML方式在IE客户端显示。实时监控的性能 数据和历史性能数据大都以折线、饼图、柱状图以 及表格等形式呈现给用户。客户端图形对象的绘制 调用JfeeCha ̄类库中的相关方法实现,它们的绘 制过程被封装到一个类中,提供公共接口供不同的 显示程序调用。 系统前端页面与后台RMI服务器之间的通信 使用Servlet技术实现,它位于J2EE应用服务器上。 因为Applet受浏览器安全模式限制,不能读取客户 端文件系统和运行客户端程序,因此只能建立 Applet和Servlet之间的网络连接作为唯一的通信路 径。我们采用HTTP对象流并结合对象序列化技术 从Servlet向Applet传输完整的JAVA对象。 IE客服端主要包括两部分:实时监控的 APPLET和数据采集客户页面。其中在实时监控部 分显示线程通过消息定购或远程调用不断获取数 据库系统信息数据,并把相关信息传递给一些已经 设计好的IJI组件进行显示。 5数据采集及显示 在图1中,我们选择使用RMI远程调用来实 现实时监控的数据采集,远程对象服务器通过设 置iava.rmi.server.codebase的属性来指定远程对象 的codebase。服务器用RMI registry注册工具通过 绑定一个名字来注册这个远程对象,以使客户程 序能够通过引用这个名字来调用远程服务对象。 RMI客户请求一个引用来定位到一个命名的远程 对象上,这个引用就是远程对象的Stub类的实例, 它用来创建客户与远程对象之间的联系。Stub类 担当了一个位于远程服务器上的远程对象的代 理,客户用codebase指定远程对象所在机器上的 Java虚拟机上执行代码,然后再将结果(包括错误 信息)返回给客户端。 另外,MainApplet程序对监控数据进行采集 并通过RMI远程存入缓冲区,然后调用主页绘画 类DrawMainPage作图显示。在监控系统中实时监 控和历史监控数据分析部分的结果大都是以折线 图、柱状图、表格等形式反馈给DBA的。 6结束语 Oracle数据库性能监控系统通过对Oracle性能 元数据的抽取,实现对监控对象的实时跟踪和分 析,将采集到的运行数据以直观图形方式呈现给 DBA,从而帮助DBA更好定位和解决系统性能瓶 颈。本系统功能后续工作主要包括提供数据报表、 自动故障诊断和性能优化建议、自动联动告警等。 参考文献: [1】 王娜,宿红毅,白琳,等.数据库性能监控分析系统的设 计与实现[J].计算机工程,2005,31(24):105.107. [2】 盖国强.循序渐进Oracle[M].北京:人民邮电出版社, 2007. 【3] Ingram G Oracle性能优化【M].张建明,英宇译.北京: 清华大学出版社,2003. [4】陈云芳.精通Struts 2:基于MVC的JavaWeb应用开发 实战[M].北京:人民邮电出版社,2008. [5】 刘晓华.精通Java核心技术【M】.北京:电子工业出版 社,2003. [6 6]朱福喜,唐晓军.Java程序设计技巧与开发实例【M]. 北京:人民邮电出版社。2004. 

因篇幅问题不能全部显示,请点此查看更多更全内容