Zur Zeit wird gefiltert nach: Oracle
Filter zurücksetzen

20.05.2011
11:03

Oracle - Ausgeführte SQL-Statements auflisten

Irgendwie komme ich doch nicht so richtig von Oracle los. Habe wieder einen Analyse-Job gefasst, um ein paar Abfragen zu optimieren.

Auf dem SQL Server würde ich den Profiler verwenden und mir zudem die ausgeführten SQL-Statements über die Query-Stats holen.

Auf einer Oracle-Datenbank kann dies mit folgender Abfrage nachgebildet werden:


SELECT
   module, 
   sql_fulltext , 
   u.username , 
   round((s.disk_reads/decode(s.executions,0,1, s.executions)),2)  disk_reads_per_exec, 
   s.disk_reads , 
   s.buffer_gets , 
   s.parse_calls , 
   s.sorts , 
   s.executions , 
   s.rows_processed , 
   s.first_load_time , 
   sharable_mem , 
   persistent_mem , 
   runtime_mem, 
   cpu_time, 
   elapsed_time
  FROM
   sys.v_$sql s, 
   sys.all_users u 
  WHERE
   s.parsing_user_id=u.user_id 
   and u.username = 'theuser'
  ORDER BY
   FIRST_LOAD_TIME desc

Werde mal weiter auf Lösungssuche gehen...

27.01.2011
22:11

Lesson learnt: Oracle mag ich nicht

Wer kennt das Sprichwort nicht: Lächle und sei froh, es könnte schlimmer kommen, ich lächelte und war froh und es kam schlimmer.

Vor allem ist es immer wieder interessant, dass man Dinge erleben kann, die sich wie eine unglaubliche Geschichte anhören. In einem der letzten Projekte ging es mir so.

Das Hauptproblem in einem Projekt war, dass ein DWH, dass auf einer eingerichteten Oracle-Schreibmaschine, die nicht den Anspruch einer soliden Grundlage erfüllte, problemlos lief. Auf dem Zielsystem unterlag die Performance jedoch starken Schwankungen. Einen Hinweis zur Definition Schreibmaschine: So nenne ich Rechner, die eigentlich nur für Office vorgesehen sind und unter dem Windows-Leistungsindex von 4 liegen.

Nach dem ersten Review kam u. a. heraus, dass die Umgebung virtualisiert war und es mehrere Zonen gab. Was für mich die Performanceschwankungen erklärte, stellte aber für den Performance-Spezialist (Guru) nicht das Problem dar und er präsentierte auch ein paar angepasste SQL-Skripts. Um dies auch rechtfertigen zu können, wurden kurzerhand die spezifizierten Hardwareanforderungen auf die tatsächliche Umgebung angepasst. Das ist mal agiles Projektmanagement aus einem anderen Blickwinkel. Für mich kam dadurch eine neue Herausforderung hinzu: Wie mache ich aus einer Schreibmaschine einen Taschenrechner? Der RAM ist ja schnell begrenzt, aber die CPU-Leistung? So bin ich auch mit cpulimit in Berührung gekommen.

Für mich war das eine sehr wichtige Erfahrung, denn so konnte ich auch lernen, dass Gutes SQL in Oracle-Umgebungen gleichzusetzen ist mit produktspezifisch und Tricky. Ein weiterer Vorteil, die Empfehlungen aus den Review habe ich in einer Testumgebung auf einem SQL-Server testen können.

Nach diesen ersten Tests habe ich doch mal im Duden zur Bedeutung von Oracle nachschlagen müssen und da steht Folgendes:

Ora|kel das; -s, - <lat.; »Sprechstätte«>:

a) Stätte (bes. im Griechenland der Antike), wo Priester[innen], Seher[innen] o. Ä. Weissagungen verkündeten oder [rätselhafte, mehrdeutige] Aussagen in Bezug auf gebotene Handlungen, rechtliche Entscheidungen o. Ä. machten;

