IBM® Informix® Dynamic Server (IDS) 是管理传统关系数据库、对象关系数据库和基于 Web 的数据库的一种快速可伸缩的数据库服务器。IDS 支持字母数字和图形、多媒体、地理数据、HTML 和用户定义类型等数据。您可以在 UNIX®、Linux® 或 Windows® 上将 IDS 用于联机事务处理(OLTP)、数据集市、数据仓库和电子商务应用程序。

Mohankumar S P (mohankumarsp@in.ibm.com), 性能顾问, EMC

Mohan 是 IBM 印度软件实验室的一名数据库和性能顾问。他在 High Performance On Demand Solutions (HiPODS) 团队工作,为客户提供性能解决方案。早些时候他曾经在印度的 DB2 Product Development 团队工作。他是一名 IBM 认证的 DB2 高级数据库管理员、DB2 应用程序开发人员和 DB2 Problem Determination Master。



Priyambada Behera (prbehera@in.ibm.com), 系统软件工程师, IBM India Software Labs

Priyambada Behera 是 IBM 印度软件实验室的一名系统工程师。她在 IDSQA 团队担任多种 IDS 产品的 QA 工程师。她获得了“Managing and Optimizing Informix Dynamic Server Databases”认证。



Radhika Gadde (radgadde@in.ibm.com), 系统软件工程师, IBM India Software Lab

Radhika Gadde 是 IBM 印度软件实验室的一名系统工程师。她担任为 IDS 的新特性开发测试用例的 QA 工程师。她获得了“Managing and Optimizing Informix Dynamic Server Databases”认证。



Inge Halilovic (ingeh@us.ibm.com), 信息开发人员, EMC

Inge Halilovic 从事 Informix 文档的开发已经超过 8 年了。Inge 是 IBM Informix Dynamic Server Version 9.4 和 Version 10.0 版本的文档编制主管。



2007 年 7 月 05 日

简介

IDS 11 发行版与之前版本相比有了重大增强。它提供了很多面向应用程序开发人员的新特性、分层数据结构支持和改进的跨多个数据库实例的查询能力。它还支持用于应用程序集成的面向服务架构(SOA)模型,并附带了一个新的部署向导,可减少自定义安装所需的磁盘空间,此外还包括很多可以使 DBA 工作变得更轻松的新特性。

IDS 11 通过以下新的增强实现了 “免管理特性”:

  • 通过多个高可用性数据复制(HDR)共享磁盘辅助服务器和远程独立辅助服务器获得的业务连续性扩展
  • 与新的 SQL 应用程序编程接口(API)轻松集成的数据库管理任务
  • 自动化的或有条件的标准任务调度
  • Enterprise Replication 的性能提升
  • 更新的用于监视性能的 SQL 跟踪

概述

表 1、2 和 3(见下面)总结了新的 IDS 特性和功能。这些表提供了一个简述,也可以作为一个参考。看完这些表之后,可以跳到本文后面的小节,了解关于每个新特性的更多信息。

