1
EnterpriseDB企业级功能特性
EnterpriseDB白皮书
本白皮书适用于DBA、开发人员以及架构师
2009年7月内容提要
在过去的20年中,PostgreSQL赢得了世界上最先进的开源数据库的殊荣。EnterpriseDB公司的企业版建立在坚固的基础版PostgresSQL之上,同时又添加了许多基础版没有的增值功能。
EnterpriseDB的企业版为基础版PostgreSQL添加的功能解决了广泛的企业级需求,包括高性能,维护管理组件,高可用性,可扩展性。另外,EnterpriseDB提供了24x7“不间断”的技术支持,培训以及面向应用开发人员,DBA和全球运营团队的专业服务。那些希望获得高性价比,企业级数据库的组织,以及原来使用PostgreSQL的众多用户都成为EnterpriseDB企业版的忠实用户。
如果您想深入讨论您组织中的一些特殊需求,可以发送邮件到sales@enterprisedb.com,由EnterpriseDB专家组给予解答。
概览
EnterpriseDB企业版建立在基本版PostgreSQL之上,并同PostgreSQL一起走到了今天。经过20年的发展,EnterpriseDB企业版已经发展成能够满足现代各种需求的数据库。它不但因强大的事务处理能力而知名,同时对于各种查询密集型的应用以及混合负载的应用也表现出色。
作为基于开源的企业级数据库,从一个产品发展的角度去看,EnterpriseDB正是利用了基本版的各种开发特点,加强并且改善了企业版,来满足企业应用程序对高性能,稳定性以及可扩展性的广泛需求。
EnterpriseDB也是一个PostgreSQL社区中的活跃分子,它对改进PostgreSQL中的许多关键技术做出了突出的贡献,包括:维护缓冲、性能调整、增强安全性等等。公司聘请了社区中的主要成员,并且发起了许多新的项目,创造了更多新的特性,比如HOT存储行(HeapOnlyTuples),全文检索(FastTextSearch),StackBuilder,甚至于许多管理和开发工具,像pgAdminIII也是EnterpriseDB公司发起的。另外,EnterpriseDB也与其他社区领导者合作,比如NTT(NipponTelephone&Telegraph),一起发起了
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
2
性能
PostgreSQL的一些创新性的特性,如同步复制。EnterpriseDB同时也独立地管理GridSQL开源项目,这个项目为PosgreSQL用户提供了更高级的并行查询能力。
有许多特性使得EnterpriseDB企业版比PostgreSQL更出色。其中有一个特性就是Oracle的兼容性(请参见《Oracle兼容性开发者指南》)。之所以提它是因为EnterpriseDB企业版对Oracle兼容这个特性对于许多组织的企业级应用程序来说是非常关键的(也是可获得的)。这些特性包括查询优化提示、EDB*Loader以及高性能批量SQL处理。基本版和企业版的主要区别可以总结如下:•性能
o动态性能调整(DynaTune™)o查询优化标记oEDB*Loader
o高性能批量SQL处理o查询跟踪器o异步预取•管理
oDBA管理服务器oDBA实时监控平台
o动态实时性能分析架构(DRITA)o软件升级管理o安全审计o数据库移植•可用性
o企业级功能包o过程语言调试器o事务错误恢复•可扩展性
oGridSQL
o无限缓存(InfiniteCache)o数据库链接(DBLink)
通过向基本版加入这些新特性,EnterpriseDB发布了一个企业级的数据库平台,它提供了快如闪电般的高性能,接近线性的可扩展性,99.99%的高可用性,坚固的安全性,对复杂事务处理的支持,以及接近实时的全局数据库复制功能。所有这些特性安装都非常简单且易于使用,为企业大幅度降低了IT总成本。
本文如下部分将提供企业版在基本版之上的这些增值特性的详细描述。
EnterpriseDB企业版的这些性能增强的新特性主要源于EnterpriseDB对Oracle的兼容性的广泛投资之中。许多特性设计之初是为了兼容oracle,但之后却被应用于其他的许多非Oracle的应用程序,包括查询优化标记
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
3
(OptimizerHints),EDB*Loader和高性能批量SQL处理。关于EnterpriseDB企业版兼容的Oracle的特性的细节描述可以参见EnterpriseDB的白皮书。
动态性能调整(DynaTune™)
EnterpriseDB的动态性能调整通过简易的工作量测评可以对数据库进行优化预设,大大的简化了DBA和应用开发人员经常面临的调优难题。通过对数据库参数的基本调整,数据库能够更好地利用服务器的软硬件资源,从而使得数据库在安装之初便达到一个理想的优化状态。
那些世界上最流行的数据库似乎都不约而同地遵守了这样一个调优的谚语:“调优选项越多越好”。然而数据库专家指出,过多的调优选项往往会使DBA们不知所从。可能您调整了部分参数,但它们只对一小部分性能有提升,而对整体性能影响不大。因此,最好的调优方式是将粗粒度和细粒度调整相结合,而不是单独地调整某些参数。
动态性能调整避免了EnterpriseDB数据库调整时的不确定性。它使用一个经过了广泛测试的复杂算法,通过设置许多硬件参数来设置数据库的配置选项。如下的这个安装时的性能调整为以后的高性能奠定了基础,并且用户还可以根据以后系统使用的需要做进一步的调整。
图1在安装器中进行动态性能调整
另外,如果硬件更新了(比如,增大了内存),动态性能调整将会在数据库启动的时候自动地校正调优参数,以保证系统在新硬件配置中的性能提升。
查询优化标记
查询优化标记使得应用开发人员能够手工地影响SQL优化器的执行计划。对于开发人员而言,优化器对部分数据查询规则的选择并不是最适合的,比
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
4
如:开发人员设计时已经知道某个特定的查询使用某个索引更快,此时可以直接指定SQL的查询计划,以达到预期的执行效率,避免查询优化器重新进行执行计划的选择。
在数据库使用中,一个常见的情况是:预计的查询时间与实际的执行时间不一致。数据库会为每一个查询在第一次执行的时候生成一个查询计划,而这个计划在以后的大多数执行情况下,可能并不一定是最好的执行优化方案。例如,数据库在小表上通常采用顺序扫描(sequentialscan),而在大表上采用索引扫描(indexscan)。因此,为一个小表产生的查询计划,在表逐渐增大时就会变得不合适了。
考虑一个通用的商业数据库应用的实际情况:日常事务表。在每天开始的时候,可能表中只有很少的数据,但是等到这一天结束的时候,就可能包含好几百万条数据了。因此,那个为表的开始状态创建的查询计划可能很快就已经不适应当前的实际情况了。一个理解这种增长状况的开发者可以通过设置查询优化标记来覆盖数据库的默认计划,从而对这个日常事务表采用更优化的索引扫描。
在一个select查询中可以很方便地添加查询优化标记,例如:
PREPAREfoo(int)ASSELECT/*+INDEX(empemp_pk)*/empno,ename,dnameFROMemp,deptWHEREemp.deptno=dept.deptnoANDempno=$1EXECUTEfoo(7369);上面的查询产生了如下的查询计划。查询“emp”表将使用“emp_pk”索引,而不会再进行顺序扫描了。
图2一个优化的查询计划
为了适用应用程序的需要,EnterpriseDB创建了许多查询标记(optimizerhints)来标记执行计划。利用标记,我们可以通过快速地返回开始的几行或者使用某种特定类型的连接(Join)来优化一个查询。所有这些标记都是为了
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
5
让应用程序开发者能够灵活地控制查询的执行,以保证应用程序一致的性能及终端用户稳定的体验。
下表列举了EnterpriseDB企业版中的查询优化标记。
表1EnterpriseDB企业版中的查询优化标记
EDB*Loader
EDB*Loader的一些特性可以改善加载文本文件(text)到数据库的性能。基础版的标准加载命令是“COPY”,但是它有一些重要的限制使得加载的时间明显增加。
第一个限制就是“COPY”命令不能处理固定长度格式的文件(fixedwidthfileformats)。但是许多文件都是这种格式的,要使用EnterpriseDB数据库,这些文件就必须被转换成不受限制的文件格式,这就导致了文件从底层被重写了两次。
另一个主要的限制就是“COPY”命令缺少错误处理机制。当使用“COPY”命令时,如果要加载文件中的一行是不合法的,所有的行都将被抛弃,并且整个文件都要被重新加载。
EDB*Loader可以将不合法的记录转移到discard文件中,从而使得当发生错误时,整个文件处理仍可继续。这样用户可以在批量加载处理完成后单独地检查discard文件中的问题数据。
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
6
然而,EDB*Loader最具戏剧性的功能还是它的直接路径加载(DirectPathload),直接路径加载忽略了影响批量处理性能的大量处理步骤,因此性能更好,但它也需要遵循完整的原子性操作,要么全做,要么一点也不做。直接路径加载利用控制文件中定义的列的描述信息来解析输入的行。然后将文件中的数据转换为列的数据类型,并创建一个内部的数据结构。之后,这个数据结构将直接被格式化成EnterpriseDB数据库的数据块。新创建的块又直接写入到数据目录中,从而略过了许多处理过程,因此能够更快地加载。
图3Copy加载和直接路径加载对比
高性能批量SQL处理
数据库在返回大量行的结果集时通常效率很低,原因在于经常性的上下文切换(contextswitching),上下文切换在数据库引擎交换信息以及存储过程返回大量结果集的时候是肯定会发生的。
如果使用一个集合来将结果集汇集到内存中,使得客户端可以访问到这些结果集,这样就大大地提升了客户端的访问效率。EnterpriseDB企业版的存储过程语言(SPL)包含了一个BULKCOLLECT语句,用来指定将大结果集放入内存中。通过将PL/pgSQL函数中使用游标处理大结果集的操作修改为SPL语法,并使用BULKCOLLECT处理大结果集操作,会使性能得到100%(甚至更多)的提升。
为了验证BULKCOLLECT的使用,请查看samplefunction1()函数。
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
CREATETABLEtab1ASSELECT*FROMaccountsWHERE1=0;CREATEORREPLACEFUNCTIONsamplefunction1()RETURNSVOIDAS$$DECLAREarowaccounts%ROWTYPE;acurCURSORFORSELECT*FROMaccounts;BEGINOPENacur;LOOPFETCHacurINTOarow;EXITWHENNOTFOUND;INSERTINTOtab1(aid,bid,abalance,filler)VALUES(arow.aid,arow.bid,arow.abalance,arow.filler);ENDLOOP;CLOSEacur;END;$$LANGUAGE'plpgsql';SELECTsamplefunction1();7
函数samplefunction1显示了使用一个简单的游标来操作大结果集。下面的函数samplefunction2实现了相同的功能,但获得了85%的性能提升。BULKCOLLECT允许开发者有选择地查找大结果集,从而极大的提高了性能。
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
8
CREATEORREPLACEFUNCTIONsamplefunction2RETURNVOIDASDECLARETYPEatab_typeISTABLEOFaccounts%ROWTYPEINDEXBYBINARY_INTEGER;atabatab_type;CURSORacurISSELECT*FROMaccounts;BEGINOPENacur;LOOPFETCHacurBULKCOLLECTINTOatab;FORALLiIN1..atab.COUNTINSERTINTOtab1VALUES(atab(i).aid,atab(i).bid,atab(i).abalance,atab(i).filler);EXITWHENacur%NOTFOUND;ENDLOOP;CLOSEacur;END;SELECTsamplefunction2();查询跟踪器
EnterpriseDB企业版的DBA管理服务器包含了一个查询跟踪器(QueryProfiler)。查询跟踪器检查数据库特定的行为,并为在数据库上运行的SQL语句创建一个报告。一个查询跟踪器的报告可以帮助数据库管理员改进系统的性能,报告的信息主要用于如下两个方面:•跟踪长时间运行的SQL语句以改进它。
•跟踪经常使用的SQL语句或者费时的操作,以作进一步性能优化。查看结果列表中的SQL语句可以按您想要的字段排序,如总执行时间(TotalExecutionTime),平均执行时间(AverageExecutionTime),或者语句统计(StatementCount),它可以针对一个给定的SQL命令统计被重复执行的次数。
可以设置过滤器来查询特定类型的SQL语句:•••••
IncludeInsertsIncludeUpdatesIncludeDeletesIncludeSelectsIncludeOthers
下图显示了DBA管理服务器中查询跟踪器的输出。
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
9
图4查询跟踪器示例输出
异步预取
异步预取(AsynchronousPre-Fetch)是EnterpriseDB企业版和基本版的一个特性,只在Linux版本中存在。它可以让数据库服务器充分利用RAID硬件设备。EnterpriseDB在企业版中进一步加强了异步预取的功能。当使用RAID时,数据库使用如下技术实现数据跨越多个磁盘驱动器:
•Striping是指RAID控制器把连续的数据分散为多个部分,分别存储到多个磁盘驱动器上。
•Mirroring是指RAID控制器将完整的数据的拷贝分别放到各个磁盘驱动器上。系统也经常把striping和mirroring结合使用。RAID配合使用异步预取非常适合如下情形:··
•数据仓库应用
•ETL(Extract,transform,andload)应用•只有少量复杂查询的应用
在没有异步预取时,磁盘I/O是序列化的——即在同一时间点只有一个I/O操作发生,并且在队列中只有一个磁盘驱动是处于活跃状态的,其他的磁盘都是空闲的。
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
10
图5不带有异步预取的访问方式
当使用异步预取时,多个磁盘I/O请求同时进行,因此,允许多个磁盘驱动器并发工作,从而减少了磁盘访问时间,这使得系统性能有了大幅度提升。
图6带有异步预取的访问方式
当查询优化器选择位图扫描(bitmapscan)来访问数据时,异步预取更进一步提高了数据库的性能。在一般查询中,那些where条件的AND/OR列可能会用到索引,异步预取将索引数据转化为位图存放到内存中来定位要选择的行。使用多个磁盘驱动器同时读写大大提高了对行数据的访问速度。EnterpriseDB将上面提到的异步预取技术贡献给了社区的PostgreSQL8.4。现在,EnterpriseDB企业版产品中包含了一个异步预取的加强版本。它提供了相同的多驱动,并发访问的能力,不仅可以使用位图索引,还可以预取普通索引。
当在下面的情况下使用常规索引扫描时,EnterpriseDB带异步预取的企业版将比基本版表现的更为出色:
·•索引的存储是完全分散的——也就是索引行的存放顺序和索引的顺序
完全不同。
·•索引中的列很少(只有一个或很少的列组成的索引)•需要检索大量的行
·
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
11
管理
EnterpriseDB企业版包含了许多基本版没有的数据库管理工具,这些工具使得数据库维护更加简便。EnterpriseDB企业版同时还提供了查看数据库内部运行情况,软件更新情况等的工具,以用来帮助用户满足复杂的运行环境的需要。
DBA管理服务器
DBA管理服务器允许数据库管理员监控数据库的实时性能,查看统计信息,确认企业版数据库的配置问题。同时,它还提供了HTML和PDF格式的报表。
图7基于浏览器的DBA管理服务器
DBA管理服务器有许多特性可以帮助管理员维护Postgres实例。其中一个特性是基础版所没有的,这个就是“作业调度(用来处理日常维护工作)”。当然,一些操作系统的调度,像cron,也可以满足一些简单的应用和测试,但这种一次性批量(“one-off”batch)的特性在企业级应用架构中会产生开发环境不一致的问题。而DBA管理服务器中的作业调度器提供了一个统一的基于浏览器的接口,它可以让管理员轻松地在控制台下查看所有的数据库作业。
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
12
图8DBA管理服务器作业调度器
DBA管理服务器还可以做到:
•监控用户活动,锁状态,缓冲区•实现查询监控的功能(如上所述)•实现交互式SQL查询•定期检查数据库系统更新
•运行各种统计数据,元数据,存储过程,安全报表等
DBA实时监控平台
DBA实时监控平台为DBA提供了一个方便快捷的,实时的监控工具。它可以动态显示服务器对系统资源的使用情况。图形化的界面显示了如下信息:•CPU的使用情况•内存的使用情况•磁盘I/O·•缓存I/O
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
13
图9DBA实时监控平台
监控界面可以和上图一样综合显示,也可以单独显示。您也可以设定显示的方式:以线性图显示还是以柱状图显示。
同时,您还可以查看连接到每个数据库服务器上的进程信息以及他们正在进行哪些查询。
图10DBA实时监控平台显示进程信息
这些实时刷新信息可以在服务器进程图表中显示,也可以在上面提到了的四个图中显示。
动态实时性能分析架构(DRITA)
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
14
通过动态实时性能分析架构,数据库管理员可以对当前正在运行的数据库进行实时性能数据的统计。这些信息可以反映某个特定操作的响应时间,也可以反映系统整体运行过程中各个操作的处理响应时间。通过这些数据,管理员可以更准确地判断导致数据库性能瓶颈的原因,分析原因,并进行相应的优化调整。
以下的截图显示了一个在运行“pgbench”性能测试时的系统负载情况。以下示例的返回结果表明大多数的运行时间花在了WAL(WriteAheadLog)预写日志的操作上。这是一个符合逻辑的结论,因为“pgbench”是一个带有大量事务处理的压力测试工具。在大部分复杂的环境中,如典型的企业级应用,就可能在运行中碰到许多不可遇见的运行瓶颈,这此瓶颈正需要下图中这些有效的数据支持,才能进行更深入的分析。
图11DRITA系统等待(SystemWaits)视图
动态运行分析器可以帮助管理员更好地理解当前系统中的性能问题。当系统遇到性能障碍时,数据库的Wait历史统计信息会被保存下来,管理员可以通过查看相关报表,来分析指定时间段的性能问题。(对于企业中的DBA来说,这是一个十分重要的功能)。例如,一个用户报告,在某天的下午1:00至1:30,应用程序运行十分缓慢。这时DBA可以通过DRITA提供的视图及函数,进行基于时间段的运行记录分析。以下过程通过两个步骤,展示了在生产环境中如何使用DRITA进行精确到时间点的系统性能分析。
步骤1:通过查询edb$snap表,得到在某一时间段中系统运行的所有数据统计信息。DBA可以从这个查询中得到一组返回结果:它们已经通过snap_id进行了排序,并且指定了时间段。从这个结果中DBA们就可以发现哪个session在运行过程中可能存在问题。在这个例子中,一个ID为3256的session在运行时花费了很长的处理时间。
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
15
图12DRITAedb$snap输出
步骤2:检查用户在此session中的运行细节。通过这个反回结果,DBA可以深入地分析在此session运行时,系统的瓶颈存在于哪个方面,以重定制对应的解决方案。
图13DRITAsessid_rpt输出
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
16
更新服务
EnterpriseDB的更新服务是DBA管理服务器的一个特性。基于浏览器方式的管理服务器为数据库管理员提供了一系列重要的功能,包括:•••••
为已安装产品提供更新和补丁包的自动可配置通知查看已安装产品的综合清单查看更新日志
手动检查数据库更新和补丁包
通过一个基于web的控制台能够更快捷地安装数据库补丁包
图14DBA管理服务器更新服务
审计日志
EnterpriseDB企业版可以产生审计报告。数据库审计使得数据库管理员,系统管理员,审计人员以及操作者能够跟踪并分析数据库的活动,以满足对各种复杂审计需求。
被审计的活动包括数据库访问,数据的创建,更改,删除等内容。整个审计系统可以通过配置文件的相应配置参数来进行设定。
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
17
图15DBA管理服务器审计报告
下面的审计特性可以帮助DBA们更好地利用、调整和管理您的审计系统:•两种报表输出格式:XML或CSV
•审计文件可以基于如下规则循环利用:
o一周的天数
o达到审计文件的最大值o基于一个特定的时间间隔
•试图连接、正常连接或断开连接的活动可以被审计
•特定类型的SQL语句(例如:导致错误的语句,所有的DDL,DML)
数据库移植
在对OLTP要求很高的实际应用中,有些数据库由于设计时应用领域的倾向性不同,在性能及功能上往往不能满足实际生产环境的需求,EnterpriseDB企业版可以很方便地将这些异构数据库迁移到EDB中来。它可以迁移Oracle、Sybase、MicrosoftSQLServer、MySQL以及PostgreSQL数据库。现在,许多企业发现他们为一些对自己来说并不关键的特性支付了太多的额外费用。由于重写这些系统或者迁移到其他系统往往要将付出很大的代价,用户经常是别无选择。
EnterpriseDB把数据库间的兼容性作为一个核心的特性包含到EnterpriseDB企业版中,并对它进行不断的改进。当前,EnterpriseDB企业版中的迁移控制台(MigrationStudio)可以移植如下商业专有数据库对象:
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
18
表2数据库迁移
可用性
对于商业软件,一个重要的特性就是可用性。现在,人们越来越多地希望一个产品能够适应多种应用需求,包括软件的可获得性,安装、配置、使用、维护的方便性以及和其他相关产品的集成性等等。
一直以来,人们批评开源软件很难使用和管理,尤其是上面提到的一些方面。在与开源相关的一些关键项目中,可用性更是一个让人头疼的问题。如果您想尝试使用一个开源软件,即使是一个开源软件的老手,也会发现下面的工作是多么的费时:首先您要找到所需要的项目,下载源代码,编译它,配置它,和其它组件集成,然后测试整个结果。在这个过程中可能会出现不少的问题,解决他们需要花很长的时间。
而EnterpriseDB企业版已将基于开源的数据库的使用的复杂度降到了最低。利用许多全球性企业组成的客户群,EnterpriseDB进一步巩固了这些数据库专家和组织希望的特性,并且把它们集成到一个简单易用的产品中。
企业级功能包
EnterpriseDB企业版建立在基础版的企业级特性之上,并且为它添加了许多新的模块,总结下来主要有如下四个方面:扩展功能,安全性,过程语言(支持超过12种编程语言)以及特性模块。
下表列出了EnterpriseDB企业版的所有组件:
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
19
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
20
表3EnterpriseDB企业版增值模块
上面列出的特性集成到一个统一的安装程序中,并且经过了反复严格的测试过程以保证产品的质量。这样确保了所有的模块,包括许多开源项目的功能都被很好地集成在一个统一的企业级数据库中。最后,自动更新通知为EnterpriseDB企业版提供的功能保证了所有的模块都被同步并且更新到最新状态。
过程语言调试器
通过过程语言调试器,开发者和DBA们能够使用一个图形化的工具在EnterpriseDB的服务器端测试并调试程序。过程语言调试器可以用来调试SPL存储过程、函数、触发器以及PL/pgSQL的函数。开发人员及数据库DBA可以跟踪代码、设置断点、修改变量并且进入或者跳出某些代码段进行调试。
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
21
图16过程语言调试器
过程语言调试器集成在Postgres控制台(PostgresStudio)中,它可以提供跨操作系统平台的数据库管理和开发。过程语言调试器另一个强有力的功能就是它可以测试服务器端的逻辑代码,像触发器,检验实际应用中的执行情况。
例如,应用开发者可以在一些涉及到员工薪酬增加的触发器中设置全局断点。之后,他启动应用程序,改变薪酬值,在运行过程中触发器就会停在某些断点上,这样他就可以查看触发器中的数据处理过程了。
这种服务器端的调试工具对于解决多个应用程序使用全局数据库代码的问题尤为有效。开发者可以在每个相关连的应用上下文中调试自己的触发器。
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
22
图17服务器端在应用上下文中调试触发器
事务错误恢复
在基本版中,如果一个应用程序哪怕产生了一个很小的错误都会导致整个事的失败。因此,当遇到这种情况时,应用程序必须需回滚整个事务。例如,我们常见的一个错误是主键冲突。一些应用程序经常会有这样的需求:向一个表中插入一条新的记录,如果主键已存在,那么就更新该行。在基本版中,如果进行插入或更新事务,需要先检查这条记录是否存在,实现它至少需要两条语句来实现。然而,使用事务错误恢复(TransactionErrorRecovery)只需在应用程序中写一个insert事务,然后在错误捕捉中写update事务就可以了,这样当检测到主键冲突时,数据库便可以自动地进行错误处理。
基本版中的主键冲突错误处理如下:
ResultSetrs=stmt.executeQuery(\"SELECTCOUNT(*)\"+\"FROMTELLERSWHERETID=1000\");rs.next();if(rs.getInt(0)==0){stmt.executeUpdate(\"INSERTINTOTELLERS(TID,BID)\"+\"VALUES(1000,1)\");}else{stmt.executeUpdate(\"UPDATETELLERSSETBID=1\"+\"WHERETID=1000\");}©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
23
EnterpriseDB企业版的事务错误恢复处理如下:
try{stmt.executeUpdate(\"INSERTINTOTELLERS(TID,BID)\"+\"VALUES(1000,1)\");}catch(Exceptione){stmt.executeUpdate(\"UPDATETELLERSSETBID=1\"+\"WHERETID=1000\");}可扩展性
现在,企业信息的架构以空前的速度增长,从而给数据管理带来了极大的难度。为解决这个问题,EnterpriseDB企业版提供了有效的解决方案,可以广泛地扩展数据库的基础结构,巩固现有的数据库间的通讯,来满足这些急剧增长的,基于web2.0的独立应用。
GridSQL
GridSQL是一种水平扩展的解决方案。利用GridSQL,您的企业不必使用昂贵的硬件设备就可以实现快速的数据库基础扩展和管理。
GridSQL是由EnterpriseDB发起的开源项目,并且完全集成到EnterpriseDB
企业版中。使用它,您可以轻松地应用当前流行的非共享(shared-nothing)的分布式架构(当前分布式架构在Google、Yahoo!等海量数据库应用中大量使用),来满足数据仓库,商业智能等的高级应用。
GridSQL的智能分发引擎允许用户以一种可配置的方式将数据分发到各个节
点,然后实现并行查询,从各个节点上抽取数据。由GridSQL集群管理节点加上各个独立数据库节点组成的数据库层在应用中被当做一个统一的虚拟数据库。因此,应用程序的运行不会有任何改变,对于开发者也是透明的,他们会感觉像是在操作某个单一服务器上的一个数据库实例一样。
图18GridSQL架构
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
24
通过将额外的服务器添加到网格中,数据库的性能可以得到大幅度的提升,呈线性增长。为了简化GridSQL的管理,EnterpriseDB为DBA们提供了一个统一的控制台来监控整个网格的运行状态。
图19GridSQL管理控制台
EnterpriseDB企业版包含了网格监控工具,运行DBA监控并调整整个网格。另外,它还直观的描述了各个节点的拥堵情况,在整个网格中保证负载均衡。在EnterpriseDB企业版版本中的GridSQL还允许方便地将各个节点添加到网格中,或从网格中移除。
无限缓存(InfiniteCache)
一个限制数据库性能的因素就是数据库服务器可用于共享缓存(sharedbuffercache)的内存量。所有请求的数据必须首先被读到共享缓存中才能使用。数据在缓存中的访问速度比直接从磁盘读取将快很多。
一般而言,经常会出现这样一种情况,那就是共享缓存已满,新请求的数据需覆盖缓存中已经存在的部分数据。而且这种状况会因内存大小的限制频繁地发生。在某些应用下,这已成为制约数据库性能的一个严重的瓶颈。因此,如果我们可以获得无限大的内存空间,那么数据库的性能将达到一个更高的层次,因为我们不必再为数据在内存中频繁的换入换出而发愁。EnterpriseDB企业版的无限缓存(InfiniteCache)技术正是基于这样一种概念。无限缓存现在只在Linux系统中可以获得,它允许EnterpriseDB企业版通过网络访问多个廉价低端服务器的内存,作为缓存服务器。
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
25
无限缓存提供了一种“缓存刀片(cacheblade)”的架构,使得用户使用低端的硬件设备即可实现。而不用使用昂贵高端的服务器。
图20无限缓存架构
使用了无限缓存之后,当一个数据块第一次被读取时,数据库把它从磁盘读入共享缓存(sharedbuffercache)中,同时也复制到缓存服务器上。如果在之后的一小段时间内,又有新的请求需读取这个数据块,数据库会首先从共享缓存中查找。
这样,如果此数据块被换出共享缓存,数据库还可以从多个缓存服务器上搜索,而不是立即从磁盘上读取。因为一般多个备用缓存服务器的内存会明显比单个数据库服务器的共享缓存大很多,所以数据块从备用缓存服务器上命中率也会大很多。这也使得数据的访问比从磁盘读取更高效。只有在所有的缓存服务器上都找不到请求的数据时,数据库才会从磁盘上读取。
无限缓存更强大的一点在于所有这些操作对于应用程序而言都是透明的,也就是说程序开发人员无需在程序中进行任何额外的编码。这也是无限缓存带给我们的好处。
为了进一步增强备用缓存,无限缓存还提供了数据压缩技术。在将数据真正读入缓存服务器之前,根据系统的实际情况把数据以不同的比率进行压缩。压缩技术使得更多的数据能够存放到备用缓存中,同时也减少了网络传输的带宽。
无限缓存还允许您“预热(warm)”缓存服务器。也就是说选中的表,不管带索引的还是不带索引的,可以在应用程序启动前预先加载到备用缓存中来。如果我们预先知道应用程序将会使用哪些表,那么缓存服务器的预热将会明显地加快数据库的访问。
您可以从每个缓存服务器上获得一些实用的统计数据来分析数据库的性能和效率。
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
#edb-icache-tool192.168.23.85:11211statsFieldbytesbytes_readbytes_writtencmd_getcmd_setconnection_structurescurr_connectionscurr_itemsevictionsget_hitsget_misseslimit_maxbytespidpointer_sizerusage_systemrusage_userthreadstimetotal_connectionstotal_itemsuptimeversionValue105168142114105382444254441458351396851265881044126588051395301551073741824304732109.07741721.4237431124236710711512658810951.2.626
下图显示了在EnterpriseDB企业版中使用了无限缓存和没有使用无限缓存带来的巨大性能差异。
图21使用和没有使用无限缓存的对比
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
27
由于无限缓存的原理是尽可能多地将已读过的数据保存在备用缓存中,因此对于那些频繁访问某些相同数据的应用来说,无限缓存能给他们带来更多的性能提升。下图比较了两种不同的应用——一种是应用中包含了部分update操作,一种是只读的应用。对于只读应用,无限缓存带给数据库更明显的性能提升。
图22无限缓存在带更新的应用和只读应用中的对比
最后一个图显示了在update和select应用中,基本版和使用了无限缓存的企业版的对比。很明显,能够获得戏剧性的性能提升的还是只读的应用。
图23基本版和使用了无限缓存的企业版对比总之,无限缓存提供了如下的特性:
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
28
·•使用廉价的硬件设备作为缓存刀片来增加内存,控制扩展的成本。·•对应用程序是透明的,无需任何额外编码。
·•提供了不同级别的数据压缩,以将更多的数据压入内存,也减少了网络
带宽。
·•将需要的表,索引预加载到缓存中,这样在使用中不需要等待加载,便
可以立即获得性能的提升。
·•提供工具来获得各个缓存的统计数据以更好地调整数据库的性能。
数据库链接(DBLink)
一个数据库链接(DatabaseLink)定义了从一个数据库服务器到另一个数据库服务器的通信信道。使用数据库链接的一个好处是:它允许用户能够访问一个远程数据库的对象。这样,该用户便被绑定到远程对象的用户权限集中。数据库链接同时也是分布式数据库的基础,一个应用程序可以同时访问分布式环境中的多个数据库。例如,一个客户端可以从本地库中发起一个简单的查询,而连接远程数据库的表。数据库的位置和使用的平台对于客户端应用程序来说是透明的。
图24数据库链接
©EnterpriseDBCorporation,2009Allrightsreserved.
EnterpriseDB企业级功能特性
29
结论
PostgreSQL是世界上最先进的开源数据库,它可以通过网络每天处理数十亿的事务。
EnterpriseDB公司是PostgreSQL项目的主要参与者和贡献者,它同时发布了EnterpriseDB企业版。EnterpriseDB企业版是基本版PostgreSQL的增强版,包含了许多基本版没有的特性。包括安装,管理,简化使用,性能以及可扩展性。另外,企业版还为用户提供了各种专业的服务:包括培训,24x7“不间断”技术支持以及专业的服务。
不少企业希望获得一款高性价比的企业级数据库,同时还希望它能具有对其他价格昂贵的企业级数据库的兼容能力。EnterpriseDB企业版已经完全达到了他们的要求,甚至比他们希望的还要好。
要获得EnterpriseDB系列数据库的更多信息,请通过https://www.enterprisedb.com/about/contact_us.do联系我们,或者可以联系我们的销售部:sales-us@enterprisedb.com(US),sales-intl@enterprisedb.com(Intl),或者致电+1-732-331-1315,1-877-377-4352
关于EnterpriseDB
EnterpriseDB是全球领先的新一代企业级关系型数据库管理系统(RDBMS)厂商。EnterpriseDB提供了包括企业版、标准版、基本版(世界最先进的开源数据库PostgreSQL)等产品及服务,能够很好的满足OLTP应用的需求:更高的性能,更好的扩展性以及对一些闭源数据库的兼容性。在不损失特性及软件的质量的前提下,EnterpriseDB是对闭源数据库的一个很好的商业替代或补充。EnterpriseDB成立于2004年,总部位于美国的波士顿,在美国新泽西、印度的Pune和巴基斯坦的Islamabad均设有研发和支持中心,并在英国设有数据库性能测试中心。在全世界各地均设有分支机构,中国分支机构于2009年3月在北京设立。要获得更多的信息,请参见http://www.enterprisedb.com,或者通过+1-732-331-1300联系我们。
关于浦华众城
北京浦华众城科技有限公司是中国领先的开源解决方案提供商,本着“技术为基础,服务为根本,信誉为保障”的宗旨,为客户规划、实施和管理IT系统,提供高性价比的整体IT解决方案架构与服务,以实现客户降低IT运营和维护成本、达到行业内IT化的绝对领先,提高客户自身核心竞争力的目标。2009年3月浦华成为EnterpriseDB大中华区独家总代理,全面负责EnterpriseDB在大中华区的推广销售和支持活动。要获得更多的信息,请参见http://www.unistech.com.cn,或者通过800-810-0997联系我们。
©EnterpriseDBCorporation,2009Allrightsreserved.
因篇幅问题不能全部显示,请点此查看更多更全内容