Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.server -> Extra Implicit Parsing in Forms 6.0 - Performance Problem
Hi All,
I form part of a performance and scalability team and during our move to forms 6.0 we noticed a new and significant overhead that is now built into the product.
[Oracle Bug 1019023 and TAR 2281376.1]
The extra parses occur in every form for every base block and they repeatedly occur every time you open the form. Having tuned our 4.5 installation until the 'pips squeaked' we were surprised when our converted forms 6.0 forms failed to perform too.
Having isolated the problem we contacted Oracle, who have eventually informed us that, as suspected, this is to permit the use of some of the new features in 8i, see below:
Oracle's response to the extra processing in Forms 6 (Bug 1019023 on the
Oracle Support Site)
This is not a bug. Implicit describe has been added in 6.0. Presently, there
is no way to toggle this on/off. You may want to consider a enhancement
request to do this. The following are the reasons, a Describe is required:
1) Oracle 8, supports CLOBS. Forms 6.0 supports items based on CLOBS. If you
have noticed, the builder does not have a CLOB as a data type for a item. So
CHAR item can have a CHAR/VARCHR2/BLOB as the corresponding database column.
So, how does the Forms Runtime know whether the underlying column is a
CHAR/VARCHR2/BLOB. A 'Describe' is necessary for that.
2) Oracle 8 and Forms 6.0 supports ADT's. A block can be based on a ADT. The
Forms Runtime has no way of knowing this as the user does not specify any
ADT information in the Builder. For DML on a ADT, we need to know the column
types. So a 'Describe' is done.
Our company for one believes this to be unacceptable. We cannot tell our customers that they will need to upgrade their servers just to provide the same level of service as they already had.
Far from this release enhancing scalability as Oracle have claimed, it has, in fact added a huge overhead to multiple form OLTP type systems.
I am wondering if other people have also noticed this and whether or not they deem this to be a problem.
Mike Smith
Senior Consultant
Certis Ltd
Extra info, from a supplementary email:
Hi,
It's quite a severe degradation in service, from that we obtained from forms 4.5. Included below is a portion of the trace file that started the row with Oracle.
Note the parses of 'Select *' these have been added by Oracle - they simply did not exist before. They were a result of just 7 form openings. For each base block you get one of these every time you open the form. As you can imaging this extra load would not be acceptable in an OLTP database with 2000 + users, especially when the parse timings actually exceed the time the form took to actually do it's work.
Regards Again,
Mike
select *
from
WIP_POLICY_CONTRACTS
call count cpu elapsed disk query current
rows
------- ------ -------- ---------- ---------- ---------- ---------- ------
Misses in library cache during parse: 0
Optimizer goal: CHOOSE
Parsing user id: 56 (SUSER)
Rows Execution Plan
------- ---------------------------------------------------
0 SELECT STATEMENT GOAL: CHOOSE 0 TABLE ACCESS (FULL) OF 'WIP_POLICY_CONTRACTS' ****************************************************************************
SELECT ROWID,CONTRACT_ID,END_OF_TERM_ACTION,CONTRACT_LANGUAGE,
CONTRACT_CURRENCY,CONTRACT_STATUS
FROM
WIP_POLICY_CONTRACTS WHERE contract_id = :1
call count cpu elapsed disk query current
rows
------- ------ -------- ---------- ---------- ---------- ---------- ------
Misses in library cache during parse: 0
Optimizer goal: CHOOSE
Parsing user id: 56 (SUSER)
Rows Execution Plan
------- ---------------------------------------------------
0 SELECT STATEMENT GOAL: CHOOSE 1 TABLE ACCESS (BY ROWID) OF 'WIP_POLICY_CONTRACTS' 1 INDEX (UNIQUE SCAN) OF 'WIP_POL_CONT_PK' (UNIQUE) ****************************************************************************
select *
from
WIP_POLICY_VERSIONS
call count cpu elapsed disk query current
rows
------- ------ -------- ---------- ---------- ---------- ---------- ------
Misses in library cache during parse: 0
Optimizer goal: CHOOSE
Parsing user id: 56 (SUSER)
Rows Execution Plan
------- ---------------------------------------------------
0 SELECT STATEMENT GOAL: CHOOSE 0 TABLE ACCESS (FULL) OF 'WIP_POLICY_VERSIONS' ****************************************************************************
SELECT ROWID,PRODUCT_ID,PROD_VERSION,CONTRACT_ID,CONTRACT_STATUS
FROM
WIP_POLICY_VERSIONS WHERE (CONTRACT_ID=:1)
call count cpu elapsed disk query current
rows
------- ------ -------- ---------- ---------- ---------- ---------- ------
Misses in library cache during parse: 0
Optimizer goal: CHOOSE
Parsing user id: 56 (SUSER)
Rows Execution Plan
------- ---------------------------------------------------
0 SELECT STATEMENT GOAL: CHOOSE 1 TABLE ACCESS (BY ROWID) OF 'WIP_POLICY_VERSIONS' 1 INDEX (UNIQUE SCAN) OF 'WIP_POL_VERS_PK' (UNIQUE) ****************************************************************************
select *
from
WIP_POLICY_BASES
call count cpu elapsed disk query current
rows
------- ------ -------- ---------- ---------- ---------- ---------- ------
Misses in library cache during parse: 0
Optimizer goal: CHOOSE
Parsing user id: 56 (SUSER)
Rows Execution Plan
------- ---------------------------------------------------
0 SELECT STATEMENT GOAL: CHOOSE 0 TABLE ACCESS (FULL) OF 'WIP_POLICY_BASES' ****************************************************************************
SELECT ROWID,TERM_START_DATE,TERM_END_DATE,AGENT_ROLE,GROUP_ID,COMPANY_ID,
COMPANY_ORG_UNIT,CONTRACT_ID,ACTION_CODE
FROM
WIP_POLICY_BASES WHERE action_code != 'D' and (CONTRACT_ID=:1)
call count cpu elapsed disk query current
rows
------- ------ -------- ---------- ---------- ---------- ---------- ------
Misses in library cache during parse: 0
Optimizer goal: CHOOSE
Parsing user id: 56 (SUSER)
Rows Execution Plan
------- ---------------------------------------------------
0 SELECT STATEMENT GOAL: CHOOSE 1 TABLE ACCESS (BY ROWID) OF 'WIP_POLICY_BASES' 1 INDEX (UNIQUE SCAN) OF 'WIP_POL_BASE_PK' (UNIQUE) ****************************************************************************
![]() |
![]() |