Skip to Main Content

Breadcrumb

Hint Error Anzeige

Oracle 19c: fehlerhafte Hints werden angezeigt!

Das Statementtuning mittels Hints ist eine gewisse Wissenschaft für sich. Nicht nur, dass es in der Oracle Dokumentation zu den über 370 Hints von Oracle 19c für kaum mehr als 30-40 überhaupt eine Beschreibung gibt, war es bis jetzt nicht feststellbar, ob ein Hint ignoriert wurde oder einfach nur falsch war. Hier hat Oracle mit 19c endlich nachgebessert!

Beispiel

Nehmen wir einmal ein Beispiel mit einem fehlerhaften Hint. Der Tabellen Alias lautet "X" im Hint steht aber "E".

select /*+ full(e) */ *
from sh.customers x
where cust_last_name = 'King';

Damit wir die Info zum Hintfehler bekommen, kann man gleich danach mit folgendem Statement den Execution Plan ausgeben lassen (Autotrace geht leider nicht):

select * from table(dbms_xplan.display_cursor(null,null,'LAST'));

Und schon bekommt man ganz unten die Information zum Hint:

PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID  c7ycn8htsfuy5, child number 0
-------------------------------------
select /*+ full(e) */ * from sh.customers x where cust_last_name = 'King'

Plan hash value: 831702016

----------------------------------------------------------------------------------------------------------------
| Id | Operation                                  | Name               | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------------------------
|  0 | SELECT STATEMENT                           |                    |       |       | 20060 (100)|          |
|  1 |  TABLE ACCESS BY GLOBAL INDEX ROWID BATCHED| CUSTOMERS          | 20954 |  3785K| 20060   (1)| 00:00:01 |
|* 2 |   INDEX RANGE SCAN                         | CUST_LAST_NAME_IDX | 20954 |       |    68   (0)| 00:00:01 |
----------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("CUST_LAST_NAME"='King')

Hint Report (identified by operation id / Query Block Name / Object Alias):
Total hints for statement: 1 (N - Unresolved (1))
---------------------------------------------------------------------------

   1 -  SEL$1
         N -  full(e)

Zwar noch nicht ganz perfekt - eine Begründung wäre nett - aber besser als nichts!

Übrigens: Alle Prozeduren des DBMS_XPLAN Packages können diese Information liefern, soferne sie in der SGA oder im AWR verfügbar ist.