表 1. 可伸缩性、高可用性和性能增强
子类优点
多个高可用性辅助服务器IDS 支持两种类型的辅助服务器:一种是远程独立辅助服务器,另一种是共享磁盘辅助服务器
备份和恢复期间自动对 dbspace 排序在备份和恢复期间,IDS 会对 dbspace 的排序做出聪明的决定,以取得最大的并行度
Enterprise Replication 的性能增强IDS 增加了在目标服务器上应用事务时的并行度
ON-Bar Performance Report提供关于 ON-Bar 备份和恢复性能的报告
在 UNIX 上对 dbspace 块使用的熟文件(cooked file)使用直接 I/O通过使用直接 I/O 改善 dbspace 块使用的熟文件的性能
对 HDR 进行加密通信在高可用性数据复制(HDR)中,对数据进行加密,以确保安全的数据传输
用于管理服务器重启的恢复时间目标(RTO)可以使用新的配置参数 RTO_SERVER_RESTART 来设置恢复时间
非阻塞检查点通过非阻塞检查点防止大多数事务阻塞
使用 Ontape 的备份和恢复目录可以使用 ontape 实用程序从文件系统中备份和恢复数据,而无需借助使用 TAPEDEV 和 LTAPEDEV 配置参数的交互式提示符
改善的备份和恢复并行度ON-Bar 使用并行 I/O 执行全系统的备份和恢复
连续逻辑日志恢复该特性允许使用 ontape 和 ON-Bar 实用程序执行逻辑日志备份的连续恢复
表 2. 集成解决方案
子类优点
新的部署向导允许用户/管理员执行自定义安装,以减少所需磁盘空间
JDBC 可调用语句中的命名参数允许按名称而不是顺序位置识别参数,使用更加方便
快速 Windows 应用程序开发IDS 支持 IBM Database Add-ins for Visual Studio 2005,使得 IDS 应用程序开发人员可以使用 Visual Studio 2005 的众多功能
通过 committed read 隔离级别增强的并发性SET ISOLATION COMMITTED READ 新的 LAST COMMITTED 关键字选项可以降低锁冲突的风险
通过用于虚拟处理器的私有内存缓存改善的并发性允许为每个 CPU 虚拟处理器(CPUVP)配置私有内存缓存
分层数据类型 新的节点数据类型在关系数据库中表示分层数据
基本文本搜索索引允许在非结构化文档库中搜索词和短语
可索引二进制数据类型该特性允许存储二进制编码的字符串,可实现快速检索
查询的 FROM 子句中的派生表 支持 FROM 子句中不相关的子查询
触发器增强增强了表和视图的触发器的语法和功能
遵从 ANSI 的连接查询中的优化器指令该发行版扩展了对 ANSI 和 ISO 连接查询的支持
对分布式查询的增强该特性扩展了对跨数据库和跨服务器分布式操作中的数据类型和用户定义例程(UDR)的支持
XML 发布函数该特性将 SQL 查询的结果转换成 XML,以用于 XML 应用程序
用于地理空间数据的 Web Feature ServiceIDS 中的 Web Feature Service (OGC WFS) 充当用于 Spatial 和 Geodetic DataBlade 模块的一个表示层
高级访问控制特性通过该特性可以控制谁能访问一个受保护的表中某行和某列中的数据
索引自连接查询计划这是查询优化器的一项新特性,支持一种新的索引扫描,这种索引扫描只使用完整的复合索引的子集
对使用 DRDA 的通用客户机的支持IDS 支持 DRDA,后者是用于与 IDS 和 DB2 通信的通信协议
SPL 语言中的语句标签、GOTO 和 LOOP 语句对语句标签以及 GOTO 和 LOOP 语句的新支持为 SPL 例程中的迭代和退出语句循环提供了更大的灵活性
新的 SQL 函数IDS 支持新的内建 SQL 函数,这些函数可以执行常见的数学、类型转换、位图等各种操作
预编译语句的自动重新编译当执行预编译语句时,IDS 检测底层对象的变化,必要时重新编译语句
表 3. 实现免管理特性
子类优点
SQL 管理 API这种 API 使得数据库服务器管理员(DBSA)可以远程执行管理任务
调度管理任务通过调度器可以管理和运行定期的维护、监视和管理任务
监视和分析最新的 SQL 语句可以配置 SQL 语句跟踪,以监视最近执行的 SQL 语句的性能
动态更改复制参数当服务器正在运行时,可以添加、更改和删除 Enterprise Replication 配置参数和环境变量在内存中的值
改善的统计信息收集和查询解释文件该特性自动更新统计信息,并使之可以为查询优化器所用,以获得更好的访问计划
动态重命名复制列、表和数据库当 Enterprise Replication 活动时,可以重命名复制列、表或数据库
删减重复的表当 Enterprise Replication 活动时,可以在重复的表上使用 TRUNCATE 语句
Windows 平台上的安装改进Windows 上的 IDS 现在使用更容易、更简单的符合业界标准的安装工具
多用户管理模式DBSA 可以动态地为一个或多个特定用户赋予以管理模式连接数据库服务器的能力
基于 PHP 的 OpenAdmin tool for IDSOpenAdmin tool for IDS 是基于 PHP 的管理控制台,可用于管理一个或多个 IDS 11.10 实例
配置会话例程两个新的程序, sysdbopen sysdbclose,可以帮助设置会话环境

可伸缩性、高可用性和性能增强

多个高可用性辅助服务器

IDS 引入了两种新的可加入到高可用性集群的辅助服务器,从而扩展了业务连续性:

  • 共享磁盘辅助(SDS)服务器
  • 远程独立辅助(RSS)服务器

多个 SDS 服务器访问一个共享磁盘,以获得高可用性和分发查询工作负载。辅助服务器的共享磁盘解决方案提供了可与远程独立辅助服务器和 HDR 结合使用的配置选项。主服务器拥有对一个磁盘或磁盘阵列的写访问权,而所有 SDS 服务器则仅拥有只读访问权。SDS 服务器并不在自己的磁盘空间上维护物理数据库的一个副本;相反,它与主服务器共享磁盘。所有服务器共享数据的惟一副本,从而降低数据存储成本。可以动态添加新的 SDS 服务器,以分担查询工作负载和扩展可用性选项。必要时,可以将 SDS 服务器升级为主服务器,以维持连续的可用性。

对于灾难恢复场景,现在有了更多的选择 —— 从单个 HDR 辅助服务器到多个 RSS 服务器。在灾难恢复场景中,RSS 服务器在地理上可以远离主服务器,充当远程备份服务器。每个 RSS 服务器维护数据库的一个完整的副本。数据完整性是在安全的网络连接上异步地维护的。RSS 服务器可以进行读访问,从而使得客户可以最大化投资和平衡工作负载。RSS 服务器被设计为与一个 HDR 对共存。当主服务器出现故障时,RSS 服务器可以升级为 HDR 辅助服务器。

备份和恢复过程中 dbspace 的自动排序

IDS 现在可以对备份和恢复过程中 dbspace 的排序做出明智的决策,以取得最大的并行度,从而减少备份和恢复所需的时间。例如,如果对最大的 dbspace 和其它较小的 dbspace 并行地进行备份,则整个系统备份花费的时间更少。在恢复期间,dbspace 按照备份时的顺序进行恢复,从而减少了恢复时间。

