Oracle 性能监控与分析系统


西安理工大学 硕士学位论文 Oracle性能监控与分析系统 姓名:卢军 申请学位级别:硕士 专业:计算机应用技术 指导教师:崔杜武 20070301 摘要论文题目:Oracle性能监控与分析系统学科专业:计算机应用技术研究生:卢军指导教师:崔杜武教授摘要签名:签名:在中国,rr企业粗放的管理模式一直在延续。但在信息技术日益成为企业运作支柱的今天,其弊端逐步显露出来,因此加强企业rr服务管理成为必然。我们需要一套工具和体系去管理企业的rr基础设施,为企业提供更好的、可度量的、符合业务要求的服务,提高企业的rI’管理质量和效率。企业rr资源管理系统就是在此背景下提出的,而Oracle数据库作为当今最优秀的关系型数据库之一无疑是企业盯资源重要的组成部分。因此,对其进行性能监控的重要性就凸现出来。根据对Oracle数据库体系结构的学习和Oracle性能调整优化知识的了解,我们选取了对Oracle数据库影响最大的性能指标进行实时监控和历史数据采集处理。其中,Oracle实时监控是本系统的重要组成部分,其主要功能是按照用户自定义的采样周期轮询从Oracle数据库中采样性能数据,反映数据库CPU、内存、I/O以及会话等部分性能指标的实时变化。本系统采用B/S三层架构,客户端采用Applet技术以解决Web页面数据的动态刷新问题,且以饼图、柱状图、折线图等方式在客户端显示出来。对数据库管理员来说,这些图形就是进行数据库实时监控和性能调整优化的直观依据,给数据库管理员以切实的帮助,这也是开发本系统的初衷。另外,系统采用MVC设计模式,从而实现数据、逻辑、页面的分离,使得代码修改灵活、程序设计变得相对简单,且代码具有良好的重用性。系统实现了对Oracle的实时性能监控和历史数据采集处理,是数据库管理员进行性能调整和优化的依据,从而大大提高数据库管理的质量和效率。关键词;Oracle)实时监控;MVC;RMI;数据采集每 Title:0RACLEPERFORMANCEMONITORINGANDANALYSISSYSTEMMajor=ComputerApplicationName:JunLUSupervisor:Prof.DuwuCUIAbstractSignature:泣迨沁丛0){92D.setColorOava.awt.Color.black);醇D.drawstring(”+nf.format(standardMaxValue),10,height/5+3);醇D.drawString(””+nilformat(standardVahe+(standardMaxVahe-standardValue)+4/5),10,height/5+eurveHeight/5+3);92D.drawString(””+nf.format(standardValue+(standardMaxValue-standardValue)‘3/5),10,height/5+eurveHeight+Z,5+3).92D.drawstring(””+nf.format(standardVahe+(standardMaxVahe-standardValue)+2/5),10,height/5+curveHeight’3/5+3);92D.drawstring(””+nf.format(standardValue+(standardMaxValue·standardValuc)+1/5),10,height/5+eurveHeight‘4/5+3);for(mri=0;i.celements.sizeO;“+){弘D.drawstring(((CurveD'am)elements.get(i)).getHourMin0,i’xperComat+startPoint-15,height+15);} 系统实现5.3.3报警模块报警模块是对存放在MySQL数据库中的性能数据进行定期检查,对超出阈值参数的情况进行报警处理。报警是通过弹出提示窗口,同时对已经报警的记录置已经报警处理的标志,以便在以后报警的时候不再扫描这些记录。我们使用Windows的信使服务在调出报警窗口.Windows提供了一个NctmessagcBuffcrScnd的函数,该函数实现了从一个主机发送一组信息到另一个主机.NetmessageBufferSend函数的数据结构如下:NET..API.—STATUSNetmessageBufferSend(LPCWSTRScrvcrllalncpLPCWSTRmsgname,UPCWSTRfi-omnamc,LPBYTEbur;DWORDbuflen);其中,scrvcrname是指向一个统一编码的字符串的指针,该字符串是执行NetmessageBufferSend函数的远程服务器的名字;Msgname是指向一个统一编码的字符串的指针,该字符串指明接收信使服务的主机或口地址:Fromename是指向一个统一编码的字符串的指针,指明信息发出者。如果该参数为空,则信息从本地主机发出;Bur:包括文本信息的缓冲池指针;Buflen:由bur参数指定的文本信息的字节长度。山JNI技术NetmcssagcBuffcrScnd函数是一个Windows库函数,所以用C语言实现后,需要用JNI和Java通讯。当需要用Java语言编写的程序与非Java语言编写的服务、API工具箱以及程序集成在一起时,Java提供了一个本地编程接口(JNI),它是JDK的一部分,定义了一个标准的命名和调用准则,从而允许Java虚拟机调用以C,C++语言编写的本地方法。INI允许使用本地共享的对象接口并运行其方法,这使得c或c牛+编写的系统相关代码可以在Java中使用。JNI提供了一个本地代码的接口框架。使用JNI可以在Java代码中调用本地方法,这样在一定程度上提高了Java程序运行效率。本系统要使用c语言调用NetmessageBufferSend函数来实现Windows信使服务,从 西安理工大学硕士学住论文而使用JNI技术来实现Java调用本地方法。它们的调用关系图如下:囤田ExceptionsFunctionsClassesJNILibrariesⅣM图5-4JNI技术架构FifrS-4ArchitectureofYNIb.关键代码实现JNI可以在Java中调用本地方法;如此做不仅是为了利用已有的程序库,而且可以在一定程度上提高程序运行的效率,因为Java是介于解释型和编译型之间的一种语言,而c是编译型语言,其运行速度要比Java快一倍以上。用Java调用c代码可分为以下4个步骤:(1)编写并编译Java代码。在使用本地方法之前,需要设计所有要用到的本地方法及参数、返回值和异常类型。注意,必须使用修饰符“native”声明这些本地方法。Java代码编写完毕后,需要进行编译,生成字节码。(2)用Javah命令生成本地方法头文件。Javah工具是JDK提供的,可以用该工具生成C源文件需要.h头文件。(3)用c语言实现本地方法。如果该本地方法是已经存在的库,那么可以直接调用该库中方法。(4)创建共享库文件。把该动态链接库放在指定目录下,可以被程序访问到,该系统把.dll文件统一存放WlNNT/systcm32目录下面.实现的Java源代码如下:publicclassAlarm{publicStringretumVal=””;,,声明native方法publicnativesynchronizedStringalarm(Stringmessage,Stringalarmip);//加载指定的动态链接库static{System.10adLibrary(”alarm”). 系统实现'publicStringgetalarm(Stringstr,StringcIP){Alarmobj---newAlarmO;returnVal=obj.alarm(str,clP);returnretumVal;}}从上面的源代码看到,Java定义一个调用函数:Stringalarm(Stringmessage,Stringalarmip).其中,message是要报警的信息,alarmip是接收报警的主机碑,通过该函数来调用C写的本地方法。用C写的实现数据报警的关键代码如下://定义信息发送成与否的状态,如果NERR_Success则表成功NET..API.—STATUSm_fReturn;,/包0建C字符串的报警信息Cmessage(。衄y)一>GetStringUTFChars(env.message,0);//创建接收主机的mConlP=(。env)->GetStringUTFChars(env,alarmip,0);//调用NetmessageBufferSend函数NetmessageBufferSend(NULL,toName,ⅫnL(LPBYTE)sendMsg,wcslen(sendMsg)‘siz,of(WCHAg));if(m_fRctum==NERR_Succcss){/,i医回发送成功信息ReturnPenv)->NewStfingUTF(env,"Messagesuccesfullysent.’氇}d∞{)除此之外,本系统还设计了以下几个Bean:·MySQLConnect:MySOL数据库连接Bean,可以跟MySOL数据库建立连接,对数据库进行查询、插入、删除、更新等操作。·OracleConnection:Oracle数据库连接Bean,与Oracle数据库进行查询、插入、删除等操作.·ResultBcan;分页显示Bean,把查询结果以分页形式显示出来。 西安理工大学硕士学位论文5.4Controller(控制器)部分的实现控制器主要由Servlet技术实现。Servlet是由Java编写的服务器端程序,它与协议和平台无关。Servlet和CGI(CommonGatewayInterface,公共网关接口)有很多相似,但它的功能和性能比CGI更强大。Servlet具有良好的可移植性、可扩展性和灵活性,Servlet是持久高效的,Servlet一旦被载入就驻留在内存中,这就加快了响应速度.SetvIct运行在Scrvlet引擎中,通常在w西服务器或应用服务器上。Serv|et的生命周期一般经历以下几个阶段:装载Servlet并初始化、接收服务请求并调用service(1方法进行处理、调用destroy()方法销毁Servlet。本系统前端使用Applet、后端使用Servlet,这就涉及Servlet和Applet的通信问题。因为Applet受浏览器安全模式的限制,不能读取客户端的文件系统、不能运行客户端的程序,也不能访问服务器上的文件系统,即所谓的沙盒模型l堋,我们因此只能建立Applet和Servia之间的网络连接作为唯一的通信路径。我们采用HrrP对象流并结合对象序列化的技术从Scrvlet向Applet传输完整的Java对象。我们可以建立一个到Web主机的Servlet的URL连接并读取返回数据,并将其封装到ObjeetlnputStream中,然后我们按照适当的类型读取其中的对象。下面是部分代码实现:ObjeetlnputStreaminputFromApplet=null;inputFromApplet=n@vJObjeetInputStream(request.getInputStreamO);,,读IRApplet送来的参数廿y{sqlCol=(Integer)inputFromApplet.readObjeetO;sql=(String)inputFromApplet.readObjectO;inputFromApplet.dose0;’catch(Exceptionc){}因此,Servlet可以用来很方便地建立Applet和Web浏览器这样的客户端和企业应用程序之间的连接。对于客户端来说,向Servlet发出的请求与其它web请求并没有任何不同.客户端通过一个URL来接收返回的信息,返回的信息并不一定只能是HTML,实际上我们可以通过HTML协议发送和接收任何类型的数据。5.5View(视图J部分的实现视图主要由JsP嘲实现用户界面。随着应用复杂性的提高和规模的变大,晃面处理交得越来越有挑战性。MVC中对视图的处理仅限视图数据的采集和处理以及响应用户请求,业务逻辑处理交由Model(模型)处理。以下是本系统中的部分JSP页面: 系统实现·SGA分解:分别显示空闲内存、共享池、数据块缓冲区、日志缓冲区等各部分所占的比例。SGA分解图利用PieGraph组件以饼图的形式显现出来。图5-5SGA分解图Fig.5-5DecompositionDiagramofSGA·数据字典命中率:共享池中数据字典请求所占的百分比。数据字典命中率利用CurveGraph以折线图的形式显示出来,正常情况下其命中率应在90%以上。图5-6数据字典命中率图Fig.5-6DataDictionaryHitDiagram 西安理工大擘硕士学位论文·查看当前运行的SOL语句图5-7正在运行的SOL信息Fig.5-7DiagramofActiveSOLInformation 系统相关技术6系统相关技术6.1JDBC技术JDBC[2s]是由SuN的子公JavaSofl制定的Java与数据库连接的接口。JDBC是实现了Jav耀序与数据库系统的无缝连接。JDBC是一个支持基本SQLx叻能的通用底层API,它在不同的数据库功能模块层次上提供了一个统一的用户接口,为Java程序员提供了独立于特定的数据库系统而实现与网络数据库互连的方式。JDBC包含两部分与数据库独立的API:一部分是面向程序开发人员的JDBCAPI,另一部分是面向底层的JDBCDriverAPI。JavaApplet或JavaApplication通LVLJDBCAPI访问]DBCDriverManager,JDBCDriverManager再通过JDBCDriverAPI访问不同的JDBC驱动程序,从而实现对不同数据库的访问。JDBc提供了一个通用的JDBCDriverManager,用来管理各数据库软件商提供的JDBC驱动程序,从而访问其数据库。此外,对没有提供相应dDBC驱动程序的数据库系统,开发了特殊的驱动程序:JDBC.-ODBC桥,该驱动程序支持JDBC通过现有的ODBC驱动程序访问其数据库系统。现在已有越来越多的数据库厂商提供其数据库的JDBC驱动程序。JDBC功能结构如图6-1所示:JDBCAPI提供了一系列的Java类接口:(1)java.明1.DriverManagcr:提供调入驱动程序的方法,并支持java.sql.Driver接口中的类创建数据库的连接,即负责处理JDBc数据库驱动程序的加载和卸载。(2)java.阴1.Connection:完成对一个指定数据库的连接。(3)java.sql.Statement:同一个连接,一起将SQL语句发送到数据库中.(4)java.sql.PreparedStatement:同一个连接,但是以预编译的形式发送SQ【语句。(5)java.sql.CallableStatcment:同一个连接,但是以调用数据库存储函数的形式发送.(6)java.sql.ResultSet:返回包含符合SQL语句中条件的所有行,并且它通过一套getTY法(j塞些gct方法可以访问当前行中的不同列)提供了对这些行中数据的访问。 西安理工大学硕士学位论文JDBCAPIJDBCDriverAPIIJDBCDriverManagerIIl I重JDBC-NET星.立.IODBCandIIDBDdverII.....................一俞龠、、__————/图6-1JDBC功能结构Fig.6-1Axchite*'tureof/DBC应用程序访问数据库的步骤如下:首先使用DriverManager类的gctConneetion()方法创建Connection对象;然后,通过Statement的CrcateStatement()方法创建一个SQL语句;执行ExecuteOuery()方法返回结果集ReaultSet。JDBC有两种常用的应用方案:Applet和Application。用于数据库访问的applet使用JDBC与数据库进行交互。基于网络安全的考虑,JavaApplet的操作权限有许多限制,Applct不能访问本地的文件系统和对任意主机建立连接,它必须遵守标准的安全模式,这种应用方案有许多安全方面的限制。而JavaApplicationn-I以访问本地或网络上的任何资源,可以读写本地文件和与网络上的数据库服务器建立连接等。JavaApplet的执行需要装入AppletViewer或能运行JavaApplet的浏览器上;而JavaAp#cation则需要用Java的虚拟机来解释执行。JDBC允许任何使用Java语言编写的小应用程序(apple0或应用程序(application)访问远程数据库、获取数据,并对数据库进行更新存储。Java和JDBC的结合,使信息传播变得容易和经济,即使这些信息是储存在不同数据库管理系统上,企业可继续使用它们安装好的数据库,并能便捷地存取信息。6.2多线程技术线程(Thread)是操作系统分配CPU时间的基本实体【矧。线程模型简化了在单一程序中同时交织在一起的多个操作的处理.使用线程时,CPU将轮流给每个线程分配其占用时间。每个线程都觉得自己在一直占用CPU,但事实上CPU时间是划分成片段分配48 系统相关技术给了所有的线程。同进程相比,多个线程可以同时运行,并能共享资源;而每个进程都需要操作系统为其分配独立的地址空间,而同以进程中的各个线程都是在同一块地址空间中工作。创建多线程的方法有两种:(1)扩展Thread类:(2)实现Runnable接口.相比较而言,第二种应用比较广泛。线程从创建到灭亡要经历一个完整的生命周期。在这个生命周期中,线程都将处于不同的状态。线程的状态用来表明线程的活动情况及线程在当前状态中能够完成的功能。线程的生命周期如图6-2所示:图6-2线程生命周埘Fig.6-2Threadlifecycle用start(1启动线程,便会进入就绪状态(ready).处于就绪状态的线程将在一个线程队列中等待接受处理机的调度.当它获得处理机资源时,即进入运行状态(running),这时它拥有处理机的控制权,并且线程的代码正在处理机中运行.处于运行状态下的线程可以通过调用sleep0、wait0方法,使其从运行状态转化为休眠状态(sleeping)或等待状态(waiting),或者调用stop()方法结束线程的运行,当需要I/O操作时,线程将进入阻塞状态(blocked),直到I/O完成使该线程重新回到就绪状态.处于运行状态的线程如果时间片用完或者被优先级更高的线程打断,处于休眠状态的线程在休眠时间结束后,都会重新回到就绪状态,等待处理机的下一次调度。处于等待状态的线程必须由相应的等待事件唤醒。49 西安理工大学硕士学位论文6.3DOM技术文档对象模型(DocumentobjectModel,DO旧是一个抽象数据结构,将xML文档表示成由节点构成的树。org.w'3c.dom包中的不同接口可以表示元素、属性,已分析的字符数据、说明和处理指令,它们都是公用Node接口的子接口l姗.Node接口提供了在树中导航与处理的基本方法。树的根是Document对象,表示完整的形式合理的文档。分析器从流中读取xML文档并建立表示这个XML3℃档的DocumentX寸象。客户应用程序调用Document和其它DOM接口的方法,在树中导航并取得XML玟:档信息。程序还可以在内存中从头生成全新的)a垤L,文档,然后再将这些新文档写入xML文件中。DOM可以动态创建xML文档,添加、删除、修改内容,具有良好的灵活性,符合代码重用思想.本系统利用DOM技术动态生成树型结构。宅EJDKI.4中,Document描述了与xMI.文件相对应的文档树,提供了对文档的访问。Javax.parsers.DocumentBuilder类提供TDocument接口;XML的解析器从类DoeumentBuilderFactoryqb获得.下面代码是解析Ⅺ舡皮档,并生成DoctmaentXij象:蚵{‘|l生’骰DocumentBuilderFactoryDocumentBuilderFaetorydMktory2DocumentBuilderFactory.newInstance0;tl聋藏DocumentBuilderDoeumentBuilderdocbuilder=dbfaetory.newDoeumentBuilder0;,/鸯¥析xML文件,生成Document对象Documenttree=docbuilder.pars“”oracle.xml’.);}catch(Exceptione){⋯⋯);接下来,遍历DOM文档获得各个结点:脓得rootElementroot=tree.getDoenmentElement0;脓得孩子结点NodeI.istgroup=root.getChildNodes0;//遍历孩子结点for(intk--O;k
还剩61页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

jczhang80

贡献于2015-03-26

下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf