Oracle TimesTen内存数据库 60版推荐编程实践.pdf
《Oracle TimesTen内存数据库 60版推荐编程实践.pdf》由会员分享,可在线阅读,更多相关《Oracle TimesTen内存数据库 60版推荐编程实践.pdf(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 Oracle TimesTenOracle TimesTenTMTM内存数据库 内存数据库 6.0 版推荐编程实践6.0 版推荐编程实践 性能和稳定性最佳的 TimesTen 应用程序的设计方法 内存数据库内存数据库 版权 1996、2005 归 Oracle 公司所有。未经允许不得以任何方式和手段进行复制和使用。附带的和光盘上的软件和文档(不管是硬拷贝形式还是电子形式)的使用和披露均应依据本许可协议。被许可方可印刷存储在光盘上的文档,但仅限内部使用。除上面提到的以外,未经 TimesTen 公司事先书面许可,不得以任何电子或机械形式或手段,包括影印、录制或通过任何信息存储和检索系统,复制或
2、传播本文档的任何部分(不管是硬拷贝形式还是电子形式)。Oracle、JD Edwards、PeopleSoft、Retek、TimesTen、TimesTen 标志、MicroLogging 和 Direct Data Access 是 Oracle 公司和/或其子公司的商标或注册商标。其他名称可能是其各自所有者的商标。程序(包括软件和文档)包含专有信息;是依据一份包含了使用和披露限制条款的许可协议而提供的,并受版权、专利其他知识产权和工业产权法的保护。除非法律有明确规定,或是为实现与其他独立开发的软件间的互操作性,否则不得对软件程序进行反向工程、反汇编或反编译。本文所含信息如有变动,恕不另行
3、通知。如果您在本文中发现任何错误,请书面通知我们。我们不保证本文没有错误。除非在您的许可协议中对此有明确许可,否则不得为任何目的,以任何电子或机械形式或手段复制或传播这些程序的任何部分。2005 年 8 月 19 日 在美国印刷。目录 1 概述 TimesTen 文档参考索引.1 术语.1 “TimesTen 应用程序”或“直连应用程序”.1 “TimesTen 客户机/服务器应用程序”.2 install_dir.2 C+用户:考虑使用 TTClasses.2 2 实现最佳性能 TimesTen 文档中的性能信息.4 有关最常见问题的(影响性能的因素)建议.4 运行对性能要求高的直连应用程序
4、.4 预先准备好所有 SQL 语句.5 控制磁盘写频率.6 为查询创建合适的索引.6 使用“showplan”验证是否使用了合适的索引来进行查询.8 关闭自动提交(autocommit)并定期提交.9 C/C+(ODBC)与 Java(JDBC)性能比较.9 通过在加载数据之后创建索引来加速(大批量)数据加载.10 使用 TTClasses,避免使用 OLEDB、ADO 和第三方中间件.10 多 CPU 性能调优.10 使用连接池.11 最大限度地提高数据库的并发性.11 及时关闭只读游标.11 避免大批量的删除语句.11 考虑使用“DELETE FIRST NumRows”.12 缩短不必要
5、的长期运行的事务.12 3 最大限度地提高稳定性 最大限度地提高稳定性.13 TimesTen 文档.13 TimesTen 架构和数据库恢复简明指南.13 避免应用程序的意外失败.14 必须断开 TimesTen 应用程序与数据库的连接.14 避免对 TimesTen 应用程序使用“kill 9”命令.14 备份.14 检查点.15 其他好的实践.15 检查所有 ODBC 函数的返回码,然后处理它们.15 处理数据库失效错误.16 处理死锁和锁超时错误.16 从一个已满磁盘恢复.17 4 复制和 XLA 复制.18 将 DSN 名用作文件名前缀.18 在进行duplicate 操作之前执行两
6、个检查点操作.19 复制配置应(手动)指定端口号.19 监控复制.20 SEQUENCE 与复制和故障恢复的相互影响.21 XLA.21 使用持久性 XLA.21 始终监控 XLA.22 最大限度地提高 XLA 性能.22 索引 1 Oracle TimesTen内存数据库推荐编程实践 1 概述 本文详细介绍了如何利用 TimesTen 开发具有最佳性能和强健性的应用程序。TimesTen 文档参考索引 TimesTen 文档参考索引 下表列出了本文引用的章节,以及它们在 TimesTen 6.0 文档中的位置。?TimesTen 内置程序:tt_ref.pdf?性能调优:C_dev.pdf;
7、java_dev.pdf?TimesTen 查询优化器:operations.pdf?事务管理与恢复:operations.pdf?警告与错误:tt_ref.pdf?TimesTen 实用程序:tt_ref.pdf?TTClasses:ttclasses.pdf 术语 术语 下面是本文所使用的一些术语及其含意。“TimesTen 应用程序”或应用程序”或“直连应用程序”“直连应用程序”本术语指一个直接连接到 TimesTen 数据库的应用程序。C 和 C+应用程序显式地连接到下列共享库之一:?libtten.so(Solaris、Linux)?libtten.sl(HP-UX)?tten60.
8、lib(Windows)?等等 以“直连”模式使用 TimesTen 的 Java 应用程序以“jdbc:TimesTen:direct:.”的形式连接数据源。这些应用程序与它们所访问的 TimesTen 数据库驻留在同一台机器上。这样一来,再通过使用“直连”TimesTen 驱动程序,TimesTen 应用程序将可获得 2 Oracle TimesTen内存数据库推荐编程实践 最佳性能。“TimesTen 客户机客户机/服务器应用程序”服务器应用程序”该术语指一个使用 TimesTen 客户机/服务器接口来与数据库连接的应用程序即显式地连接到共享库中?libttclient.so(Solar
9、is、Linux)?libttclient.sl(HP-UX)?ttcl60.lib(Windows)?等等 以 客 户 机/服 务 器 模 式 使 用TimesTen的 Java应 用 程 序 以“jdbc:TimesTen:client:.”的形式连接数据源 客户机/服务器应用程序可与 TimesTen 数据库驻留在同一台机器上,也可驻留在其他机器上。客户机/服务器应用程序的运行速度要比直连应用程序慢很多。无论是直连应用程序还是客户机/服务器应用程序,提供给它们的 API 和功能都是一样的。install_dir 这是 TimesTen 的安装路径。参考 OracleTimesTen 内存
10、数据库安装指南了解更多信息。默认路径为:?/opt/TimesTen/InstanceName(UNIX;根用户安装的实例)?$HOME/TimesTen/InstanceName(UNIX;非根用户安装的实例)?C:TimesTentt60(Windows)注意:基于安全的考虑,我们推荐,如果可能的话,以非根用户的身份安装TimesTen。C+用户:考虑使用 TTClasses C+用户:考虑使用 TTClasses TimesTen C+接口类,即 TTClasses,编写它的目的是提供易用、高性能的TimesTen 接口。C+类库为大多数常见的 ODBC 功能提供了“封装”,包括SQL
11、查询执行、事件通知(XLA)和系统目录信息。此外,TTClasses 的设计采用了许多本文推荐的实践。TTClasses 类包含在 TimesTen 内存数据库中。与 TimesTen 一起提供的还有一些有用的示例应用程序,用于演示如何使用TTClasses 类。在示例程序中包含如下一些程序:示范如何监视和管理 TimesTen 3 Oracle TimesTen内存数据库推荐编程实践 数据库;如何使用 TimesTen 的 XLA 实施一个事件通知程序;如何估计数据库的大小;以及如何管理 XLA 书签。4 Oracle TimesTen内存数据库推荐编程实践 2 实现最佳性能 本章重点讨论如
12、何编写具有最佳性能的 TimesTen 应用程序。TimesTen 文档中的性能信息 TimesTen 文档中的性能信息 现有的 TimesTen 文档是学习关于如何调优应用程序性能的基础知识的首选资源。在阅读本章其余部分之前,请务必认真阅读 TimesTen 文档“性能调优”这一章。有关最常见问题的(影响性能的因素)建议 有关最常见问题的(影响性能的因素)建议 本章的其余部分将讲述那些客户经常遇到的问题。请注意,这些问题在TimesTen 文档中也有所描述。运行对性能要求高的直连应用程序运行对性能要求高的直连应用程序 通过使用 TimesTen 的“直连”ODBC 和 JDBC 驱动程序,并
13、在数据库所在的机器上运行应用程序,就很容易实现 TimesTen 的最佳性能。其他机器上的应用程序可通过客户机/服务器模式访问 TimesTen 数据库,但网络流量负载将极大地降低性能。通过利用 TimesTen 的 Replication 和 Cache Connect to Oracle 技术,通常可以在本地访问数据,而不会产生客户机/服务器模式的流量负载。注意:TimesTen 采用客户机/服务器架构模式运行虽然不如采用直接内存模式运行得快,但它还是很快的。TimesTen 客户机/服务器应用程序比连接到传统的客户机/服务器数据库的应用程序性能高;尤其是,与传统的数据库相比,TimesT
14、en具有更高的吞吐能力。在下面这些情况下,应考虑以客户机/服务器模式连接 TimesTen 数据库。1)应用程序运行在一台主机上,TimesTen 数据库驻留在另一台主机上。2)一个 32 位的客户端应用程序必须连接到 64 位的 TimesTen 数据库,并且 32位的客户端应用程序无法重新编译为 64 位。如果应用程序与 TimesTen 数据库在同一台机器上,或能够被重新部署到该机器上,但是不能被重新编译为64 位模式,TimesTen 建议采用 TimesTen 共享内存进程间通信(SHMIPC)。5 Oracle TimesTen内存数据库推荐编程实践 对于客户机/服务器模式的数据库
15、连接而言,与 TCP/IP 连接相比,SHMIPC大幅提高了性能。需要有大量 TimesTen 客户机/服务器连接的系统设计应考虑到每一数据库连接均都会消耗服务器主机的操作系统资源。在服务器主机的规模设置和操作系统调优过程中应考虑这一因素。预先准备好所有预先准备好所有 SQL 语句语句 为实现最佳性能,应预先准备好那些执行不止一次的 SQL 语句。这一准则适用于所有关系数据库;但是对于 TimesTen 及其极高的事务处理速度来说,编译一条语句所耗费的时间实际上要比执行该语句所花的时间多好几倍;因此,未预先准备好语句的应用程序将使 TimesTen 的性能大打折扣。除了要预先准备好语句,那些语
16、句的输入参数和输出列也应预先绑定。欲了解有关语句准备的更多信息,请参考 TimesTen 文档“性能调优”一章标题为“预先准备语句”部分。ODBC 用户使用 SQLPrepare 函数预先准备语句。TTClasses 用户使用 TTCmd:Prepare()方法预先准备语句。JDBC 用户使用 PreparedStatement 类预先准备语句。TimesTen 查询优化器十分擅长选择最优的查询计划;然而,为了选择最优计划,它需要获得复杂查询所涉及到的表的更多信息。就查询优化器选择最优查询计划来说,数据库统计信息对其是很有帮助的。通过了解表的行数和列值数据分布,优化器更有可能选择出一个高效的表
17、查询计划。因此,通常一个好的做法是,在准备访问那些表的查询语句之前,先更新数据库中所有表的统计信息。注意,如果你在表包含行之前更新表的统计信息,那么将会以表没有包含行(或包含很少的行)为假定来对查询进行优化。如果你后来向表中添加了数百万行,然后执行查询,那么在表只包含极少数行的情况下工作良好的查询计划现在可能会变得很慢。因此,你应该在向表加载数据后,在准备查询语句之前,更新表的统计信息。欲了解关于更新统计信息的更多信息,请参考 TimesTen 文档“TimesTen 内 6 Oracle TimesTen内存数据库推荐编程实践 置程序”一章对 ttOptUpdateStats 和 ttOpt
18、EstimateStats 的描述。有关其他 ttOpt*内置程序的描述也包含在这一章之中,你可以借此了解更多有用信息。控制磁盘写频率控制磁盘写频率 多数应用程序都要求某种级别的数据库持久性;也就是说,如果系统崩溃(因某种类型的软硬件故障),应用程序要求最近对数据库所做的更新不会丢失。利用 DurableCommits 连接属性可以有多种方法来配置 TimesTen:?第一种方法是以连接属性 DurableCommits=1 来连接 TimesTen 数据库。在这种连接中,每一次事务提交都会将事务日志写入磁盘;因而,应用程序将拥有充分的持久性。然而,设置 DurableCommits=1,应用
19、程序的写性能将大大降低。注意:如果数据库中存在大量用户并发写库的情况,使用DurableCommits=1 仍能够获得很好的整体吞吐能力。?第二种方法是,内存事务缓冲区一旦变满(默认方式,即 DurableCommits=0),TimesTen 数据库就将缓冲区数据写入磁盘。该方法可实现最佳性能,因为只在确实有必要时,才执行磁盘写操作,事务处理永远不会因写磁盘而受阻;然而,采用这种方法的应用程序将无法确切知道其事务处理的持久性水平(毫无疑问它不会丢失比内存日志缓冲区能容纳的事务更多的数据)。对 于 使 用DurableCommits=0的 应 用 程 序,TimesTen内 置 程 序ttDu
20、rableCommit 使应用程序开发人员能够精确确定 TimesTen 内存日志缓冲何时被写入磁盘,从而可将持久性和性能控制到合适水平。应用程序能够确定哪些事务会导致同步的磁盘写操作,哪些不会。通过这种方式,应用程序能够精细地平衡性能和数据持久性。对于某些应用程序,按设定的时间间隔调用ttDurableCommit 是很合理的,这样能保证一次仅会损失极少的,例如约 100 毫秒的未写入磁盘的日志缓冲区数据;对于其他应用程序,某些提交操作必须使数据库处于持久状态(例如,账户间的资金转移)。不管 DurableCommit 如何设置,TimeTen 复制和/或从 TimesTen 到 Oracl
21、e 的更新传播可被用来进一步提高事务持久性。为查询创建合适的索引为查询创建合适的索引 想要知道创建多少索引才能实现最佳数据库性能颇有难度。如果你创建的索引太少,那么某些经常性的数据库操作会比平常慢;如果你创建的索引太多,那么插入/更新/删除操作则会耗用太多的时间,因为需要额外的时间来更新索引。在设计 TimesTen 数据库表和索引模式时,有以下几个需要考虑的问题。?有两种类型的索引:哈希索引和 T 树索引。对于精确匹配查询,调优的哈希 7 Oracle TimesTen内存数据库推荐编程实践 索引要快于 T 树索引,但是哈希索引不能用于范围查询(T 树索引既可用于精确匹配查询,也可用于范围查
22、询,以及分类查询,如涉及 ORDER BY、GROUP BY 或 DISTINCT 子句的 SQL 查询)。?使用哈希索引为每个表的主键建立索引。?需要对哈希索引进行调优。应始终使用“CREATE TABLE”语句的“pages=”选项来指定表的期望大小(用 256 除以表的行数,即可得到你需要为哈希索引指定的页数)。为索引指定的页数太多将浪费不必要的空间;而指定的页数太少则会降低哈希索引的性能,因为此时哈希桶(buckets)会溢出。如果需要,可在其创建后使用 ALTER TABLE 语句来更改主键索引的大小。?通过引入一个 T 树索引(任何 T 树索引),可改进一个未包含 T 树索引的表的
23、全表扫描性能,即使对该表的扫描没有引用该索引的列。这虽然不太直观,却很容易证实。因此,你应该为应用程序的全表扫描所引用的每一个表建立至少一个 T 树索引。?一个哈希三列索引只能被用于三列全部精确匹配的查询。T 树索引列的任何前导前缀可被用于一个精确匹配查询。?在两者都可以使用的情况下,对于等式谓词,哈希索引的性能要优于 T 树索引。然而,哈希索引需要的空间比 T 树索引大。最后一条有些复杂,因此我们举例说明。考虑这样一条查询 SELECT FROM T1 WHERE COL1=?AND COL2=?情景#1:T1 表有两个索引:?哈希索引:(COL1,COL2)?T 树索引:(COL1,COL
24、2,COL3)在这种情况下,两种索引都能用于返回这一查询。此处可以使用哈希索引,因为 WHERE 子句的各列与哈希索引的各列完全匹配;T 树索引也可用于返回该查询,因为 WHERE 子句的列是该索引列的前导前缀(前两个)。TimesTen 优化器将选择哈希索引(因为它速度更快)。情景#2:T1 表有两个索引:?哈希索引:(COL1,COL2,COL3)?T 树索引:(COL1,COL2)在这种情况下,只有 T 树索引能被用于返回这一查询。此处不能使用哈希索引,因为 WHERE 查询子句中没有指定哈希索引列 8 Oracle TimesTen内存数据库推荐编程实践(COL3)。而 T 树索引的列
25、与 WHERE 查询子句中的列完全匹配。TimesTen 优化器将选择 T 树索引。情景#3:T1 表有两个索引:?哈希索引:(COL1)?T 树索引:(COL3,COL1,COL2)在这种情况下,只有哈希索引能被用于返回这一查询。可使用哈希索引,因为其所有的列均包含在 WHERE 查询子句之中;注意由于 WHERE 查询子句中有另外的列,所以在返回查询结果之前,从哈希索引读取的每一行都会应用“COL2=?”谓词。不能使用T树索引,因为T树首先使用COL3分类,而查询未涉及COL3。TimesTen 优化器将选择哈希索引。情景#4:T1 表有两个索引:?哈希索引:(COL1,COL2,COL3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle TimesTen内存数据库 60版推荐编程实践 TimesTen 内存 数据库 60 推荐 编程 实践
限制150内