Wir finden einen Schatz - SQLT, Teil 1

04.
August
2016
Veröffentlicht von: Katja Werner

Die Suche beginnt  - Schon seit Ewigkeiten gibt es ein Tool zur Performance-Analyse von SQL-Statements... 

Schon seit Ewigkeiten gibt es ein Tool zur Performance-Analyse von SQL-Statements: ständig weiterentwickelt und auch intern eingesetzt von Oracle, kostenlos, auch ohne Diagnostic- und Tuning-Pack nutzbar und - in weiten Kreisen - unbekannt. Gründe genug, das Tool an dieser Stelle vorzustellen und einen "Performance-Tuning-Schatz" einem größeren Publikum zugänglich zu machen. 

Teil 1 beinhaltet die Vorstellung des Tools und erläutert die Installation. In <link blog-detailansicht wir-finden-einen-schatz-sqlt-teil-2.html external-link-new-window internal link in current>Opens external link in new windowTeil 2 werden die Analyse-Möglichkeiten mit SQLT beleuchtet.

 

Die Suche beginnt - Einführung und Installation

 

Was ist SQLT?

SQLT ist der Kurzname für das Tool SQLTXPLAIN. Dieses Tool gibt es bereits seit 1999. Es wird intern vom Oracle Support genutzt und ebenfalls den Kunden zur Verfügung gestellt. Neben der ständigen Weiterentwicklung und dem Bugfixing kann der Anwender auf einiges an Dokumentation zurückgreifen. Diese umfasst sowohl viele Seiten im "My Oracle Support" und Diskussionen der Community als auch gut dokumentierte Installations- und Performance-Analyse-Skripts. Allein schon deren Lektüre gibt dem tuning-interessierten Datenbankadministrator oder Entwickler so manchen frischen Impuls für künftige SQL-Tuning-Tipps-und-Tricks.

SQLT ist kostenfrei. Es kann sowohl auf der Oracle Standard Edition also auch der Enterprise Edition verwendet werden. Der Informationsgehalt ist noch größer, wenn das Diagnostic- oder Tuning- und Diagnostic-Pack lizenziert sind - in diesem Fall kann SQLT nämlich auch diese Daten bei der Analyse mit einbeziehen.

Hauptzweck von SQLT ist die Performance-Analyse von SQL-Statements. Das Kernstück von SQLT ist ein Repository, in das alle Details zur Performance eines oder mehrerer SQL-Statements oder PL/SQL-Codes geschrieben werden. Hieraus erfolgt dann die Analyse sowie der Export der Daten in mehrere Outputfiles. Diese werden anschließend gezippt. Diese Schritte erfolgen automatisiert. Das Repository ist die Basis für Vergleiche von SQL-Statements und deren Ausführungsdetails. Es gehört dem User SQLTXPLAIN.

Für die Analyse von SQL-Statements mit SQLT gibt es verschiedene Parameter - in der SQLT-Dokumentation auch "Methoden" genannt. Der Anwender kann wählen:

  • Soll das zu analysierende SQL-Statement aus dem Memory oder - wenn verfügbar - dem AWR herausgelesen und analysiert werden?
  • Oder soll das Statement per Textfile übergeben und analysiert werden?
  • Sollen "nur" vorhandene Performance-Details analysiert werden?
  • Oder nur Ausführungspläne angezeigt werden?
  • Oder soll das Statement zu Analysezwecken extra auf der Datenbank ausgeführt und die Performance-Daten dabei live gesammelt werden?
  • Wie sieht es mit Bindevariablen aus - liegen sie im Memory vor und stehen zur weiteren Analyse zur Verfügung oder soll ein spezieller Wert berücksichtigt werden?
  • Je nach Einsatzzweck muss also die geeignete Methode gewählt werden. Aber darauf gehen wir im nächsten Monatstipp ein.

Installation

Die Voraussetzung für den Download von SQLT von den Oracle Seiten ist ein Account bei "My Oracle Support". Nach dem Einloggen kann die Software Opens external link in new windowhier herunter geladen werden. Das zip-File enthält neben den Installations-Source auch die Skripte, die später für die Performance-Analysen eingesetzt werden. Es sollte an gut zugänglicher Stelle auf dem Datenbankserver entpackt werden. Im Folgenden wird dieses Verzeichnis als <SQLT_ROOT> bezeichnet.

Bei der Installation von SQLT werden zwei Schemata (SQLTXADMIN, SQLTXPLAIN) auf der Datenbank angelegt. Es ist empfohlen zur Analyse der Statements die Applikations-User zu verwenden, diese erhalten die Rolle SQLT_USER_ROLE. Dieser Rolle sind folgende höhere Rechte zugewiesen: SELECT_CATALOG_ROLE, ADVISOR sowie EXECUTE auf SYS.DBMS_METADATA und Lese-/Schreibrechte auf das Directory, in das die Tracefiles geschrieben werden. Ist Oracle Text installiert, so wird an die SQLT_USER_ROLE auch der Zugriff auf das Package CTXSYS.CTX_REPORT vergeben. So können also auch Oracle Text Indizes in die Performance-Analyse einbezogen werden.

Die Installation wird wie folgt gestartet:

cd <SQLT_ROOT>/install

sqlplus sys as sysdba

start sqcreate.sql

