我们正在使用 Oracle Text CTXSYS.CONTEXT 索引来索引大约 50 万行包含元信息的行。信息分布在由索引器在运行时调用的过程(功能索引)组合的两个表中。
当我在本地机器(简单的双核笔记本)上运行 CREATE INDEX 时,索引会在大约 3 分钟内建立。在我们的数据库服务器上,它在 Solaris 上运行,具有 8 个内核和 16G 的 RAM,它需要大约 24 小时才能为相同(完全相同)的数据创建索引。
示例代码: 这是我们的两个表和 3 列的索引馈送器:
create or replace procedure docmeta_revisions_text_feeder
( p_rowid in rowid , p_clob in out nocopy clob) as v_clob CLOB begin
FOR c1 IN (select DM.DID, DM.XDESCRIB || ' ' || DM.XAUTHOR AS data
from DOCMETA DM
WHERE ROWID = p_rowid)
LOOP
v_clob := v_clob || c1.data;
FOR c2 IN (
SELECT ' ' || RV.DDOCTITLE AS data
FROM REVISIONS RV
WHERE RV.DID = c1.DID)
LOOP
v_clob := v_clob || c2.data;
END LOOP;
END LOOP;
p_clob := v_clob;
end docmeta_revisions_text_feeder
这些是偏好
BEGIN
CTX_DDL.CREATE_PREFERENCE ('concat_DM_RV_DS', 'USER_DATASTORE');
CTX_DDL.SET_ATTRIBUTE ('concat_DM_RV_DS', 'PROCEDURE',
'docmeta_revisions_text_feeder');
END;
现在我们创建索引
CREATE INDEX concat_DM_RV_idx ON DOCMETA (FULLTEXTIDX_DUMMY)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS ('datastore concat_DM_RV_DS
section group CTXSYS.AUTO_SECTION_GROUP
') PARALLEL 4;
数据主要由一个简单的标题或作者姓名 + 一个小于 1k 文本的简短描述组成。
我尝试对涉及的内存设置和 PARALLEL 参数进行一些尝试,但没有任何成功。所以我的问题来了:
- 有没有办法暂停和恢复索引过程(我手头有 CTX_SYS 角色)?
- 有没有人暗示可以调整哪个参数(尤其是内存大小)?
- 是否可以导出和导入文本索引?-> 然后我可以在我的本地机器上执行索引并将其复制到我们的服务器
- 索引器可以以“较低优先级”运行吗?
- 索引器可能已受到锁定操作的干扰(它是其他人并行访问的登台机器)。有没有办法锁定所涉及的表,创建索引并在之后解锁它们?