Enterprise Replication 的性能提升

IDS 提供了一个复制解决方案,该解决方案利用可伸缩并行处理服务器架构,以满足要求最高的计算环境。

Enterprise Replication 增加了在目标服务器上应用事务时的并行度,从而可以获得更好的性能。

ON-Bar Performance Report

这项新特性提供了对 ON-Bar 备份和恢复性能的报告。通过新的 BAR_PERFORMANCE 配置参数,可以设置写到 ON-Bar 活动日志的报告的级别。可以设置报告,使之包含 ON-Bar 处理的次秒级时间戳,还可以配置 ON-Bar 与存储管理器之间、ON-Bar 与 IDS 实例之间的传输率。

对 UNIX 上 dbspace 块使用的熟文件使用直接 I/O

现在可以通过使用直接 I/O 提高用于 dbspace 块的熟文件的性能。IDS 允许将裸设备或者熟文件用于 dbspace 块。通常,熟文件更慢,因为存在附加的开销和文件系统提供的缓冲。而 直接 I/O 可以避免使用文件系统缓冲区,因而对于磁盘的读写更为高效。可以用新的 DIRECT_IO 配置参数指定直接 I/O。如果文件系统支持对 dbspace 块使用的页面大小使用直接 I/O,那么使用直接 I/O 之后,熟文件文件的性能可以接近用于 dbspace 块的裸设备的性能。

对 HDR 进行加密通信

为了使 HDR 提供安全的数据传输,该特性提供了新的配置参数 ENCRYPT_CDR,该参数可以启用加密并指定加密选项。如果管理员启用加密,则 HDR 主数据库服务器在将数据传送到辅助数据库服务器之前会加密数据。辅助数据库服务器则在解密数据之后再处理数据。
如果 ENCRYPT_CDR = 1,且所连接的服务器也支持加密,则进行加密。否则,允许无加密通信。
如果 ENCRYPT_CDR = 2,那么只允许到加密数据库服务器的连接。

用于管理服务器重启的 RTO 策略

现在可以通过创建 RTO 策略,设置在重新启动服务器之后,经过多长时间(单位为秒)IDS 必须从一个问题恢复过来。可以使用新的配置参数 RTO_SERVER_RESTART 实现这一点,该参数允许监视工作负载,并及时触发检查点以满足 RTO 策略,从而进行故障恢复。
当这个配置参数被启用时,数据库服务器自动调整 AIO 虚拟处理器和清理线程的数量,并自动调优 LRU 刷新。

非阻塞检查点

IDS 已经用一个非阻塞检查点算法替代了它的检查点算法。IDS 现在允许应用程序在检查点处理期间继续处理事务。IDS 监视工作负载和过去的检查点性能,并更频繁地触发检查点,以避免关键资源如物理或逻辑日志被耗尽,从而确保在检查点处理期间事务不会被阻塞。

对于对响应时间敏感的应用程序,可以改变使用主动的 LRU 刷新减少检查点静默时间的旧方法。LRU 刷新可以放缓,因为在检查点处理期间事务不会被阻塞。更缓慢的 LRU 刷新可以提高事务性能。 该特性消除了模糊的检查点机制,这种机制可能导致不希望的事务阻塞时间间隔。

使用 Ontape 备份和恢复目录

可以使用 ontape 实用程序从文件系统中备份和恢复数据,而无需借助使用 TAPEDEV 和 LTAPEDEV 配置参数的交互式提示符。可以通过将配置参数 TAPEDEV 和 LTAPEDEV 设置为本地或远程挂载的文件系统的一个有效目录来启用该特性。ontape 实用程序自动生成文件名,并执行物理和日志备份。在备份到一个目录时,必须有该目录的写权限,并且应确保有足够的磁盘空间来包含备份的数据。
将数据备份到目录有以下优点:

  • 多个实例可以同时备份到同一个目录文件系统。
  • 可以使用操作系统实用程序压缩或处理数据。
  • 可以轻松地配置系统,使之在日志文件被写满时自动备份日志文件。

在将数据备份到一个目录文件系统的过程中,应该指定 -d 选项,以关闭 ontape 交互式提示符。
下面的例子执行 0 级备份,-d 选项用于避免当将数据备份到一个目录或者从中恢复数据时出现交互式提示符。

清单 1
ontape -s -L 0 -d

改善的备份和恢复并行度

ON-Bar 使用并行 I/O 执行整个系统的备份和恢复。这样可以在很大程度上减少整个备份和恢复的时间。 在并行备份期间,不管是标准备份(onbar -b)还是全系统备份(onbar -b -w),都是多个进程同时运行,并将数据备份到不同的 dbspace 中。每个 onbar 命令的最大并行进程数由配置参数 BAR_MAX_BACKUP 控制。 并行备份比串行备份更高效。BAR_MAX_BACKUP 的默认值为 4。

连续逻辑日志恢复

该特性允许使用 ontape 和 ON-Bar 实用程序执行逻辑日志备份的连续恢复。当主系统出故障时,连续日志恢复特性使一个辅助系统可用,以替代主系统。当主系统上备份的逻辑日志可用时,可以将它们恢复到辅助系统上。如果主系统出故障,可以将剩下的可用逻辑日志恢复到辅助系统上,然后使后者上线,担任新的主系统。

