当前位置:文档之家› Oracle XML 性能实验报告

Oracle XML 性能实验报告

ORACLE XML性能实验报告背景与目的1、ZLBH的智能文档的需要:a)基于关系型的严格结构不能很好地满足;以前部分用户对ZLHIS电子病历的科研搜索多有微词。

b)需要一种能有效支持“结构扩展”存储方式,XML是业界公认的解决方式(且更有利于更大范围的数据共享与传递)2、Oracle资料显示,其XML在10g 、11g后,性能已有较大的提升:a)来自Oracle白皮书的描述:i.Secure Files是一个重要的新体系结构,其特性包括全新的磁盘格式、空间和内存管理技术,它可显著提升LOB性能并优化存储。

ii.Oracle 数据库11g引入了一个新的二进制XML存储选件以及新的XML索引编制功能,从而带来高性能的插入、更新和查询操作。

Oracle的二进制XML格式允许针对XML内容进行基于路径的高效索引编制。

b)3、a)比较不同存储方式下的空间占用;b)比较Oracle XML不同存储方式下的典型数据检索速度;c)比较Oracle XML不同存储模式下的数据插入效率;综合实验结果,对Oracle XML可用性得出结论,并对XML使用提出建议。

实验一住院病历占用空间比较目的:比较相同的电子病历数据在常规关系型设计下、以及Oracle XML不同存储方式下的磁盘空间占用。

1.样本数据:取得某用户(床位800)真实电子病历数据,2008-07-01~2009-02-28,共8个月住院病历,67713记录;2.按电子病历记录和电子病历内容相同结构和索引建立,T_EPR_LIST、T_EPR_TEXT,装入样本数据;3.编写电子病历内容转为XML的函数;依次将电子病历数据转为XML方式存储的数据表:a)T_XML_B_B:Binary XML,Basic Fileb)T_XML_B_H:Binary XML,Secure File,Compress Highc)T_XML_B_M:Binary XML,Secure File,Compress Mediumd)T_XML_B_N:Binary XML,Secure File,No compresse)T_XML_C_B:CLOB,Basic File4.对数据表进行分析统计,并进行空间占用结果查询;a)特别注意:由于LOB的数据可能不直接存储在数据表的行上,而存储在对应的LOBSEGMENT对象中,并通过LOBINDEX实现与TABLE行数据的联系;因此空间统计时,必须注意增加这两个部分:5.编写将XML文件输出为操作系统文件的程序,执行输出、压缩,查看文件大小记录。

<详细内容,请查看附件指示的脚本文件和C#程序文件>结果表明:◆Binary XML数据表的空间占用,基本符合预期的压缩比例顺序。

◆T_XML_B_H表(即Binary XML,Secure File,Compress High方式)占据空间最少:仅为原关系型存储方式的185408/(401408+7168)*100%=45%;◆其空间占用甚至已经大大低于了操作系统文件方式。

实验二按体温检索病历时间比较体温是病历数据中常见的数值型数据,检索一个体温范围的数据记录,是查询能力的重要体现。

目的:记录关系型数据表和不同Oracle XML存储方式下XML数据表执行“范围比较查询”的时间,从而判断该方式查询能力的高低。

方法:1.样本数据:基于实验一完成的各种存储方式的数据表;2.对关系型数据表和各种方式的XML数据表分别执行10天、20天、30天不同时间段数据查询体温在39.3和40之间的入院记录,记录结果。

结果:注:1.RQ即关系表的查询、BXQ/…依次为Binary XML的BasicFile和SecureFIle无压缩、中等压缩、高压缩等存储方式的查询、CXQ即CLOB XML表查询。

2.实验过程中基于XML数据表的查询非常稳定,多次查询时间差别不大,基于关系型表的查询则非常不稳定,同一时间条件的首次查询和第二次查询差别非常大,这可以理解为内存缓冲区影响,当然至少也说明目前的XML创建方式还不能直接利用内存缓冲(后查:LOB本身有是否使用CACHE的存储设置,默认为NOCACHE)。

考虑实际中,重复同一条件查询的情况较少,上表RQ均记录的首次查询时间。

分析:◆Binary XML具有非常明显的查询优势,查询时间随关系型、Basic File和Secure File无压缩、中等压缩、高压缩的顺序递减◆BXQ/h的速度更是优于非结构化查询几倍。

实验三主诉检索病历时间比较主诉是电子病历最重要的内容之一,初级结构的病历中,主诉多是是基于文字的描述,基于主诉的检索在实际中普遍存在;无论何时,包含查询都是不可缺少的,其速度也应该是检索查询能力的重要方面。

目的:记录关系型数据表、及不同Oracle XML存储方式下XML数据表,执行“包含查询”的时间,以验证其查询能力。

方法:1.样本数据:同样基于实验一完成的各种存储方式的数据表2.对关系型数据表和各种方式的XML数据表,分别执行10天、20天、30天不同时间段数据查询,检索主诉中包含“发热”和“腹泻”的入院记录,记录查询时间。

结果:1.含义同上2.实验过程中,该查询中的关系型数据查询(RQ),时间波动非常大,有时甚至出现20天比10天查询时间更短的情况,同样断言这和内存缓冲区有关系。

