Ein Kunde hat Patches in seine Datenbank eingespielt und danach gab es Probleme mit der Datenbank-Performance. Eine Analyse zeigte, dass die Änderungen der Ausführungspläne unmittelbar nach dem Einspielen der Patches erfolgte.
Laut Aussage des Kunden wurden die Patches wie folgt installiert:
opatch apply
./datapatch -verbose
execute dbms_optim_bundle.enable_optim_fixes('ON','BOTH', 'YES');
Der letzte Step gab zu denken, den hatte ich in Verbindung mit dem normalen Ablauf des Patchens noch nicht gesehen. Was sagt also die Oracle-Dokumentation:
"The DBMS_OPTIM_BUNDLE package is used to manage the installed but disabled module bug fixes which cause an execution plan change."
Zu den Bug Fixes sagt das Oracle-Patch-Handbuch Folgendes:
Do proactive patches include optimizer fixes?
- "Windows Database Bundle Patch" can include optimizer fixes.
- Oracle Database RUs can include optimizer fixes for issues that arise from inaccurate optimizer results, but only in a form that enables or disables them individually, as required. RUs include optimizer fixes in the "disabled by default" state. ...
Da mit dem Patchen ein RU eingespielt wurde und der DB-Server unter Linux läuft, hat der Kunde alle Patches aktiviert, die Änderungen am Execution-Plan zur Folge haben können. Die Lösung des Problems war daher die entsprechenden Patches zu disablen:
execute dbms_optim_bundle.enable_optim_fixes('OFF','BOTH', 'NO');
Fazit:
Oracle empfiehlt Folgendes:
Wenn die vierteljährlichen RUs installiert werden, sollten die Patches mit Optimizer Fixes nicht ohne vorherige umfangreiche Tests enabled werden. Bei einer neuen Installation sollten diese Fixes enabled und die Applikation entsprechend getestet werden.
Ernst Leber