下面是连续逻辑日志恢复的流程:

  1. 在主系统上,用以下命令执行 0 级存档:
    ontape -s -L 0
  2. 在辅助系统上,复制文件或挂载磁带(由 LTAPEDEV 指定),并用以下命令执行物理恢复:
    ontape -p
    如下所示回答各项提示:
    Continue restore? Y
    Do you want to back up the logs? N
    Restore a level 1 archive? N

    在物理恢复完成之后,数据库实例处于快速恢复模式,等待恢复逻辑日志。
  3. 在主系统上,用以下命令备份逻辑日志: ontape -a
  4. 在辅助系统上,复制或挂载包含主系统上备份的逻辑日志的文件或磁带。用以下命令执行逻辑日志恢复:ontape -l -C
  5. 对于可用的所有逻辑日志,重复步骤 3 和 4,进行备份和恢复。
  6. 如果正在作为紧急备用的辅助系统上执行连续日志恢复,那么运行以下命令完成逻辑日志备份,并使服务器处于静默状态。
    如果逻辑日志可用于恢复:ontape -l 在所有可用逻辑日志被恢复之后:ontape -l -X

集成解决方案

新部署向导

IBM IDS 包
IBM IDS 包

新部署向导允许选择 IDS 组件和特性进行自定义安装。如果已经安装该产品,可以通过安装脚本的 GUI 和控制台模式确认哪些组件已经被安装,哪些组件还没有安装。 该特性使数据库管理员可以减少 IDS 自定义安装所需的磁盘空间。所有安装方法,包括控制台、GUI 和静寂方法,都使用该向导来实现组件之间的依赖,并且在实际文件装载之前估计所选组件文件所占的磁盘空间。之后,可以在任何时候安装或者卸载所选择的组件。

以下是两种类型的安装:

  • 典型安装
  • 自定义安装

如果选择典型安装,则除了基础服务器之后还安装所有组件。
如果选择自定义安装,则可以选择和取消要安装的组件和特性。

下面的列表显示了 11.10 IBM IDS 的所有组件和特性:

  1. 基础服务器(必需)
  2. 数据库服务器扩展
    • J/Foundation
    • 内置 DataBlade 模块
    • 转换和反转支持
  3. 全球语言支持(Global Language Support,GLS)
    • West European 和 Americas
    • East European 和 Cyrillic
    • Chinese
    • Japanese
    • Korean
    • 其他
  4. 备份和恢复
    • ON-Bar 实用程序
      • Informix Interface for Tivoli Storage Manager
      • Informix Storage Manager
    • Archecker 实用程序
  5. Demos
  6. Data-Loading 实用程序
    • onunload 和 onload 实用程序
    • dbload 实用程序
    • High-Performance Loader (HPL)
  7. Enterprise Replication
  8. Administrative 实用程序
    • Performance Monitoring 实用程序
    • Miscellaneous Monitoring 实用程序
    • Auditing 实用程序
    • Database Import and Export 实用程序

JDBC 可调用语句中的命名参数

通过在 Java™ 程序的可调用语句中使用命名参数,可以根据名称而不是顺序位置识别参数,从而增加方便性。如果存储过程是惟一的,那么可以忽略有默认值的参数,并且可以按任意顺序输入参数。在调用有很多参数且其中一些参数有默认值的存储过程时,命名参数特别有用。
在下面的惟一的存储过程中,参数 listprice 和 minprice 有默认值:

清单 2
create procedure createProductDef(
	productname  varchar(64), 
	productdesc  varchar(64), 
	listprice  float  default 100.00, 
	minprice  float  default 90.00, 
	out prod_id   	float);  
	...
 let prod_id = <value for prod_id>; 
end procedure;

在下面的 Java™ 代码中,被调用的存储过程形参少于实参(4个形参,5个实参)。由于 listprice 有个默认值,因此在 CallableStatement 中可以忽略。

清单 3
String sqlCall = "{call CreateProductDef(?,?,?,?)}";
 // 4 params for 5 args CallableStatement 
CallableStatement cstmt = conn.prepareCall(sqlCall);

      cstmt.setString("productname", name);   // Set Product Name.
      cstmt.setString("productdesc", desc);   // Set Product Description.
    
      cstmt.setFloat("minprice", minprice);   // Set Product MinPrice.

      // Register out parameter which should return the product id created.

      cstmt.registerOutParameter("prod_id", Types.FLOAT);

      // Execute the call.
      cstmt.execute();

或者,对于同一个存储过程,也可以忽略 minprice 实参的形参。不需要再次编译 CallableStatement。

快速 Windows 应用程序开发

IDS 支持 IBM Database Add-ins for Visual Studio 2005,使得 IDS 应用程序开发人员可以使用 Visual Studio 2005 的很多功能。 该项支持使 IDS 应用程序开发人员可以减少开发时间,并且可以使用 Microsoft Visual Studio 2005 作为集成开发环境来开发用于多种 IDS 服务器家族的 .NET 应用程序。

通过 committed read 隔离级别增强的并发性