上表结果,在时间间隔上一致,但在实践起点上不完全一致,以尽量避免内容缓冲区的影响。

分析:◆在文本包含查询方面,XML方式没有超越关系型表查询的表现;◆如果我们要采用XML方式,BinaryXML高压缩存储是所有XML存储方式中最快的。

实验四C#的XML数据插入时间比较XML数据是复杂的大数据,ZLBH使用的C#程序在实现XML数据插入的性能表现,是决定最终应用数据插入性能的重要方面。

C#连接Oracle数据库的Provider主要有两种:◆System.Oracle.Client:微软公司提供,没有直接提供访问Oracle XMLTYPE数据类型的方式,但可以通过Oracle Lob数据类型,转换后达到访问Oracle XMLTYPE的目的。

◆ODP(Oracle Data Access Provider):Oracle公司提供,可直接访问Oracle XMLTYPE数据类型,也可以通过Oracle lob转换后实现对Oracle XMLTYPE的访问。

两种方式读写Oracle XMLTYPE数据字段的具体实现,请参看附件的指示的C#程序代码。

目的:比较不同大小的XML数据在两种数据连接方式下插入数据表的时间,以便获得程序实现的参考。

方法:1.样本数据:a)小XML文件:从实验一产生的XML数据表中,获得ID=667031的入院记录,另存为文件,大小9K=9283B。

(该大小基本是XML入院病历的常规大小)b)大XML文件:将上述文件的内部节点复制粘贴50次,保存产生文件,大小461K=472238B;c)特大XML文件:直接使用Word编辑产生包含图形等数据的OpenXML文件,大小1.7M=18063637B2.分别按照无压缩、中等压缩、高压缩的方式创建三个SecureFile Binary XML数据表:a)为减少其他字段的影响,仅必要的标志性非XMLTYPE字段;b)创建脚本如下,依次将表名称书写为t_Doc_h、t_Doc_m、t_Doc_n,压缩方式对应3.编写C#程序向三个表插入指定文件的XML内容。

结果:考虑运行的稳定性,我们统一记录100次插入的时间耗用,单位毫秒:分析:◆无论哪种连接方式、哪种压缩方式,单次插入保存的速度都是可以接受的,1.7M文件最慢的插入速度为:91294毫秒/100次/1000=0.92秒;这个速度绝对是以前ZLHIS病历保存无法企及的。

◆插入方式的比较:无论在哪个文件大小或哪种压缩方式下,ODP直接XML插入速度都具有明显的优势,小文件插入耗时更是不到其他方式的50%;◆压缩方式的影响:两个较大文件的测试数据显示压缩程度越高插入速度越低,最大的影响程度也没有超过15%;其中小文件测试测试不符合,可能正是因为其对速度的影响不大,甚至不如操作系统等环境基本稳定性的影响。

综合结论通过实验,可以得到以下的结论:1.Oracle XML已经完全可以在我们的应用中使用,推荐使用的“Secure File, Binary XML,Compress High”:◆在存储空间上远优于对等的关系型扩展设计和直接大对象存储;◆在首次查询速度不输于对等的关系型查询,在数值比较查询上显示出对关系型查询的明显优势;2.Oracle XML数据的保存,实验提到的ODP直接XML保存、OPD经CLOB转换保存和System.Oracle.Client经CLOB转换保存等方式都可使用,可根据实际情况选择连接方式;推荐使用效率最高的ODP直接XML保存。

补充说明:1.上述所有实验中使用的XML数据表,均未建立任何XML索引;资料及过程中其他的实验表明,XML的索引也有助于查询效率的提升;因还没有进行全面的实验和整理,暂不对其进行讨论。

2.在数据库中使用XML最大的好处,即XML/SQL二元性,允许XML操作SQL数据和SQL操作XML内容,且使用XQuery和XPath等标准方法。

我们另外进行了XML节点查询、节点删除、节点更改的相关实验,具体内容请阅读《Oracle XML 节点操作试验》附加问题:PL/SQL中查询XML字段的问题:目前在PL/SQL中(最新版本9.0.2)还不能直接查看XMLTYPE字段的内容,对表执行“查a)b)如果将语句写成:Selectt.ID, t.Title, t.CreateTime, t.Content Fromt_Doc_H t;直接查看XMLTYPE字段,可能导致异常或者一个无法中断的查询。

c)在SQL-PLUS中,查看XMLTYPE字段不受影响,但由于该字段往往内容多,实际难以达到有效观察的目的。

问题查询语句:在试验数据中,执行下面的语句,显示结果表示该记录符合:2008-12-01~2008-12-10条件更改为Where 内容Is Null,同样没有查询结果。

换用其他的查询方式,得到解决。

附件:1.bhxml.sql,包含本实验中使用的所有SQL和存储过程的脚本示例;2.xmlTest.cs,包含本实验中使用的所有C#程序代码,因时常在连接方式见切换,部分有效表现为屏蔽状态;3.bhxml.dmp,本实验产生的数据库用户BHXML导出文件,必要时可恢复运行实验内容。

相关主题