在版本10.2中存在<BUG 6624968 - A QUERY AGAINST A TRANSACTIONAL TEXT INDEX CONSUMES HUGE PGA MEMORY>对于文本索引的查询可能引发PGA内存过量消耗, 如以下演示:
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
SQL>
SQL>
SQL> CREATE TABLE TESTTAB (COL1 NUMBER, COL2 VARCHAR2(500),
2 CONSTRAINT PK_COL1 PRIMARY KEY (COL1));
Table created.
SQL> CREATE INDEX CTXI ON TESTTAB (COL2)
2 INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS('TRANSACTIONAL');
Index created.
BEGIN
FOR CNT IN 1..5000 LOOP
INSERT INTO TESTTAB VALUES
(CNT,'123456789 123456789 123456789 123456789 123456789 ');
IF MOD(CNT,500)=0 THEN COMMIT;
END IF;
END LOOP;
END;
/
PL/SQL procedure successfully completed.
SQL> conn maclean/oracle
Connected.
SELECT COL1 FROM TESTTAB WHERE CONTAINS(COL2,'%2') > 0;
SQL> col name for a30
SQL> set linesize 140 pagesize 1400
SQL> select ss.sid, sn.name, ss.value
2 from v$session se, v$sesstat ss,v$statname sn
3 where ss.STATISTIC#=sn.STATISTIC# and se.SID=ss.SID
4 and se.USERNAME='MACLEAN' and sn.name like '%pga%';
SID NAME VALUE
---------- ------------------------------ ----------
159 session pga memory 330403416
159 session pga memory max 331976280
BEGIN
FOR CNT IN 1..50000 LOOP
INSERT INTO TESTTAB VALUES
(CNT,'123456789 123456789 123456789 123456789 123456789 ');
IF MOD(CNT,500)=0 THEN COMMIT;
END IF;
END LOOP;
END;
/
SQL> set linesize 140 pagesize 1400
SQL> select ss.sid, sn.name, ss.value
2 from v$session se, v$sesstat ss,v$statname sn
3 where ss.STATISTIC#=sn.STATISTIC# and se.SID=ss.SID
4 and se.USERNAME='MACLEAN' and sn.name like '%pga%';
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
159 session pga memory 983993944
159 session pga memory max 985108056
SQL>
SQL> /
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
159 session pga memory 991071832
159 session pga memory max 992185944
SQL> /
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
159 session pga memory 993693272
159 session pga memory max 994807384
SQL> /
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
159 session pga memory 1000771160
159 session pga memory max 1001885272
SQL> /
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
159 session pga memory 1127648856
159 session pga memory max 1128762968
SQL> /
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
159 session pga memory 1130008152
159 session pga memory max 1131122264
SQL> /
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
159 session pga memory 1131974232
159 session pga memory max 1133088344
SQL> /
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
159 session pga memory 1133678168
159 session pga memory max 1134792280
SQL> /
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
159 session pga memory 1197641304
159 session pga memory max 1198755416
SQL> /
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
159 session pga memory 1200262744
159 session pga memory max 1201376856
SQL> /
SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
159 session pga memory 1695321688
159 session pga memory max 1696435800
该BUG已确认在版本10.2.0.4和11.1.0.7之前可以重复触发。 解决方法主要是达到最新的patchset