该版本为 SET ISOLATION COMMITTED READ 语句引入了一个新的 LAST COMMITTED 关键字选项,当两个或多个会话试图访问一个表中的同一行,并且这个表的锁粒度是行级锁时,该选项可以降低锁冲突的风险。即使另一个并发会话持有一个独占式行级锁,它仍然返回最近提交的行。
该特性支持 B-树索引和功能性索引。它不支持 DataBlade 模块、无日志记录的表、具有集合数据类型的列的表、具有 R-树或虚拟索引接口的表、具有页级锁的表、被独占锁锁住的表或者不支持事务日志记录的数据库中的表。

清单 4
begin work;
create table tab(int col1,int col2) lock mode row;
insert into tab values(10,11);
insert into tab values(20,21);
commit work;

session 1:
--------------
begin work;
update tab set col2=99 where col1=10;


session 2:
--------------
begin work;
set isolation to committed read last committed;
select * from tab where col1=10;

这个例子检索分别为 10 和 11 的 col1 和 col2 的值。如果使用 Committed Read 隔离级别,则会发生以下错误:244: Could not do a physical-order read to fetch next row

通过用于虚拟处理器的私有内存缓存改善并发性

现在可以为每个 CPUVP 配置一个私有内存缓存,以减少大型多处理器计算机上的服务器内存分配时间。

分层数据类型

该特性引入了一种名为 “节点” 的新的数据类型,它是新的 Node DataBlade 模块的一部分。通过节点数据类型以及它所支持的函数,可以在关系数据库中表示分层数据。这种新的数据类型的优点是,它允许使用一条 SELECT 语句和传统的操作符(而不需要使用递归)在层次中进行搜索。节点数据类型用一个序数加一个 .0 或一组以点号隔开的序数来表示,它对应于一个树结构中的一个位置。这类似于目录表表示章、节、小节信息的方式。

基本文本搜索索引

基本文本搜索(Basic Text Search)DataBlade 模块允许在存储在表列中的非结构化文档库中搜索词和短语。这个列可以是 CHAR、VARCHAR、LVARCHAR、NCHAR、NVARCHAR、BLOB 或 CLOB 数据类型。搜索策略包括单个和多个字符通配符搜索、模糊和近似搜索以及 AND、OR 和 NOT Boolean 操作。该特性是数据库服务器附带的,没有额外成本。 基本文本搜索 DataBlade 模块使用开源的 CLucene 文本搜索包。这个文本搜索包和它的相关函数被称为文本搜索引擎,它是专门设计用来执行文本数据的快速检索和自动索引。文本搜索引擎在数据库服务器控制的一个虚拟进程中运行。

可索引的二进制数据类型

有两种新的数据类型可以存储二进制编码的字符串,这种字符串可以被索引从而实现快速检索。binaryvar 数据类型是一种变长的 opaque 类型,最大长度为 255 字节。binary18 数据类型与 binaryvar 数据类型类似,不同的是它的长度固定为 18 字节。作为 DataBlade 模块的一部分,这两种数据类型还附带了用于验证数据类型的字符串操纵函数和位操作函数。这样便可以执行逐位的逻辑 AND、OR、XOR 和 NOT 比较。

清单 5
binaryvar data type: The following code stores the binary string of 0123456789 on disk: 
CREATE TABLE bindata_test (int_col integer, bin_col binaryvar) 
INSERT INTO bindata_test values (1, '30313233343536373839')
清单 6
binary18 data type: The following code inserts the string IBMCORPORATION2006:
CREATE TABLE bindata_test (int_col integer, bin_col binary18) 
INSERT INTO bindata_test values (1,'49424d434f52504f524154494f4e32303036')

查询的 FROM 子句中的派生表

SELECT 语句现在可以包括遵从 ISO/IEC 9075:1992 SQL-92 标准的语法,以便在 FROM 子句中指定无关子查询作为查询的一个数据源。这些子查询被称作派生表或表表达式。它们可以是简单子查询、UNION 或连接(包括 OUTER 连接)子查询,并且可以包括 ORDER BY 子句。 此外,FROM 子句中的 AS 相关性规范可以为查询中的列声明临时名称。Informix 扩展语法,例如迭代函数的 FUNCTION 关键字或用于集合派生表的 TABLE (MULTISET (SELECT ...)) 关键字,在 FROM 子句中现在可以用 SQL-92 语法代替。该特性扩展了 IDS 的功能,使其可以不去修改查询语句,以保证与其他符合 SQL 标准数据库服务器的互操作性。

触发器增强

一些新的特性扩展了表和视图上的触发器的语法和功能。现在可以在一个表上定义多个 INSERT、DELETE、UPDATE 和 SELECT 触发器,也可以在一个视图上定义多个 INSTEAD OF 触发器。这些增强可以提供更大的灵活性,并且可以提高性能。在多个应用程序需要共享表或视图的异构信息管理系统中,这些特性还便于合并表和视图上的触发器。

遵从 ANSI 的连接查询中的优化器指令

