IBM Books
(C) IBM Corp. 2000, 2003.

Net Search Extender

管理和用户指南

创建存储过程搜索可以使用的文本索引

要使用存储过程搜索,需要在执行 CREATE INDEX 命令期间指定高速缓存选项。这通过将指定的所有数据移入主内存中来获取高性能。

但是,在用于搜索的第一次索引更新之前,确保表包含文档以避免更新未填充表的索引。这样可获得更好的建立索引性能和准确地估计高速缓存需求。

存储过程搜索可以快速返回与文档相关联的预定义数据。在 CREATE INDEX 命令中使用高速缓存表选项来进行定义。然后,ACTIVATE CACHE 命令将指定的数据移入内存高速缓存中。

注意

如果没有对视图创建文本索引,则 SQL 标量搜索函数也可以使用此文本索引。

在分布式 DB2 环境中,必须为存储过程在单个节点上为管理表显式指定表空间,并在此节点上显式调用。

为了确保连接至正确的节点,使用 DB2NODE 环境变量。

当为存储过程搜索创建文本索引时,必须确定和计算下列参数:

提供了下列类型的高速缓存:

临时高速缓存
这是使用每个 DB2TEXT ACTIVATE CACHE 命令重新构建的,并且需要将数据从 DB2 表装入内存中。与激活持久高速缓存相比,这将花更长时间,尤其对大型索引更是如此。但是,它可能会稍微提高搜索性能。

持久高速缓存
这是保存在磁盘上的,可以在每个 DB2TEXT ACTIVATE CACHE 命令上通过操作系统快速映射至内存。在增量索引更新方案中,它必须保持激活状态,以允许索引与高速缓存之间同步。否则,下一个 DB2TEXT ACTIVATE CACHE 命令将从头开始重新创建高速缓存。

提供了下列方法来更新文本索引:

“更新时不重新创建索引”选项
避免删除表中的文档然后再重新插入这些文档,这是因为在高速缓存中不能重新使用已删除文档的槽。因此,应避免对已激活的索引更改键列。

这也称为增量更新。

“更新时重新创建索引”选项
每次更新时,此选项都将重新创建索引。在高速缓存列表达式中的任何可能位置使用 variable 数据类型。这将节省高速缓存空间。在 CACHE TABLE 子句中使用相应的转型表达式。

如果期望在初始索引激活之后插入超过 50% 的文档,则使用此选项。

Net Search Extender 提供了两个 SQL 函数来帮助您确定 CREATE INDEX 内存参数。这两个 SQL 函数为:MAXIMUM CACHE SIZEPCTFREE

对于增量更新和重新创建更新
以下命令将返回建议的 MAXIMUM CACHE SIZE 值(以兆字节(MB)计):
DB2EXT.MAXIMUM_CACHE_SIZE(maximumNumberDocs INTEGER,
       averageRowLength INTEGER, numberOfCacheColumns INTEGER)

以下命令将返回表的平均行长度参数:

SELECT AVG(LENGTH(cache column_1) + ... + LENGTH(cache column_n))

注意,如果将更多文档插入到表中,则平均值可能会极大地更改。高速缓存列数目与在 DB2TEXT CREATE INDEX 命令的 CACHE TABLE 子句中使用的列表达式数目相关。

有关附加信息,参见附录 B, 使用大量内存

仅对于增量更新
以下命令将根据实际文档数和最大文档数来返回建议的 PCTFREE 值。
DB2EXT.PCTFREE(actualNumberDocs INTEGER, maximumNumberDocs INTEGER)

实际文档数是第一次执行 ACTIVATE CACHE 命令(该命令将创建内存高速缓存)时表中的行数。

最大文档数是在运行下一个 DB2TEXT ACTIVATE 命令(对于临时高速缓存)或 DB2TEXT ACTIVATE CACHE RECREATE 命令(对于持久高速缓存)之前估计的表中的最大文档数。

如果每次更新时都重新创建索引,则将 PCTFREE 值设置为 0。

示例

假定您的表中具有 10000 行,而您不期望超过 20000 行。使用以下调用来计算您需要的 PCTFREE 值:

db2  "values DB2EXT.PCTFREE(10000,20000) "

假定最大行大小为 20000,且在高速缓存中具有平均大小为 76 的 2 行。使用以下调用来返回该大小:

db2 " values DB2EXT.MAXIMUM_CACHE_SIZE(20000,76,2) "

在确定合适的参数之后,可以使用以下调用来创建索引和高速缓存表:

db2text CREATE INDEX db2ext.comment FOR TEXT ON db2ext.texttab (comment)
          CACHE TABLE (docid) PCTFREE 10 MAXIMUM CACHE SIZE 5

在此示例中,除了通过将主内存用于快速返回结果表构建索引之外还构建了 docid 列。保留 10% 的高速缓存供以后的文档使用,并限制高速缓存最多为 5 MB。

更新文本索引

要对此索引进行搜索,需要更新该索引然后激活它。这会将指定的表高速缓存表达式从数据库复制到内存中。

如果在执行 ACTIVATEUPDATE 操作期间,超过了 MAXIMUM CACHE SIZEMAXIMUM NUMBER OF DOCUMENTS,则建议执行下列操作:

增量更新的 MAXIMUM CACHE SIZE
通过使用以下顺序的 DB2EXT 命令来重新构建高速缓存:DEACTIVATE CACHE、ALTER INDEX MAXIMUM CACHE SIZEACTIVATE CACHE RECREATE

MAXIMUM NUMBER OF DOCUMENTS
对增量更新使用 DEACTIVATE CACHEACTIVATE CACHE RECREATE 命令,或者重新创建索引。

如果期望频繁更新文档,则考虑在 CACHE TABLE 子句中将固定大小的数据类型用于高速缓存列表达式。以下示例说明如何在多次更新操作期间使用相同的高速缓存存储器:

CACHE TABLE(cast(C1 as char(20)), cast(substr(C2,1,10) as char(10))....

对文本索引激活和取消激活高速缓存

在激活高速缓存之前,执行任何暂挂的增量更新来避免较差的 PCTFREE 计算。

要激活文本索引,使用以下命令:

db2text ACTIVATE CACHE FOR INDEX db2ext.comment FOR TEXT
 

此命令将指定的高速缓存表数据从数据库中检索出来,并将此数据存储在内存中。所用的时间取决于表的大小。

注意

如果在激活了索引时调用 update index,这也会更新高速缓存表。由于已删除的文档也会占用高速缓存中的槽,因此应确保将 PCTFREE 设置为足够大的值。

每当停止系统时,就需要重新执行 ACTIVATE CACHE 调用。如果使用持久高速缓存,则新的激活将更快。

注意

如果在没有激活持久高速缓存时进行了更新,则在调用激活期间将删除持久高速缓存然后再重新创建它。

为了节省资源,还应该取消激活当前不需要的任何索引。

要检查剩下了多少内存,使用以下调用:

db2text control show cache status for database cte index db2ext.comment

这将显示是否已经激活了索引以及指定的高速缓存空间还剩下多少。


[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 ]