In unserem Unternehmen Drägerwerk AG & Co. KGaA verwenden die Techniker weltweit eine spezielle Service Connect Applikation,
über die Dokumentationen von Geräten zur Verfügung gestellt werden. Die Applikation arbeitet im Hintergrund mit einer Oracle Datenbank der Version 11.2.0.4.
In der betroffenen Datenbank kommen seit kurzer Zeit Oracle Data Rest Services (kurz ORDS) zum Einsatz; in jedem Rest Modul ist dabei eine Authentifizierung eingebaut.
Da die Clients ständig nach Aktualisierungen fragen, werden die ORDS Module und das dort existierende Authentifizierungspackage sehr oft ausgeführt. Dies führte
bei uns zu massiven Performanceproblemen.
Folgende Tabelle zeigt eine Messung aus der Praxis: Innerhalb einer (1) Stunde (von 12:28 bis 13:28) zeigte sich folgendes Verhalten.
Sum_in_Sec | SQL_ID | Begin | End | Executions |
---|---|---|---|---|
50877 | cd07b8r05zymu | 2016-06-27 12:28:08 | 2016-06-27 13:28:07 | 50733 |
28115 | 4cqvnf34a5qm4 | 2016-06-27 12:28:08 | 2016-06-27 13:28:07 | 28037 |
9808 | dvj0g055n95qz | 2016-06-27 12:28:08 | 2016-06-27 13:28:07 | 9779 |
... | ... | 2016-06-27 12:28:08 | 2016-06-27 13:28:07 | ... |
FUNCTION func1 ( par1 IN VARCHAR2, par2 IN VARCHAR2 default 'R001', par3 IN NUMBER default null ) return VARCHAR2 RESULT_CACHE;
Nachdem der Result Cache aktiv war, warteten wir ungeduldig auf die Ergebnisse.
Sofort nach der Umsetzung konnte ich sehen, dass die Authentifizierungsabfragen aus dem "Top SQL" Bereich komplett verschwunden waren.
Zusätzlich konnte ich feststellen, das die Datenbank Server plötzlich kaum noch belastet war!
Nun wartete ich noch auf die ersten Reaktionen der Applikationsbetreuer, und hier kam eine tolle Überraschung:
" Was hast Du gemacht? Die Performance ist ausgezeichnet! Dies waren die ersten Kommentare."
Nach der Überprüfung des Result Caches über die View V$RESULT_CACHE_OBJECTS wusste ich auch woher diese Performanceverbesserung rührte.
Anmerkung: V$RESULT_CACHE_OBJECTS gibt Aufschluss über die Nutzung der einzelnen Ergebnisse im Cache und ihren Abhängigkeiten.
So kann man genau feststellen, wie häufig z.B. ein "Cache-Objekt" vom Typ "Result" oder "Dependency" verwendet worden ist.
SQL> SELECT id, name, cache_id, type, status, invalidations, scan_count FROM v$result_cache_objects;In unserem Beispiel so das so aus:
In der Spalte SCAN_COUNT (rechte Spalte rot umrandet) konnten wir erkennen, dass die Authentifizierungsabfragen im Result Cache sehr schnell tausende Male gescannt wurden.
Fazit
Das Ergebnis hat alle unsere Erwartungen übertroffen. Nach der Einführung des Result Caches verbrauchen die gleichen Abfragen durchschnittlich nur noch 0,5 CPU pro Stunde statt wie zu Beginn die berechneten 24 CPUs. Im erwähnten Dojo fand ich folgendes Zitat: " Den Oracle Result Cache finde ich einfach cool! " Dieser Feststellung kann ich mich einfach nur anschließen. Für mich ist Oracle Result Cache in einigen Applikationen unersetzlich, weil dadurch massiv Performance verbessert werden kann.
Weitere Informationen
Downloadadresse der Dojo Büchlein: http://tinyurl.com/dojoonline
Zurück zum Anfang des Artikels
Zurück zur Community-Seite