该版本扩展了对 ANSI/ISO 连接查询的支持,包含以下几种优化器指令:

  • 访问方法指令
    (FULL, AVOID_FULL, INDEX, AVOID_INDEX, INDEX_SJ, AVOID_INDEX_SJ)
  • 解释模式指令
    (EXPLAIN, AVOID_EXECUTE)
  • 优化目标指令
    (ALL_ROWS, FIRST_ROWS)
  • 连接顺序指令(ORDERED)只在遵从 ANSI/ISO 的 LEFT OUTER 连接和 INNER 连接中受支持,而在遵从 ANSI/ISO 的 RIGHT OUTER JOIN 或 FULL OUTER JOIN 关键字中被忽略。不过,在 sqexplain.out 文件中,它被列在 “Directives Not Followed” 之下。
  • 除了优化器重写查询,使之不再使用 ANSI/ISO 语法的情况下,该特性不支持 ANSI/ISO 连接查询中的连接方法指令(USE_NL, AVOID_NL, USE_HASH, AVOID_HASH, /BUILD, and /PROBE)。

对分布式查询的增强

该版本扩展了对以下方面的支持:

  • 从跨数据库和跨服务器的分布式操作中的 UDR,扩展到大多数本地数据库中存在有效 UDR 的环境中。
  • 用 C 或 Java 语言编写的外部例程。它们在任何 SPL 例程为合法的分布式操作中都是有效的。
  • 从跨服务器分布式操作中可以使用的其他数据类型,扩展到内置的 non-opaque SQL 数据类型。它们是:

    清单 7
    BOOLEAN 
    LVARCHAR 
    DISTINCT of non-opaque built-in types 
    DISTINCT of BOOLEAN 
    DISTINCT of LVARCHAR 
    DISTINCT of the DISTINCT types that are listed above

在参与分布式查询的所有数据库中,各种数据类型必须定义有相同的层次结构和类型转换。

XML 发布函数

IDS 支持 XML 发布函数,这些函数可以将 SQL 查询的结果转换为 XML,以便在 XML 应用程序甚至异构的数据库环境中使用。它甚至还支持其它用于从 XML 文档提取元素和值的内置函数,例如 XPATH。

  • XML 函数 genxmlquery()genxmlclobelemclob() 以一个 SQL 查询为参数,返回 XML 格式的结果集。
  • XML 函数 genxmlelem()genxmlelemclob() 分别发布文档中的每个元素。
  • XML 函数 genxmlschema()genxmlschemaclob() 生成一个 XML 模式和 XML 格式的结果。
  • XML 函数 genxml()genxmlclob() 以 XML 元素的形式返回数行 SQL。
  • XML 函数 genxmlhdr()genxmlhdrclob() 使用 XML 报头返回 XML 形式的查询结果集。
  • XML 函数 extract()extractxmlclob() 计算 XML 列、文档或字符串上的 XPATH 表达式。
  • XML 函数 extractvalue()extractxmlclobvalue() 返回 XML 节点的值。
  • XML 函数 existsnode() 验证一个特定节点是否存在于一个 XML 文档中。
  • XML 函数 idsxmlparse() 解析一个 XML 文档,以判断它是否为格式良好的文档。

用于地理空间数据的 Web Feature Service

新的 Web Feature Service DataBlade 模块在 IDS 中实现了一个 Web Feature Service (OGC WFS),作为用于 Spatial 和 Geodetic DataBlade 模块的一个表示层。OGC WFS 接口允许跨 Web 的使用平台无关调用的对地理特性的请求。基于 XML 的地理标记语言( Geography Markup Language,GML)被用作转换地理特性的编码。对于这个 beta 版本,只支持查询数据。

Advanced Access Control 特性

Advanced Access Control Feature 实现了基于标签的访问控制(LBAC),以提供行级和列级保护。
每个受保护的数据库对象(行或列)都被赋予一个安全标签,该标签存储关于数据的类别(或敏感度)的信息。类似地,每个数据库用户也被赋予一个安全标签,该标签决定他/她可以访问具有哪种标签的数据(行或列)。LBAC 是 Mandatory Access Control (MAC) 的一个实现,它为存储在数据库中的敏感数据提供了较高级别的安全保障。如果赋予用户的安全标签涵盖保护那个对象的安全标签,那么就授权对那个对象的访问。

索引自连接查询计划

在较早的 IDS 版本中,对于重复的值与不同的值之间的比率,如果索引的起始列中的这个值远远大于随后诸列中的这个值,那么对具有复合索引的表的查询执行起来效率不高。查询优化器的一项新特性支持一种新的索引扫描,即索引自连接路径。这种扫描只使用完整复合索引的子集。首先在逻辑上将表与其自身连接,然后将更具有选择性的非起始索引键作为索引绑定过滤器,应用于起始键值的每个惟一的组合。默认情况下,优化器考虑这种类型的扫描。
优化器还支持两种新的连接方法指令:INDEX_SJ 和 AVOID_INDEX_SJ。INDEX_SJ 指令使用指定的索引,或者从一组索引中选择成本最低的索引,来实现索引自连接路径,即使起始索引键列没有可用的数据分布统计信息也是如此。AVOID_INDEX_SJ 指令则防止指定索引的自连接路径。该特性可以提高具有复合索引的表的查询性能。