b) durch das Orakel (a) erhaltene Weissagung, [rätselhafte, mehrdeutige] Aussage Duden - Das Fremdwörterbuch, 9. Aufl. Mannheim 2007 [CD-ROM]

Rätselhafte, mehrdeutige Aussage da habe ich doch ein Déjà-vu. Denn im ersten Review wurde bspw. ein Punkt kritisiert, welcher im zweiten wieder empfohlen wurde. Auch gab es Kritikpunkte an ein paar Einstellungen, die wir auf Empfehlung des Oracle-DBA implementierten. Die Literatur, die ich mir zum Thema organisierte, war für den Guru natürlich nicht die beste und er musste den Autor Donald K. Burleson eines Werkes auch kritisieren. Das hat System, denn in Oracle-Umgebungen macht man gerne den Developer zum Sündenbock.

Ganz ehrlich besser hätte Oracle seinen Namen gar nicht treffen können, bildlich stelle ich mir das so vor:.

Abbildung 1 Oracle-Consulting, demnächst bei Mike Shiva?
Abbildung 1

Auch wenn Oracle einen grösseren Funktionsumfang bietet, so sind damit Sachen möglich, die man besser nicht machen sollte, da sie zu Performanceeinbussen führen.

Was sich aus den Tests auf dem SQL Server ableiten lässt, ist Folgendes:

  • Ein Oracle-Developer der SQL für den SQL-Server schreiben soll, wird keine Probleme bekommen, da dieser sehr tolerant und robust ist.
  • Ein SQL-Server-Developer sollte vorher die Tipps und Tricks-Kurse der Gurus besuchen. Da diese auch Geld verdienen wollen, werden sicherlich nicht alle Tricks im ersten Kurs verraten. Mit dieser Salami-Taktik lässt sich gut verdienen und mit ein bisschen Geschick nimmt der Guru den eigentlichen Kunden auch gleich mit. Um dies zu umgehen, sollten die Schulungen nicht bei „Wir machen alles Unternehmen“ gebucht werden, die einen noch die Unterstützung anbieten. ;-)
  • Während man in der Oracle-Umgebung mit dem Feintuning beschäftigt ist und womöglich noch auf das schlechte SQL der Developer schimpft, weil mal wieder der Append-Hint bei grossen Datenmengen fehlt, lassen sich mit dem SQL-Server schon die ersten Kundenanforderungen realisieren. ;-)
  • Der mit Oracle mitgelieferte SQL Developer ist ein schlechter Aprilscherz.
  • Dem Oracle-Developer und Guru muss man vorher vielleicht noch das Lizenzmodell erklären, sonst könnte es passieren, dass er viele Funktionalitäten der Tools nicht nutzt, in der Annahme diese seien nicht lizenziert.

So etwas passiert eben, wenn die Erwartungen zu hoch sind und deswegen habe ich jetzt um so mehr Freude daran, einen Oracle-Server in die ewigen Jagdgründe migrieren zu dürfen, so als Wiedergutmachung.

26.08.2010
12:34

Wenn SQL Plus aber nun keine Lust hat, ja was mach ich dann?

Für ein Projekt, an dem ich am Rande beteiligt bin, müssen die SQL-Scripts für die Datenbank so geliefert werden, dass sich diese mit SQL Plus ausführen lassen.

Ich hatte den Part, ein paar materialisierte Sichten anzulegen, die mit ein paar Fenster-Funktionen arbeiten - liess sich leider nicht automatisieren.

Im SQL-Developer konnten diese ohne Probleme angelegt werden. Nur SQL Plus weigerte sich standhaft, das gleiche zu tun.

Was war die Ursache: Ich habe bei den Zeilen mit den Fensterfunktionen bewusst eine zusätzliche Leerzeile eingefügt, um so aus meiner subjektiven Sicht die Lesbarkeit zu verbessern.

Wie im folgenden Pseudo-Skript war das Ganze realisiert:

SQL für SQL Plus (Pseudo-SQL)
SELECT DISTINCT
  Feld1,   
  Feld2,
  Feld3,
  Feld4,
  Feld5,

  COUNT( Feld7) OVER (PARTITION BY Feld1,   
    Feld2, Feld3, Feld4, Feld5, Feld6, Feld9)
  Count_Feld7, -- comment 

  SUM( Feld10) OVER (PARTITION BY Feld1,   
    Feld2, Feld3, Feld4, Feld5, Feld6, Feld9 ORDER BY Feld9) 
  Sum_Feld10, -- comment 
  
  Feld9
FROM table ;

Was für mich und den SQL-Developer verwertbar war, erzeugte bei SQL Plus mit dem Aufruf @Dateiname.sql aber die Fehlermeldung:

SP2-0734: Unbekannter Befehl ab "Feld... " - restliche Zeile ignoriert.

Das Problem entstand durch die Leerzeilen, die eigentlich die Lesbarkeit verbessern sollten. Nach der Entfernung dieser Zeilen war auch SQL Plus gewillt, das Skript auszuführen.

Eigentlich schreiben wir das Jahr 2010, aber im Moment fühle ich mich gerade, dank Oracle, mind. 25 Jahre jünger.

15.04.2010
20:56

Oracle Performance – Nichts für schwache Nerven

Am Anfang bin ich voller Erwartung und vorurteilsfrei in ein Projekt eingestiegen, das mit Oracle als Basistechnologie gestartet wurde. Ich ging von der Annahme aus, dass sich der Wartungsaufwand ähnlich wie bei einem SQL-Server verhalten würde. Mit dieser Annahme habe ich die Rechnung ohne Oracle gemacht. Im Vergleich zum SQL-Server ist der gefühlte Aufwand um ein Vielfaches höher. Die Werkzeuge die Out of the Box mitgeliefert werden, sind schon sehr gewöhnungsbedürftig, wenn man vorher mit dem SQL Server Management Studio gearbeitet hat.

Was ich sehr speziell fand, war die abweisende Haltung des Datenbankadministrators auf Kundenseite. Nach dem Durchforsten der Literatur im Bereich Performance ist mir klar geworden, dass es in Oracle-Umgebungen der Regelfall sein muss, dass sich Administrator und Entwickler spinnefeind sind, anders kann ich mir die Bemerkungen in den Büchern nicht erklären.

Da ich einerseits die Aufgabe bekam, kritische Abfragen zu optimieren, arbeitete ich mich in das Thema ein (4 Bücher nur zum Thema Oracle Tuning und Performance) und erstellte ein Mind Map. Dieses werde ich auch ständig erweitern.

Bei einer Abfrage, die ich optimieren konnte, habe ich eine Leistungssteigerung von mehr als 4‘500% erreichen können. Das zeigt, dass auf Oracle mit ANSI-SQL schon sehr viel falsch gemacht werden kann.

Was habe ich daraus gelernt

Es gibt Gemeinsamkeiten, die auf Oracle und SQL-Server zu Performance-Problemen führen. Die 3 häufigsten Probleme sind beispielsweise:

  • Fehlende oder falsch gesetzte Indizes/Statistiken
  • Verschachtelte Views
  • Zu viele Joins, wobei hier Oracle meiner Meinung nach früher an die Grenzen stösst

Es gibt aber auch Unterschiede, die es schwierig machen bspw. bei Cursors. Auf einem SQL-Server sollen diese sehr sorgsam eingesetzt werden, da diese zu Leistungseinbussen führen, hingegen kann ein Cursor in Form von FORALL auf Oracle zu einer deutlichen Leistungssteigerung führen.

Quintessenz

Künftig überlege ich mir zweimal, ob ich Wartungs-/Optimierungsaufgaben für einen Oracle-Server übernehme, wenn ich im Projekt auch Entwicklungsaufgaben habe, denn dafür bleibt kaum noch Zeit. Oracle-Administration ist bereits in kleinen Systemumgebungen ein Vollzeitjob.

Translate this page

Kategorien