Während der Installation wird nach dem Connect Identifier (wichtig für Pluggable Databases), dem Passwort für den Repository-User SQLTXPLAIN sowie dem Tablespace für die Schemaobjekte gefragt. Optional ist die Angabe eines Applikations-Users, dessen Statements zu einem späteren Zeitpunkt analysiert werden sollen. Dieser Schritt kann auch später wiederholt und so mehrere User, deren Statements analysiert werden, hinzugefügt werden. Im letzten Schritt muss angegeben werden ob und welche Oracle-Packs SQLT für die Analysen nutzen darf. Der Default ist das Tuning- und Diagnostic-Pack, dies sollte also umgesetzt werden, wenn es auf der aktuellen Umgebung nicht lizenziert ist ("D" für "Diagnostic-Pack oder "N" für "None"). Vergisst man diese Eingabe, kann man die Verwendung von Packs wie folgt nachträglich konfigurieren:

exec sqltxadmin.sqlt$a.disable_tuning_pack_access;
exec sqltxadmin.sqlt$a.disable_diagnostic_pack_access;

Nun beginnt das Skript mit der Installation. Während der Installation wird zum Beispiel geprüft, ob bestimmte Directories vorhanden und beschreibbar sind. Dementsprechend dauert die Installation selbst auf Testdatenbanken ein paar Minuten, also nicht ungeduldig werden.

In 12c müssen unter bestimmten Umständen noch weitere Rechte vergeben werden. So auch, wenn beispielsweise der SYS- oder andere DBA-User anstelle des Applikations-Users zur Analyse genutzt werden sollen:

GRANT INHERIT PRIVILEGES ON USER SYS TO SQLTXADMIN;

GRANT INHERIT PRIVILEGES ON USER SYSTEM TO SQLTXADMIN;

Wird mit concurrent statistics gearbeitet, benötigen die beiden SQLT-User zusätzlich folgende Rechte, damit sie Statistiksammlungen starten können:

GRANT CREATE JOB, MANAGE SCHEDULER, MANAGE ANY QUEUE to SQLTXPLAIN, SQLTXADMIN;

Damit ist die Installation beendet. Soll SQLT auf vielen Datenbanken ausgerollt werden, empfiehlt sich eine Silent Installation mit Parameterfile. Im RAC-Umfeld sollte SQLT immer von demselben Knoten aus installiert und für die Performance-Analyse gestartet werden.

Zum Spielen mit den Möglichkeiten von SQLT kann mit Hilfe der Skripts unter <SQLT_ROOT>/input/sample/minidb ein Test-User mit Datenbank-Objekten installiert werden. Im selben Verzeichnis finden sich auch drei Testfallskripte mit vorbereiteten SQL-Statements, SQL_IDs und Befehlen zur Auswertung. Diese sollten aber nur mit Vorsicht genutzt bzw. angepasst werden, damit nicht versehentlich das Diagnostic- oder das Tuning- und Diagnostic-Pack genutzt wird.

cd <SQLT_ROOT>/input/sample/minidb

sqlplus sys as sysdba

-- Erstellung Testschema qtune

start create_user.sql

-- Befüllung Testschema qtune:

conn qtune/qtune

Soll SQLT deinstalliert werden, so droppt man die Schemata SQLTXPLAIN und SQLTADMIN mit dem folgenden Skript:

cd <SQLT_ROOT>/install

sqlplus sys as sysdba

start sqdrop.sql

Anschließend kann das SQLT-Verzeichnis entfernt werden und die Deinstallation ist abgeschlossen.

Alternativen zu SQLT

Scheut man sich, für die Analyse von SQL-Statements zwei separate Schemata zu installieren oder sind die Möglichkeiten von SQLT zu umfangreich, kann man den "kleinen Bruder" SQLHC (SQL Tuning Health Check) ausprobieren. Die Funktionalität von SQLHC ist ebenfalls in SQLT enthalten. SQLHC greift jedoch nur auf Statistiken, Standard-APIs sowie - wenn gewünscht - auf AWR-Informationen zu und generiert daraus einen HTML-Report mit Performance-Informationen zu diesem Statement.

Ebenfalls interessant ist das Tool SQLd360. Es wurde von Mauro Pagano entwickelt, der ebenfalls ein paar Jahre in die Weiterentwicklung von SQLT involviert war. sqld360 ist ebenfalls ein "Leichtgewicht" für die schnelle Analyse von SQL-Statements.

Unser Monatstipp soll vorerst hier enden. Im <link blog-detailansicht wir-finden-einen-schatz-sqlt-teil-2.html external-link-new-window internal link in current>Opens external link in new windownächsten Monat lesen Sie, welche Analyse-Möglichkeiten SQLT bietet. Für mehr Information stehen wir gern zur Verfügung - zum Beispiel im Rahmen einer SQL Tuning Opens internal link in current windowSchulung. Ebenso gern unterstützen Sie unsere erfahrenen Consultants bei Ihnen Opens internal link in current windowvor Ort oder per Remote-Support.

Quellen bzw. zum Weiterlesen:

Installation und Verwendung, SQLT Usage Instructions - Opens external link in new windowMOS-Note 1614107.1

SQLT (SQLTXPLAIN) Frequently Asked Questions  - Opens external link in new windowMOS-Note 1454160.1

All About the SQLT Diagnostic Tool - Opens external link in new windowMOS-Note 215187.1

SQLT in 12c Can't Gather Stats - Opens external link in new windowBlog von Brian Peasland

DBA SQL Performance Tuning Analyse SQLT

Jede Menge Know-how für Sie!

In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.