对使用 DRDA 的通用客户机的支持

可以使用 IBM 通用客户机 API 与 IDS 和 DB2 通信。IDS 现在支持 DRDA,这是 DB2 使用的通信协议。因此,应用程序开发人员可以使用这种 API 创建一个解决方案,并使他们的客户可以将其部署到需要的 IBM 数据服务器上。

SPL 语言中的语句标签、GOTO 和 LOOP 语句

对语句标签以及 GOTO 和 LOOP 语句的新支持为 SPL 例程中的迭代和退出语句循环提供了更大的灵活性。对于用支持 GOTO 和 LOOP 语句语法的其它数据库服务器上的过程语言编写的例程,SPL 语言中的语句标签、GOTO 和 LOOP 语句也可以为它们到 IDS 的迁移提供便利。

该版本为 SPL 例程中的语句循环引入了新的 SPL 语句和结构:

  • GOTO 标签语句可以无条件地退出循环,并将控制权转移到跟在指定的语句标签之后的可执行语句或语句块。
  • LOOP 语句不限次数地执行一个语句块。它可以在一个 WHILE 条件 LOOP 或 FOR 条件 LOOP 语句中,或者独立于任何 FOR 或 WHILE 语句。
  • LOOP 还可以被嵌套。
  • 为了避免 LOOP 语句的无限次迭代,在 LOOP 语句中可以使用 IF 语句的新 EXIT 和 CONTINUE 选项。
  • EXIT 标签 WHEN 条件语句可以终止有标签的循环。
  • EXIT 标签语句可以终止有标签的循环。

新 SQL 函数

IDS 现在支持一些新的内置 SQL 函数,这些函数有的执行常见的数学、类型转换和位图操作,有的操纵字符串、日期和日期时间值:

  • ADD_MONTHS()
  • ASCII()
  • BITAND()
  • BITANDNOT()
  • BITNOT()
  • BITOR()
  • BITXOR()
  • CEIL()
  • FLOOR()
  • FORMAT_UNITS()
  • LAST_DAY()
  • LTRIM()
  • MONTHS_BETWEEN ()
  • NEXT_DAY ()
  • NULLIF()
  • POWER()
  • ROUND()
  • RTRIM()
  • SYSDATE()
  • TO_CHAR()
  • TO_NUMBER()
  • TRUNC()

这些内置的 SQL 函数可以简化为其它数据库服务器开发的应用程序的 IDS 的迁移。

预编译语句的自动重新编译

当执行预编译语句时,IDS 检测底层对象的变化,必要时重新准备(重新编译)语句。

应用程序准备(编译)好一条语句之后,可以修改语句对象 —— 表、索引、统计信息。ALTER TABLE 等一些操作要求不打开游标,而 CREATE INDEX ONLINE 等其它操作则允许表上的游标。为了考虑这些变化,必须重新准备语句。在之前的版本中,当尝试打开使用修改过的对象的语句时,IDS 产生一个 -710 错误,使客户机程序可以捕捉异常,并且在继续运行之前重编译语句。

在 DDL 操作修改一个数据库表的模式之后,数据库服务器会自动执行以下动作(在以前的版本中,在执行任何引用修改过的表的 SPL 例程或编译过的对象之前,必需手动执行这些动作):
数据库服务器自动发出 UPDATE STATISTICS 语句,为引用该表的所有 SPL 例程重新计算例程统计信息。
数据库服务器自动发出 PREPARE 命令,更新引用该表的任何编译过的对象。


免管理特性

SQL 管理 API

一种新的 SQL 管理 API 使 DBSA 可以通过发出 SQL 语句远程执行管理任务。DBSA 现在可以通过调用新的内置的 admin( ) 或 task( ) 函数来完成管理任务,这两个函数具有模拟相应实用程序的命令行参数的参数。例如,下面的 SQL 语句相当于 oncheck -ce 命令,它指示数据库服务器检查区段:

EXECUTE FUNCTION admin('check extents');

有些选项还可以完成没有相应实用程序的任务。用相同的参数列表调用 admin( ) 和 task( ) 函数的效果是相同的,但是它们返回的表示操作结果的值有不同的数据类型。关于管理 API 函数的执行信息存储在 IDS 实例的一个新的 sysadmin 数据库的 command_history 表中。 管理 API 是开放的,任何用户界面程序,例如有兴趣改善与 IDS 一起使用的管理工具的第三方供应商,都可以使用这种 API。

调度管理任务

通过新的 Schedule 可以在预定义的时间或者由服务器内部确定的时间管理和运行维护、监视和管理任务。可以监视活动(例如空间管理)和创建自动纠正动作。Scheduler 函数使用基于 SQL 的管理系统和一组任务收集信息,并且监视和调整服务器。Scheduler 由一组任务属性控制,这些属性定义需要收集或执行什么。任务属性存储在 sysadmin 数据库的 ph_task 表中。这个表中的每一行都是一个单独的任务,每一列是一个任务属性。可以修改任务属性,还可以通过将行插入到表中来设置新的任务。
该特性允许 DBA 安排一些常见的管理任务自动执行。

监视和分析最新的 SQL 语句

