OPTIMIZER-Problem
Date: 1995/08/10
Message-ID: <40d47h$377_at_unlisys.unlisys.net>
Hi, DB-Gurus !
I have three major problems, which are not easy to unsterstand, therefore I have decided to post every problem in a single mail.
Q 1: OPTIMIZER-Problem Q 2: Performance-Problem (Hardware ?) Q 3: failsave database ? ________________________________________________________________General Information : we use oracle V 7.1.4.1.0, for performance testing I involved SQL*Plus: Release 3.1.3.2.1 OS is HP-UX V. 9.05
so far, let's start with Q 1:
OPTIMIZER Problem :
Caused by some performance-problems, I had to tune some
SQL-statements in several program-units (all written in Pro*C).
Tuning by hand was very hard and sometimes the desired effect was
not guaranteed, so we decided to force the optimizer mode to 'COST'.
This resulted into the first problem, because the init.ora parameter
OPTIMIZER_MODE won't run with 'COST' (ORA Server Concepts ,
13-29), but it runs with 'FIRST_ROWS'.
Q 1a : is this the same ?
we perform with this mode an ANALYZE once a week on our
developer-machine (HP 9000/715, HP-UX 9.05). Some statements
became much faster and everything seems to be o.k..
Then the surprise : as we put the tuned application on our
customers's machine (an HP 9000/887, HP-UX 9.05 ) and force the
optimizer mode to FIRST_ROWS, the application SLOWS DOWN
(analyze IS performed) !
Q 1b: has anybody an idea about this ?
We forced the optimizer back to RULE and the application is as slow as before but not as slow as with FIRST_ROWS.
for example following statement :
SELECT TO_CHAR(DAT_ZEIT_VON,'DD.MM., HH24:MI'),AUFTRAG.TYP, PATIENT.NACHNAME,
PATIENT.VORNAME, PATIENT.PAT_ID, AUFTRAG.ATG_ID, AUFTRAG.AUFTRAGSART ,
GERAET.BEZEICHNUNG
FROM
PATIENT, AUFENTHALT, BELEGUNG, AUFTRAG, TERMIN, GERAET
WHERE
(
TERMIN.ATG_ID = AUFTRAG.ATG_ID AND TERMIN.FOREIGN_ID = '435953' AND AUFTRAG.STATUS = 'T' AND AUFTRAG.AUFTRAGSART = 'LABORUNTERSUCHUNG' AND AUFTRAG.AUFH_ID = AUFENTHALT.AUFH_ID AND AUFENTHALT.aufn_status in ('A','T') AND AUFENTHALT.PAT_ID = PATIENT.PAT_ID AND BELEGUNG.AUFH_ID = AUFENTHALT.AUFH_ID AND BELEGUNG.STAT_ID = 435599 AND BELEGUNG.BEL_STATUS = 'A' AND GERAET.GRT_ID = TERMIN.FOREIGN_ID)
ORDER BY AUFTRAG.TYP, GERAET.BEZEICHNUNG, to_char(termin.dat_zeit_von,'YYYY.MM.DD HH24:MI')
I got the following execution plan from tkprof utility:
Rows Execution Plan
------- --------------------------------------------------- 0 SELECT STATEMENT OPTIMIZER HINT: FIRST_ROWS 1 SORT (ORDER BY) 1 NESTED LOOPS 1 NESTED LOOPS 35 NESTED LOOPS 156 NESTED LOOPS 9603 NESTED LOOPS 1 TABLE ACCESS OPTIMIZER HINT: ANALYZED (BY ROWID) OF
'GERAET'
1 INDEX OPTIMIZER HINT: ANALYZED (UNIQUE SCAN) OF
'GERAET_GRT_ID_PCON' (UNIQUE)
9604 INDEX (RANGE SCAN) OF 'TERMIN_FKEY_ATG_VON_IDX' (UNIQUE) 9603 TABLE ACCESS OPTIMIZER HINT: ANALYZED (BY ROWID) OF
'AUFTRAG'
9603 INDEX OPTIMIZER HINT: ANALYZED (UNIQUE SCAN) OF
'AUFTRAG_ATG_ID_PCON' (UNIQUE)
156 TABLE ACCESS OPTIMIZER HINT: ANALYZED (BY ROWID) OF
'AUFENTHALT'
156 INDEX OPTIMIZER HINT: ANALYZED (UNIQUE SCAN) OF
'AUFENTHALT_AUFH_ID_PCON' (UNIQUE)
203 TABLE ACCESS OPTIMIZER HINT: ANALYZED (BY ROWID) OF
'BELEGUNG'
238 INDEX OPTIMIZER HINT: ANALYZED (RANGE SCAN) OF
'BELEGUNG_AUFH_ID_IDX' (NON-UNIQUE)
1 TABLE ACCESS OPTIMIZER HINT: ANALYZED (BY ROWID) OF 'PATIENT' 1 INDEX OPTIMIZER HINT: ANALYZED (UNIQUE SCAN) OF
'PATIENT_PAT_ID_PCON' (UNIQUE)
the plan is exactly the same when I change the order of columns in the WHERE-clause in any way (I've permuted all !).
In optimizer-mode RULE I got a different execution plan :
EXPLAIN_PLAN
SORT ORDER BY
NESTED LOOPS
NESTED LOOPS NESTED LOOPS NESTED LOOPS NESTED LOOPS TABLE ACCESS BY ROWID AUFTRAG INDEX RANGE SCAN AUFTRAG_AUFTRAGSART_IDX TABLE ACCESS BY ROWID AUFENTHALT INDEX UNIQUE SCAN AUFENTHALT_AUFH_ID_PCON TABLE ACCESS BY ROWID PATIENT INDEX UNIQUE SCAN PATIENT_PAT_ID_PCON TABLE ACCESS BY ROWID TERMIN INDEX RANGE SCAN TERMIN_ATG_ID_IDX TABLE ACCESS BY ROWID GERAET INDEX UNIQUE SCAN GERAET_GRT_ID_PCON TABLE ACCESS BY ROWID BELEGUNG INDEX RANGE SCAN BELEGUNG_AUFH_ID_IDX Q 1c : How can I change the statement to force the RDBMS to use the first execution plan whithout using the COST-based optimizer ?
Any comments, suggestions, or questions are appreciated !
Please e-mail me directly and I will post a digest in the newsgroup.
-- ,,, (o o) ~*~~*~~*~~*~~*~~*~~*~~*~~oOO~~(_)~~OOo~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~ Please apologize but english is not my native language R. Korell, EMi GmbH (Medical Informatics) Karl-Marx-Str. 204 , D 12055 Berlin, Germany Internet: korell_at_emi.de Compuserve: 100601.3532_at_compuserve.com phone: +49 (30) 6814032 fax: +49 (30) 6814031 ~*~~*~~*~~*~~*~~*~~*~~*~~(___)~*~(___)~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~ The opinions you read here are mine and not necessarily those of my employers. Although, I must say they are the truth, the whole truth, and nothing like the truth. As far as I'm concerned anyway...Received on Thu Aug 10 1995 - 00:00:00 CEST