第一次实施Oracle Text项目,经验与教训记录
2007-06-04 14:16
274 查看
前面对Oracle Text做了一段时间的学习和研究应用
但是都关注于如果使用以与我们的系统集成
这2周去客户那实施,
由于2台Oracle服务器虽然版本相同,但某些配置或环境的原因(最后也没找到那些区别)
之间遇到的N多问题把我郁闷坏了
google不到,其间还通知ITPub重启了一次服务器。。
在此做一下总结吧,免得又忘了
1. 关于不同服务器,2个模糊搜索or的解决办法
数据表T1有2个字段f1,f2均建有全文索引
搜索语法应该是
Select Count(id) from t1 where contains(idx_f1,'about(中国)')>0 or contains(idx_f2,'about(中国)')>0
在一台服务器是正常的(搜索耗时不到1s),另一台有问题如下(搜索耗时1min+):
SQL> SELECT count(t1.sFileID) FROM bms115.tfilecache t1 where ((Contains(t1.sdoc
info,'About(sports arts)', 1) > 0 or Contains(t1.scontext,'About(sports arts)' , 2) > 0));
COUNT(T1.SFILEID)
-----------------
872
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=55 Card=1 Bytes=107)
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (FULL) OF 'TFILECACHE' (Cost=55 Card=135 By
tes=14445)
上面TABLE ACCESS (FULL) OF 'TFILECACHE' 在正常机器为Table Access(By Index RowID)
Statistics
----------------------------------------------------------
1378394 recursive calls
0 db block gets
1386185 consistent gets
2 physical reads
0 redo size
386 bytes sent via SQL*Net to client
503 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
解决办法为
修改查询语句,采用union分别计算2个字段的情况
SELECT count(t1.sFileID) FROM bms115.tfilecache t1 where ((Contains(t1.sdocinfo,'About(sports arts)', 1) > 0
union
SELECT count(t1.sFileID) FROM bms115.tfilecache t1 where Contains(t1.scontext,'About(sports arts)' , 2) > 0));
这种语句并不是对所有情适用,在我们单位测试机器上,就只能使用Or连接的方式
2.无法启用在线更新的办法
在执行索引更新时
execute immediate
' alter index BMS115.IDX_CONTEXT rebuild online ' ||
' parameters ( ''sync'' )' ;
时出现问题 说 未启用特性 Online Index Build
这个据google说是Oracle版本问题
但我们的情况是2台都是企业版,可能安装有差别
解决办法是使用ctx_ddl包的相关办法
ctx_ddl.sync_index('BMS115.IDX_CONTEXT' );
要在存储过程中使用这个包,需要用户授予ctxApp角色,同时添加对该包的访问权限: EnterpriseManager 安全性--〉用户 -->对象页签
或者重建索引
drop index idx_f1;
create index idx_f1 on t1(f1) index type is ....;
对于查询使用Union的情况,
在执行完同步后,要记得要执行一次分析
dbms_stats.gather_index_stats(ownname=> 'BMS115', indname=> 'IDX_CONTEXT', partname=> NULL);
否则速度慢的可怜。。。
但是都关注于如果使用以与我们的系统集成
这2周去客户那实施,
由于2台Oracle服务器虽然版本相同,但某些配置或环境的原因(最后也没找到那些区别)
之间遇到的N多问题把我郁闷坏了
google不到,其间还通知ITPub重启了一次服务器。。
在此做一下总结吧,免得又忘了
1. 关于不同服务器,2个模糊搜索or的解决办法
数据表T1有2个字段f1,f2均建有全文索引
搜索语法应该是
Select Count(id) from t1 where contains(idx_f1,'about(中国)')>0 or contains(idx_f2,'about(中国)')>0
在一台服务器是正常的(搜索耗时不到1s),另一台有问题如下(搜索耗时1min+):
SQL> SELECT count(t1.sFileID) FROM bms115.tfilecache t1 where ((Contains(t1.sdoc
info,'About(sports arts)', 1) > 0 or Contains(t1.scontext,'About(sports arts)' , 2) > 0));
COUNT(T1.SFILEID)
-----------------
872
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=55 Card=1 Bytes=107)
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (FULL) OF 'TFILECACHE' (Cost=55 Card=135 By
tes=14445)
上面TABLE ACCESS (FULL) OF 'TFILECACHE' 在正常机器为Table Access(By Index RowID)
Statistics
----------------------------------------------------------
1378394 recursive calls
0 db block gets
1386185 consistent gets
2 physical reads
0 redo size
386 bytes sent via SQL*Net to client
503 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
解决办法为
修改查询语句,采用union分别计算2个字段的情况
SELECT count(t1.sFileID) FROM bms115.tfilecache t1 where ((Contains(t1.sdocinfo,'About(sports arts)', 1) > 0
union
SELECT count(t1.sFileID) FROM bms115.tfilecache t1 where Contains(t1.scontext,'About(sports arts)' , 2) > 0));
这种语句并不是对所有情适用,在我们单位测试机器上,就只能使用Or连接的方式
2.无法启用在线更新的办法
在执行索引更新时
execute immediate
' alter index BMS115.IDX_CONTEXT rebuild online ' ||
' parameters ( ''sync'' )' ;
时出现问题 说 未启用特性 Online Index Build
这个据google说是Oracle版本问题
但我们的情况是2台都是企业版,可能安装有差别
解决办法是使用ctx_ddl包的相关办法
ctx_ddl.sync_index('BMS115.IDX_CONTEXT' );
要在存储过程中使用这个包,需要用户授予ctxApp角色,同时添加对该包的访问权限: EnterpriseManager 安全性--〉用户 -->对象页签
或者重建索引
drop index idx_f1;
create index idx_f1 on t1(f1) index type is ....;
对于查询使用Union的情况,
在执行完同步后,要记得要执行一次分析
dbms_stats.gather_index_stats(ownname=> 'BMS115', indname=> 'IDX_CONTEXT', partname=> NULL);
否则速度慢的可怜。。。
相关文章推荐
- 小公司项目实施--从我的一次经历看经验教训
- 小公司项目实施--从我的一次经历看经验教训
- 小公司项目实施--从我的一次经历看经验教训
- 关于企业云盘实施的经验教训
- 第一次做项目,没经验
- 写代码累了放松娱乐一下,在大型生产型企业成功实施工作审批流程项目的经验分享
- 一个项目的经验教训:关于打乱和拆分数据
- 项目实施经验谈
- 通过自己的项目实际经验,阐述为什么“恶心玩技术”?玩Java开源B/S的教训(三)
- 新项目开发经验教训
- EAI项目实施经验谈
- 项目中的经验及教训
- EAI项目实施经验谈
- 第一次亲身感受良好的ASP.NET代码积累,强壮的软件产品是【马力强劲的印钞机】万能神速企业信单据数字化系统实施经验
- SAP实施Roll out项目经验谈(一)
- 一些项目经验记录
- 软件开发的滑铁卢----重大失控项目的经验和教训(之二)
- 软件开发的滑铁卢----重大失控项目的经验与教训
- 通过自己的项目实际经验,阐述为什么“恶心玩技术”?玩Java开源C/S的教训(二)