现在可以配置 SQL 语句跟踪,以监视最近执行的 SQL 语句的性能。该特性提供关于系统上执行的每条 SQL 语句的统计信息。这种统计信息存储在一个循环缓冲区中,DBA 可以设置该缓冲区的大小。默认情况下,该特性是关闭的。但是可以为所有用户或者特定一组用户启用该特写。该特性为分析 SQL 语句以提高性能和进行调优提供了便利。

动态更改 Enterprise Replication 配置参数和环境变量

当服务器正在运行时,可以添加、更改和删除 Enterprise Replication 配置参数和环境变量在内存中的值。该特性并不更新 onconfig 文件;这些值只对当前 Enterprise Replication 会话有效。可以使用下面的新命令更改值:

  • cdr add config:添加一个值
  • cdr change config:更改一个已有的值
  • cdr remove config:删除一个已有的值

注:添加和删除操作并不适用于所有 Enterprise Replication 配置参数和环境变量。该特性可以使 Enterprise Replication 节点的管理变得更容易。

改善的统计信息收集和查询解释文件

IDS 现在可以在索引创建时自动收集起始索引健上的索引统计信息。这样就不必手动执行统计信息收集命令。
有了这个特性,查询优化器可以在决定访问计划时立即考虑索引。可以在 SET EXPLAIN 中新的 Query Statistics 部分中查看关于已完成查询的统计信息。在 MEDIUM 模式的显式的 UPDATE STATISTICS 操作中,Resolution 子句中新的 SAMPLING SIZE 选项可以指定列分布进行抽样的最少行数。SET EXPLAIN 语句现在支持一个可选的参数,用于覆盖输出文件的默认名称和位置。

动态重命名 Enterprise Replication 列、表和数据库

当 Enterprise Replication 活动时,可以重命名复制列、表或数据库。使用 RENAME 语句重新命名执行复制的每个成员的列、表或数据库。
该特性可以使 Enterprise Replication 节点的管理变得更容易。

删减重复的表

Enterprise Replication 现在支持在重复的表上执行 TRUNCATE 语句。该特性很有价值,可以让应用程序开发人员在接收更新的数据装载之前清除表,还可以让管理员更容易地重新同步逻辑上不一致的环境。

Windows 平台上的安装改进

Windows 上的 IDS 现在使用一种业界标准的安装工具,从而使安装变得更快、更容易,所占的空间变得更小。

多用户管理模式

新的管理模式增强并取代了单用户模式,它可以临时限制对数据库服务器的访问,以执行管理任务。单用户模式只允许用户 informix 或 DBSA 组成员连接到数据库服务器。用户 informix 或 DBSA 现在可以动态地为一个或多个特定用户赋予以管理模式连接数据库服务器的能力。可以使用一个新的 onmode 命令选项、一个新的 oninit 命令选项或者新的 ADMIN_MODE_USERS 配置参数来启用。

基于 PHP 的 OpenAdmin tool for IDS

一个新的基于浏览器的图形化管理工具 OpenAdmin 便于从一个位置通过 DBScheduler 定义和管理自动化任务,创建和显示用于分析和调优的性能直方图,以及管理实例等。客户很容易插入自己对该工具的扩展,以创建需要的功能。

配置会话例程

该特性引入了新的内置 SPL 程序:sysdbopen( ) 和 sysdbclose( ),当用户建立或断开与数据库的连接时,这两个程序就会自动执行。在设置会话环境变量和执行任务,例如为不易修改代码的 Information Management 应用程序用户激活角色时,这两个程序非常有用。对于自动化应用程序终止之后需要执行的操作,主要是清除操作,这两个程序也很有用。

如果 DBA 以一个程序所有者的用户登录 ID 创建 sysdbopen( ),那么当指定的那个用户连接到数据库时,IDS 就执行那个程序。如果 DBA 指定 PUBLIC 作为所有者,那么对于连接到数据库的所有用户,除了专门针对特定用户定义 sysdbopen() 的用户外,都会自动执行那个例程。

当用户关闭到数据库的连接时,如果数据库中没有注册用于那个用户的 user.sysdbclose( ) ,就会自动调用另一个内置程序 public.sysdbclose( )。当已经连接到数据库的用户执行一个分布式操作,例如引用另一个数据库中的对象的跨数据库或跨服务器查询时,sysdbopen( ) 例程不会被调用。

下面的程序为特定用户 usr1 设置角色,并将隔离级别设为 committed read。

清单 8
create procedure usr1.sysdbopen() 
set role to oltp; 
set isolation to committed read;
end procedure;

结束语

本文简要地讨论了 IDS 的各个方面,例如可伸缩性、高可用性和性能、集成解决方案和免管理特性。本文可以作为 IDS 11 中的新特性的参考。建议广泛阅读各种文章和教程,以获得关于这些特性的深入知识。

致谢:在此感谢 Cary Wahlmeier、Amaralirao R Kaka、Madhuri Ahuja、Amitava Chakraborty、Ravikumar Nandigam、Vaibhav Srivastava、Suma C Shastry 和 Swetha Prasad 为本文的撰写所提供的帮助。

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=238779
ArticleTitle=Informix Dynamic Server 11 新特性
publish-date=07052007