News
DBA-Tipp: Oracle DB 12c SE2 Thread Limitierung

Die Information ist ein schnelllebiges Gut. Jeden Tag werden wir mit hunderten Informationen zugemüllt. Deshalb sind wir bestrebt uns auf das Wesentliche zu konzentrieren und nur substantiell nachhaltige Informationen bereitzustellen.

Icon Unternehmen

In den letzten Monaten häufen sich die Anfragen zur Oracle DB 12c Standard Edition Two (SE2) und der damit einhergehenden Limitierung auf 16 Threads bei Single Datenbanken und 8 Threads je Instanz (maximal zwei möglich) bei Real Application Clusters Datenbanken. Die theoretische Funktionsweise der Limitierung wurde in einem unserer anderen Artikel bereits erläutert.

In diesem Artikel wollen wir die Funktionsweise an einem praktischen Beispiel zeigen. Wir werden sehen, woran man die Limitierung erkennt und welche Möglichkeiten es gibt diese zu vermeiden.

Das zur Verfügung stehende Test-System ist ein Oracle Linux 6 Server mit 20 virtuellen CPUs auf einer VMware Umgebung und einer Oracle DB 12.1.0.2 SE2 mit aktuellstem Patch Set Update vom Januar 2017. Außerdem wurde zur Performance-Auswertung das Oracle Tool Statspack in der Datenbank eingerichtet.

Im ersten Test wurden zehn gleichzeitige Oracle Client Prozesse ausgeführt, welche jeweils auf einem Thread mit 100% CPU Auslastung laufen. Dafür wurde die Client Session mit sqlplus ausgeführt.

for i in `seq 1 10`; do (sqlplus hr/hr <<END
exec loop null; end loop;
END
)&
done

Für die Prüfung der CPU Auslastung wurde das Betriebssystemprogramm „top“ verwendet.

Abb. Betriebssystemauslastung mit top

In den Session Waits tauchen beim ersten Test hauptsächlich „idle“ Events auf.  

Abb. Session Waits

Auch die Auswertung des Statspack Reports (5 Minuten) zeigt überwiegend „idle“ Events. Außerdem ist hier die zu erwartende Datenbank CPU Zeit von 3000 Sekunden (300 Sekunden x 10 Sessions) zu sehen.

Abb. Statspack

Als nächstes wurden gleichzeitig 18 sqlplus Sessions ausgeführt, welche ohne Begrenzung der Datenbank jeweils einen kompletten Thread belegen würden. Hier ist nun die Limitierung der Oracle 12c SE2 zu erkennen.

Abb. Betriebssystemauslastung mit top

Im „top“ können wir jetzt  sehen, dass die Auslastung pro Thread auf circa 80% gesunken ist. In den Session Waits und im Statspack Report rückt das Event „resmgr:cpu quantum“ an die Spitze. Dieses Event zeigt uns, dass die Sessions auf die Zuteilung von CPU Ressourcen warten. Außerdem sehen wir, dass die Limitierung über den Resource Manager der Datenbank realisiert wird. Die ausgewiesene Datenbank CPU Zeit des Statspack Reports (5 Minuten) beträgt 4431 Sekunden und liegt somit etwas unter den für 16 Threads zu erwartenden 4800 Sekunden.   

Abb. Session Waits

Abb. Statspack

Zum Vergleich wurde der gleiche Test auf demselben System mit einer Oracle 12c Enterprise Edition durchgeführt. Hier können alle 18 Client Sessions ihren jeweilig zugeteilten Thread zu 100% auslasten. Im Statspack Report (5 Minuten) erreicht die Datenbank CPU Zeit die optimale Auslastung von 5400 Sekunden. 

Abb. Betriebssystemauslastung mit top

Abb. Statspack

Falls eine Analyse Ihrer Datenbank ergeben haben sollte, dass sie über 16 Threads benötigt, können nachfolgende Anpassungs- bzw. Optimierungsmöglichkeiten geprüft werden:

  1. Ist es möglich, die Daten auf mehrere Oracle Datenbanken aufzuteilen? CPU intensive Client Sessions könnten somit ebenfalls auf mehrere Datenbanken verteilt werden.
  2. Gibt es SQL Statements, welche optimiert werden können, um somit den CPU Verbrauch zu senken?
  3. Können SQL Statements, zum Beispiel von gleichzeitig durchgeführten Datenbankjobs, zeitlich besser geplant werden?

Abschließend ist zu sagen, dass die Thread Limitierung der Oracle 12c Standard Edition Two (SE2) nur bei wenigen Kunden bzw. Datenbanken relevant sein wird. In typischen OLTP Datenbankumgebungen, welche bisher die Oracle Standard Edition (SE) oder Standard Edition One (SE1) einsetzen, wird die Limitierung selten Probleme bereiten. Eine definitive Aussage über die Eignung einer Datenbank als SE2 kann aber nur durch eine Überprüfung der Datenbank zu Lastzeiten erfolgen. Diese sollte schon vor dem Upgrade der Datenbank auf Oracle 12c SE2 durchgeführt werden.