SlideShare ist ein Scribd-Unternehmen logo
1 von 18
SQL-Analyse und -Tuning
Einfach und schnell




Thorsten Bruhns
Solution Architekt
OPITZ CONSULTING Deutschland GmbH
Standort Bad Homburg

DOAG Regionaltreffen Rhein-Neckar, Mannheim, 27.09.2012

                   SQL-Analyse und Tuning – einfach und schnell   © OPITZ CONSULTING GmbH 2012   Seite 1
Agenda
1.   Einleitung

2.   Herausforderungen beim SQL-Tuning

3.   SQL-Planermittlung

4.   Fazit




             SQL-Analyse und Tuning – einfach und schnell   © OPITZ CONSULTING GmbH 2012   Seite 2
1   Einleitung




         SQL-Analyse und Tuning – einfach und schnell   © OPITZ CONSULTING GmbH 2012   Seite 3
Einleitung
 Klassifikation des Problems
   Systemsetup
     Hardware, OS, RDBMS, Parametrisierung
   Applikationsdesign / SQL-Ausführung
     Langsame SQL-Statements, ungünstige Schleifenverarbeitungen etc.


 Erfahrungsgemäß ist Applikationsdesign die häufigste
  Ursache
   Mehr als 90% der Performance holt man in der Applikation heraus, sofern
    das Systemsetup „vernünftig“ ist

 => Das Systemsetup muß „passen“,
  jedoch nicht perfekt sein

              SQL-Analyse und Tuning – einfach und schnell   © OPITZ CONSULTING GmbH 2012   Seite 4
Einleitung – Regeln für Tuning
 Tuningziel sollte immer meßbar sein
 Immer nur das „tunen“, was auch spürbare
  Performancegewinne erzielt
 Tuning hört auf, wenn gewünschtes Ziel erreicht ist


 Dieser Vortrag wird sich mit SQL-Statements beschäftigen!




            SQL-Analyse und Tuning – einfach und schnell   © OPITZ CONSULTING GmbH 2012   Seite 6
Herausforderungen beim
2   SQL-Tuning




        SQL-Analyse und Tuning – einfach und schnell   © OPITZ CONSULTING GmbH 2012   Seite 7
Herausforderungen beim SQL-Tuning
 Identifikation der SQLs kann anspruchsvoll sein
     Wer ist der Top-Consumer?
     Wie sieht der Ausführungsplan aus?
     Was muß „getunt“ werden?
     Was tun, wenn die Applikation massenhaft SQLs ohne Bind-Variablen nutzt?
       Statspack/AWR liefern hier u. U. falsche Top-Consumer
       Was fachlich zusammen gehört, kann technisch nicht gemeinsam betrachtet
        werden – Experimentell kann cursor_sharing=force helfen
       SQL-Trace generiert u. U. sehr viele Trace-Daten
        – Das kann im Handling unangenehm werden

 => Identifikation kann viel Zeit in Anspruch nehmen
  – Eine kostenlose Universallösung ist nicht bekannt


                 SQL-Analyse und Tuning – einfach und schnell   © OPITZ CONSULTING GmbH 2012   Seite 8
Herausforderungen beim SQL-Tuning
 Ist es wirklich immer so schlimm?
   Nein, häufig sind die problematischen Statements identifiziert
   Fragen an den Entwickler können hilfreich sein
     „Ist dir das Statement schon mal aufgefallen?“ „Hast du das mal direkt in SQLPlus
      getestet?“

 Was tun, wenn man der Entwickler ist
  und kein DBA greifbar ist?
   Hoffentlich kennt man das problematische Statement
   Statspack/AWR sind kein Hexenwerk
     leicht bedienbar und bieten schnellen Überblick bzw. liefern durchaus gute
      Ansatzpunkte – selbst bei fehlenden Bind-Variablen
   SQL-Trace gezielt gut einsetzbar
     Bei Connection-Pool in Application-Server kann es unangenehm werden
        Testhalber den Pool auf 1 Connection begrenzen
                SQL-Analyse und Tuning – einfach und schnell   © OPITZ CONSULTING GmbH 2012   Seite 9
3   SQL-Planermittlung




        SQL-Analyse und Tuning – einfach und schnell   © OPITZ CONSULTING GmbH 2012   Seite 10
SQL-Planermittlung
 Aktuelle Session
   Plan für letztes Statement in aktueller Session leicht ermittelbar
     select *
      from table(dbms_xplan.DISPLAY_CURSOR(null,null,'ALLSTATS LAST'))
     set serverout off ‘vor’ der Ausführung des Statements erforderlich!
   Statement isoliert
     explain plan for select * from emp;
     select * from table(dbms_xplan.display());
     Das können mittlerweile alle üblichen Tools

 Tipp für DBMS_XPLAN
   Ein paar Parameter im SQLPlus liefern „übersichtliche“ Ausgaben
     set pages 2000 lines 200
     column PLAN_TABLE_OUTPUT format a200


               SQL-Analyse und Tuning – einfach und schnell   © OPITZ CONSULTING GmbH 2012   Seite 11
SQL-Planermittlung
 andere bekannte Session
    Einfach die Session identifizieren und „open cursor“ betrachten:
      Ermittlung der sql_id ist ein wesentlicher Schritt
      Dient an vielen Stellen als eindeutiger Schlüssel für Informationen im Shared-Pool
select /*+rule*/ sql_id, buffer_gets, DISK_READS, round(cpu_time/1000) cput_ms
     , executions, to_char(LAST_ACTIVE_TIME, 'DD.MM HH24:MI:SS') lasttime
     , sql_text from (
select voc.sql_id, vs.version_count, vs.buffer_gets, vs.DISK_READS, vs.cpu_time
,vs.executions      ,vs.LAST_ACTIVE_TIME, voc.sql_text sql_text
from GV$OPEN_CURSOR voc
join V$SQLAREA_PLAN_HASH vs on vs.sql_id = voc.sql_id
where voc.sid= &1 and LAST_ACTIVE_TIME is not null
order by last_active_time desc) where rownum < 50ord er by executions
      ohne Hint gibt es manchmal lange Antwortzeiten

 Achtung: Recursive SQLs von Oracle werden hier mit angezeigt!

                SQL-Analyse und Tuning – einfach und schnell   © OPITZ CONSULTING GmbH 2012   Seite 12
Herausforderungen bei Planermittlung
 Beispiel für open_cursors
SQL_ID         BUFFER_GETS   DISK_READS    CPUT_MS EXECUTIONS LASTTIME       SQL_TEXT
------------- ------------ ------------ ---------- ---------- -------------- ----------------------------------------
6bt4v0wb48k1p          178           13         41         21 25.09 21:32:48 SELECT * FROM CFG_DB_LINKS WHERE ENABLED
                                                                             =1
7vv84sf0ygu26          556           21         35         53 25.09 21:32:48 INSERT INTO WB_RT_NOTIFICATION_ACKS ( AU
                                                                             DIT_ID, STREAM_ID, A
8u5p4pa0kfmdk         1432           33         47        224 25.09 21:32:48 SELECT SERVICE_STOP_PENDING FROM WB_RT_S
                                                                             ERVICE_CONTROL_FLAGS
aq8yqxyyb40nn         2933            2        901        710 25.09 21:32:48 update sys.job$ set this_date=:1 where j
                                                                             ob=:2

      Recursives SQL meist durch ‚kleingeschriebene‘ Schlüsselwörter erkennbar
            Kann ignoriert werden, da wir damit leben müssen
      Top-Consumer über Buffer_gets/Executions oder Disk_reads/Executions oder
       CPUT_MS/Executions erkennbar
      Gelieferte Informationen kommen aus dem Shared-Pool
            Statistische Daten beziehen sich auf alle Ausführungen – nicht auf die aktuelle Session!

 Was sind denn Top-Consumer?

                         SQL-Analyse und Tuning – einfach und schnell        © OPITZ CONSULTING GmbH 2012               Seite 13
Top-Consumer
 Was sind „Top-Consumer“?
   DB-Time für einzelnes Statement sehr groß
     DB-Time = CPU Time + Wait Time
        CPU Time üblicherweise ‚parse time + ‚lesen im Cache‘ (consisten gets‘
        Wait Time ‚normalerweise‘ physischer I/O

  Top-Consumer können nun über open_cursor bewertet
  werden
  Das geht natürlich auch über v$sqlarea
    Statspack/AWR ermitteln so die Top-Consumer nach verschiedenn Kriterien




                 SQL-Analyse und Tuning – einfach und schnell   © OPITZ CONSULTING GmbH 2012   Seite 14
Ausführungspläne
 Was sagt uns der Ausführungsplan?
   Beschreibt die Ausführungsstrategie der SQL-Engine
   Wird vom Optimizer mit Hilfe von statistischen Informationen berechnet
      Statistik und Realität passen manchmal nicht zusammen 
      Kosten dienen intern zum Vergleich verschiedener Pläne
        Plan mit geringsten Kosten entspricht dem tatsächlichen Ausführungsplan
   explain plan for select count(1) from perfstat.stats$snapshot;
   select * from table(dbms_xplan.display())


  Plan hash value: 3157580645
  -----------------------------------------------------------------------------------
  | Id | Operation              | Name              | Rows | Cost (%CPU)| Time      |
  -----------------------------------------------------------------------------------
  |   0 | SELECT STATEMENT      |                   |     1 |     5   (0)| 00:00:01 |
  |   1 | SORT AGGREGATE        |                   |     1 |             |         |
  |   2 |   INDEX FAST FULL SCAN| STATS$SNAPSHOT_PK | 3201 |      5   (0)| 00:00:01 |
  -----------------------------------------------------------------------


                 SQL-Analyse und Tuning – einfach und schnell   © OPITZ CONSULTING GmbH 2012   Seite 15
gather_plan_statistics
 Kann man Plan und Realität gegenüberstellen?
 Ja, das geht ganz einfach:
   set serverout off
   select /*+gather_plan_statistics*/ count(1) from perfstat.stats$snapshot;
   select * from table(dbms_xplan.DISPLAY_CURSOR(null,null,'ALLSTATS LAST'))
  -----------------------------------------------------------------------------------------------------
  | Id     | Operation                    | Name                        | Starts | E-Rows | A-Rows |      A-Time     | Buffers |
  -----------------------------------------------------------------------------------------------------
  |      0 | SELECT STATEMENT             |                             |     1 |        |        1 |00:00:00.01 |         76 |
  |      1 |   SORT AGGREGATE             |                             |     1 |      1 |        1 |00:00:00.01 |         76 |
  |      2 |    INDEX FAST FULL SCAN| STATS$SNAPSHOT_PK |                     1 |   3201 |     3305 |00:00:00.01 |         76 |
  -----------------------------------------------------------------------------------------------------

   E-Rows = Vorhersage Optimizer
   A-Rows, A-Time (DB Time) = tatsächliche Werte für die Ausführung
   Buffers = verarbeitete Blöcke

 Gut erkennbar, wo die DB Time „verbrannt“ wird!
                         SQL-Analyse und Tuning – einfach und schnell                 © OPITZ CONSULTING GmbH 2012                 Seite 16
Ausführungspläne – weitere Details
 Ausführungspläne enthalten noch mehr Daten
     Filterpredicate beschreiben, wie die SQL-Engine wo filtert
         Indexnutzung sinnvoll?
            Falscher Index => möglicherweise zu viele Treffer in A-Rows mit anschließenden
             Tabellenzugriff => große DB Time wegen großer Blockanzahl (A-Time)
         Viele Tools zeigen mittlerweile auch Filter bei Ausführungsplänen mit an
--------------------------------------------------------------------------------------------------------------
| Id | Operation             | Name            | Starts | E-Rows | A-Rows |   A-Time   | Buffers | OMem |
--------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |                 |      1 |        |      1 |00:00:00.08 |      16 |       |
|   1 | SORT AGGREGATE       |                 |      1 |      1 |      1 |00:00:00.08 |      16 |       |
|   2 |   MERGE JOIN         |                 |      1 |    278 |    475 |00:00:00.07 |      16 |       |
|   3 |    INDEX FULL SCAN   | STG_DBI_PK_PK_1 |      1 |      7 |      6 |00:00:00.03 |       1 |       |
|* 4 |     SORT JOIN         |                 |      6 |     79 |    475 |00:00:00.04 |      15 | 73728 |
|* 5 |      TABLE ACCESS FULL| DWH$SNAPSHOT    |      1 |     79 |     95 |00:00:00.02 |      15 |       |

Predicate Information (identified by operation id):
---------------------------------------------------
   4 - access("SI"."DBID"="SS"."DBID")
       filter("SI"."DBID"="SS"."DBID")
   5 - filter("SS"."STARTUP_TIME">SYSDATE@!-4)


                      SQL-Analyse und Tuning – einfach und schnell   © OPITZ CONSULTING GmbH 2012        Seite 17
Fazit
 Finden der Top-Consumer ist manchmal schwierig
   Mit passender Strategie eigentlich kein Problem

 DB Time ist der Schlüssel für Performance
 gather_plan_statistics-Hint ist sehr praktisch
   Liefert schnell Informationen über das was Oracle tatsächlich macht
   Verursacher in umfangreichen Selects schnell identifizierbar
     Für 1. Analyse keine Kenntnisse über das Datenmodell benötigt
     Filterregeln sehr hilfreich
   Was passiert mit der DB Time, wenn ich Hints einsetze?

 SQL-Analyse ist kein Hexenwerk
  – geht einfacher als häufig vermutet

               SQL-Analyse und Tuning – einfach und schnell   © OPITZ CONSULTING GmbH 2012   Seite 18
Kontakt
Thorsten Bruhns
Solution Architekt



OPITZ CONSULTING Deutschland GmbH
Standort Bad Homburg

Norsk-Data-Strasse 3
61352 Bad Homburg
Tel. +49 (6172) 66260 0
thorsten.bruhns@opitz-consulting.com




                 SQL-Analyse und Tuning – einfach und schnell   © OPITZ CONSULTING GmbH 2012   Seite 19

Weitere ähnliche Inhalte

Andere mochten auch

Easy3 day trader sample email
Easy3 day trader sample emailEasy3 day trader sample email
Easy3 day trader sample emailtjwt
 
Dampfsauger Katalog von Häußler
Dampfsauger Katalog von HäußlerDampfsauger Katalog von Häußler
Dampfsauger Katalog von HäußlerMichael Häußler
 
Kreston BSG Alemania
Kreston BSG AlemaniaKreston BSG Alemania
Kreston BSG AlemaniaKreston BSG
 
Flüsternde Sschönheit.Retrofuturismis Bluening und Elektromobilität.
Flüsternde Sschönheit.Retrofuturismis Bluening und Elektromobilität.Flüsternde Sschönheit.Retrofuturismis Bluening und Elektromobilität.
Flüsternde Sschönheit.Retrofuturismis Bluening und Elektromobilität.Alfred Fuhr
 
Views of Library and Information Science (LIS) Instruction in Morocco
Views of Library and Information Science (LIS) Instruction in MoroccoViews of Library and Information Science (LIS) Instruction in Morocco
Views of Library and Information Science (LIS) Instruction in MoroccoUniversity of Missouri
 
Gil bernardo sandri de souza
Gil bernardo sandri de souzaGil bernardo sandri de souza
Gil bernardo sandri de souzaSidnei Carvalho
 
Ficha cortometraje Puño poetico de Diego Granella. Producido por Bande á part...
Ficha cortometraje Puño poetico de Diego Granella. Producido por Bande á part...Ficha cortometraje Puño poetico de Diego Granella. Producido por Bande á part...
Ficha cortometraje Puño poetico de Diego Granella. Producido por Bande á part...El Dedo en el Ojo
 
A La Recherche D’Informations
A La Recherche D’InformationsA La Recherche D’Informations
A La Recherche D’Informationskdiffels
 

Andere mochten auch (13)

Prospekt Schick Hotels Wien
Prospekt Schick Hotels WienProspekt Schick Hotels Wien
Prospekt Schick Hotels Wien
 
Easy3 day trader sample email
Easy3 day trader sample emailEasy3 day trader sample email
Easy3 day trader sample email
 
IZ Workshop 2014: B1 andover ad and info fair housing
IZ Workshop 2014: B1 andover ad and info fair housingIZ Workshop 2014: B1 andover ad and info fair housing
IZ Workshop 2014: B1 andover ad and info fair housing
 
PR CC Allgemein.pdf
PR CC Allgemein.pdfPR CC Allgemein.pdf
PR CC Allgemein.pdf
 
Dampfsauger Katalog von Häußler
Dampfsauger Katalog von HäußlerDampfsauger Katalog von Häußler
Dampfsauger Katalog von Häußler
 
Kreston BSG Alemania
Kreston BSG AlemaniaKreston BSG Alemania
Kreston BSG Alemania
 
Flüsternde Sschönheit.Retrofuturismis Bluening und Elektromobilität.
Flüsternde Sschönheit.Retrofuturismis Bluening und Elektromobilität.Flüsternde Sschönheit.Retrofuturismis Bluening und Elektromobilität.
Flüsternde Sschönheit.Retrofuturismis Bluening und Elektromobilität.
 
Slideshare
SlideshareSlideshare
Slideshare
 
Uc vsport03
Uc vsport03Uc vsport03
Uc vsport03
 
Views of Library and Information Science (LIS) Instruction in Morocco
Views of Library and Information Science (LIS) Instruction in MoroccoViews of Library and Information Science (LIS) Instruction in Morocco
Views of Library and Information Science (LIS) Instruction in Morocco
 
Gil bernardo sandri de souza
Gil bernardo sandri de souzaGil bernardo sandri de souza
Gil bernardo sandri de souza
 
Ficha cortometraje Puño poetico de Diego Granella. Producido por Bande á part...
Ficha cortometraje Puño poetico de Diego Granella. Producido por Bande á part...Ficha cortometraje Puño poetico de Diego Granella. Producido por Bande á part...
Ficha cortometraje Puño poetico de Diego Granella. Producido por Bande á part...
 
A La Recherche D’Informations
A La Recherche D’InformationsA La Recherche D’Informations
A La Recherche D’Informations
 

Mehr von OPITZ CONSULTING Deutschland

Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"
Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"
Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"OPITZ CONSULTING Deutschland
 
OC|Webcast: Oracle Lizenzierung - Die größten Fallen in der Praxis
OC|Webcast: Oracle Lizenzierung - Die größten Fallen in der PraxisOC|Webcast: Oracle Lizenzierung - Die größten Fallen in der Praxis
OC|Webcast: Oracle Lizenzierung - Die größten Fallen in der PraxisOPITZ CONSULTING Deutschland
 
OC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
OC|Webcast: Oracle Lizenzierung - Virtualisierung und CloudOC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
OC|Webcast: Oracle Lizenzierung - Virtualisierung und CloudOPITZ CONSULTING Deutschland
 
OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!
OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!
OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!OPITZ CONSULTING Deutschland
 
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...OPITZ CONSULTING Deutschland
 
OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...
OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...
OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...OPITZ CONSULTING Deutschland
 
OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?
OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?
OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?OPITZ CONSULTING Deutschland
 
OC|Weekly Talk - Digitales Coaching & Smart Sparring
OC|Weekly Talk - Digitales Coaching & Smart Sparring OC|Weekly Talk - Digitales Coaching & Smart Sparring
OC|Weekly Talk - Digitales Coaching & Smart Sparring OPITZ CONSULTING Deutschland
 
Effiziente Betriebsoptimierung durch Cloud Nutzung
Effiziente Betriebsoptimierung durch Cloud NutzungEffiziente Betriebsoptimierung durch Cloud Nutzung
Effiziente Betriebsoptimierung durch Cloud NutzungOPITZ CONSULTING Deutschland
 

Mehr von OPITZ CONSULTING Deutschland (20)

OC|Webcast: Grundlagen der Oracle Lizenzierung
OC|Webcast: Grundlagen der Oracle LizenzierungOC|Webcast: Grundlagen der Oracle Lizenzierung
OC|Webcast: Grundlagen der Oracle Lizenzierung
 
OC|Webcast "Java heute" vom 28.09.2021
OC|Webcast "Java heute" vom 28.09.2021OC|Webcast "Java heute" vom 28.09.2021
OC|Webcast "Java heute" vom 28.09.2021
 
OC|Webcast "Java heute" vom 24.08.2021
OC|Webcast "Java heute" vom 24.08.2021OC|Webcast "Java heute" vom 24.08.2021
OC|Webcast "Java heute" vom 24.08.2021
 
OC|Webcast "Daten wirklich nutzen"
OC|Webcast "Daten wirklich nutzen"OC|Webcast "Daten wirklich nutzen"
OC|Webcast "Daten wirklich nutzen"
 
Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"
Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"
Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"
 
OC|Webcast "Willkommen in der Cloud!"
OC|Webcast "Willkommen in der Cloud!"OC|Webcast "Willkommen in der Cloud!"
OC|Webcast "Willkommen in der Cloud!"
 
OC|Webcast "Die neue Welt der Virtualisierung"
OC|Webcast "Die neue Welt der Virtualisierung"OC|Webcast "Die neue Welt der Virtualisierung"
OC|Webcast "Die neue Welt der Virtualisierung"
 
10 Thesen zur professionellen Softwareentwicklung
10 Thesen zur professionellen Softwareentwicklung10 Thesen zur professionellen Softwareentwicklung
10 Thesen zur professionellen Softwareentwicklung
 
OC|Webcast: Oracle Lizenzierung - Lizenznews 2021
OC|Webcast: Oracle Lizenzierung - Lizenznews 2021OC|Webcast: Oracle Lizenzierung - Lizenznews 2021
OC|Webcast: Oracle Lizenzierung - Lizenznews 2021
 
OC|Webcast: Oracle Lizenzierung - Die größten Fallen in der Praxis
OC|Webcast: Oracle Lizenzierung - Die größten Fallen in der PraxisOC|Webcast: Oracle Lizenzierung - Die größten Fallen in der Praxis
OC|Webcast: Oracle Lizenzierung - Die größten Fallen in der Praxis
 
OC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
OC|Webcast: Oracle Lizenzierung - Virtualisierung und CloudOC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
OC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
 
OC|Webcast: Grundlagen der Oracle-Lizenzierung
OC|Webcast: Grundlagen der Oracle-LizenzierungOC|Webcast: Grundlagen der Oracle-Lizenzierung
OC|Webcast: Grundlagen der Oracle-Lizenzierung
 
OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!
OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!
OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!
 
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
 
OC|Weekly Talk The Power of DevOps…
OC|Weekly Talk  The Power of DevOps…OC|Weekly Talk  The Power of DevOps…
OC|Weekly Talk The Power of DevOps…
 
OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...
OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...
OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...
 
OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?
OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?
OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?
 
OC|Weekly Talk - Digitales Coaching & Smart Sparring
OC|Weekly Talk - Digitales Coaching & Smart Sparring OC|Weekly Talk - Digitales Coaching & Smart Sparring
OC|Weekly Talk - Digitales Coaching & Smart Sparring
 
OC|Weekly Talk - Beratung remote
OC|Weekly Talk - Beratung remoteOC|Weekly Talk - Beratung remote
OC|Weekly Talk - Beratung remote
 
Effiziente Betriebsoptimierung durch Cloud Nutzung
Effiziente Betriebsoptimierung durch Cloud NutzungEffiziente Betriebsoptimierung durch Cloud Nutzung
Effiziente Betriebsoptimierung durch Cloud Nutzung
 

SQL-Analyse und -Tuning – einfach und schnell

  • 1. SQL-Analyse und -Tuning Einfach und schnell Thorsten Bruhns Solution Architekt OPITZ CONSULTING Deutschland GmbH Standort Bad Homburg DOAG Regionaltreffen Rhein-Neckar, Mannheim, 27.09.2012 SQL-Analyse und Tuning – einfach und schnell © OPITZ CONSULTING GmbH 2012 Seite 1
  • 2. Agenda 1. Einleitung 2. Herausforderungen beim SQL-Tuning 3. SQL-Planermittlung 4. Fazit SQL-Analyse und Tuning – einfach und schnell © OPITZ CONSULTING GmbH 2012 Seite 2
  • 3. 1 Einleitung SQL-Analyse und Tuning – einfach und schnell © OPITZ CONSULTING GmbH 2012 Seite 3
  • 4. Einleitung  Klassifikation des Problems  Systemsetup  Hardware, OS, RDBMS, Parametrisierung  Applikationsdesign / SQL-Ausführung  Langsame SQL-Statements, ungünstige Schleifenverarbeitungen etc.  Erfahrungsgemäß ist Applikationsdesign die häufigste Ursache  Mehr als 90% der Performance holt man in der Applikation heraus, sofern das Systemsetup „vernünftig“ ist  => Das Systemsetup muß „passen“, jedoch nicht perfekt sein SQL-Analyse und Tuning – einfach und schnell © OPITZ CONSULTING GmbH 2012 Seite 4
  • 5. Einleitung – Regeln für Tuning  Tuningziel sollte immer meßbar sein  Immer nur das „tunen“, was auch spürbare Performancegewinne erzielt  Tuning hört auf, wenn gewünschtes Ziel erreicht ist  Dieser Vortrag wird sich mit SQL-Statements beschäftigen! SQL-Analyse und Tuning – einfach und schnell © OPITZ CONSULTING GmbH 2012 Seite 6
  • 6. Herausforderungen beim 2 SQL-Tuning SQL-Analyse und Tuning – einfach und schnell © OPITZ CONSULTING GmbH 2012 Seite 7
  • 7. Herausforderungen beim SQL-Tuning  Identifikation der SQLs kann anspruchsvoll sein  Wer ist der Top-Consumer?  Wie sieht der Ausführungsplan aus?  Was muß „getunt“ werden?  Was tun, wenn die Applikation massenhaft SQLs ohne Bind-Variablen nutzt?  Statspack/AWR liefern hier u. U. falsche Top-Consumer  Was fachlich zusammen gehört, kann technisch nicht gemeinsam betrachtet werden – Experimentell kann cursor_sharing=force helfen  SQL-Trace generiert u. U. sehr viele Trace-Daten – Das kann im Handling unangenehm werden  => Identifikation kann viel Zeit in Anspruch nehmen – Eine kostenlose Universallösung ist nicht bekannt SQL-Analyse und Tuning – einfach und schnell © OPITZ CONSULTING GmbH 2012 Seite 8
  • 8. Herausforderungen beim SQL-Tuning  Ist es wirklich immer so schlimm?  Nein, häufig sind die problematischen Statements identifiziert  Fragen an den Entwickler können hilfreich sein  „Ist dir das Statement schon mal aufgefallen?“ „Hast du das mal direkt in SQLPlus getestet?“  Was tun, wenn man der Entwickler ist und kein DBA greifbar ist?  Hoffentlich kennt man das problematische Statement  Statspack/AWR sind kein Hexenwerk  leicht bedienbar und bieten schnellen Überblick bzw. liefern durchaus gute Ansatzpunkte – selbst bei fehlenden Bind-Variablen  SQL-Trace gezielt gut einsetzbar  Bei Connection-Pool in Application-Server kann es unangenehm werden  Testhalber den Pool auf 1 Connection begrenzen SQL-Analyse und Tuning – einfach und schnell © OPITZ CONSULTING GmbH 2012 Seite 9
  • 9. 3 SQL-Planermittlung SQL-Analyse und Tuning – einfach und schnell © OPITZ CONSULTING GmbH 2012 Seite 10
  • 10. SQL-Planermittlung  Aktuelle Session  Plan für letztes Statement in aktueller Session leicht ermittelbar  select * from table(dbms_xplan.DISPLAY_CURSOR(null,null,'ALLSTATS LAST'))  set serverout off ‘vor’ der Ausführung des Statements erforderlich!  Statement isoliert  explain plan for select * from emp;  select * from table(dbms_xplan.display());  Das können mittlerweile alle üblichen Tools  Tipp für DBMS_XPLAN  Ein paar Parameter im SQLPlus liefern „übersichtliche“ Ausgaben  set pages 2000 lines 200  column PLAN_TABLE_OUTPUT format a200 SQL-Analyse und Tuning – einfach und schnell © OPITZ CONSULTING GmbH 2012 Seite 11
  • 11. SQL-Planermittlung  andere bekannte Session  Einfach die Session identifizieren und „open cursor“ betrachten:  Ermittlung der sql_id ist ein wesentlicher Schritt  Dient an vielen Stellen als eindeutiger Schlüssel für Informationen im Shared-Pool select /*+rule*/ sql_id, buffer_gets, DISK_READS, round(cpu_time/1000) cput_ms , executions, to_char(LAST_ACTIVE_TIME, 'DD.MM HH24:MI:SS') lasttime , sql_text from ( select voc.sql_id, vs.version_count, vs.buffer_gets, vs.DISK_READS, vs.cpu_time ,vs.executions ,vs.LAST_ACTIVE_TIME, voc.sql_text sql_text from GV$OPEN_CURSOR voc join V$SQLAREA_PLAN_HASH vs on vs.sql_id = voc.sql_id where voc.sid= &1 and LAST_ACTIVE_TIME is not null order by last_active_time desc) where rownum < 50ord er by executions  ohne Hint gibt es manchmal lange Antwortzeiten  Achtung: Recursive SQLs von Oracle werden hier mit angezeigt! SQL-Analyse und Tuning – einfach und schnell © OPITZ CONSULTING GmbH 2012 Seite 12
  • 12. Herausforderungen bei Planermittlung  Beispiel für open_cursors SQL_ID BUFFER_GETS DISK_READS CPUT_MS EXECUTIONS LASTTIME SQL_TEXT ------------- ------------ ------------ ---------- ---------- -------------- ---------------------------------------- 6bt4v0wb48k1p 178 13 41 21 25.09 21:32:48 SELECT * FROM CFG_DB_LINKS WHERE ENABLED =1 7vv84sf0ygu26 556 21 35 53 25.09 21:32:48 INSERT INTO WB_RT_NOTIFICATION_ACKS ( AU DIT_ID, STREAM_ID, A 8u5p4pa0kfmdk 1432 33 47 224 25.09 21:32:48 SELECT SERVICE_STOP_PENDING FROM WB_RT_S ERVICE_CONTROL_FLAGS aq8yqxyyb40nn 2933 2 901 710 25.09 21:32:48 update sys.job$ set this_date=:1 where j ob=:2  Recursives SQL meist durch ‚kleingeschriebene‘ Schlüsselwörter erkennbar  Kann ignoriert werden, da wir damit leben müssen  Top-Consumer über Buffer_gets/Executions oder Disk_reads/Executions oder CPUT_MS/Executions erkennbar  Gelieferte Informationen kommen aus dem Shared-Pool  Statistische Daten beziehen sich auf alle Ausführungen – nicht auf die aktuelle Session!  Was sind denn Top-Consumer? SQL-Analyse und Tuning – einfach und schnell © OPITZ CONSULTING GmbH 2012 Seite 13
  • 13. Top-Consumer  Was sind „Top-Consumer“?  DB-Time für einzelnes Statement sehr groß  DB-Time = CPU Time + Wait Time  CPU Time üblicherweise ‚parse time + ‚lesen im Cache‘ (consisten gets‘  Wait Time ‚normalerweise‘ physischer I/O Top-Consumer können nun über open_cursor bewertet werden Das geht natürlich auch über v$sqlarea Statspack/AWR ermitteln so die Top-Consumer nach verschiedenn Kriterien SQL-Analyse und Tuning – einfach und schnell © OPITZ CONSULTING GmbH 2012 Seite 14
  • 14. Ausführungspläne  Was sagt uns der Ausführungsplan?  Beschreibt die Ausführungsstrategie der SQL-Engine  Wird vom Optimizer mit Hilfe von statistischen Informationen berechnet  Statistik und Realität passen manchmal nicht zusammen   Kosten dienen intern zum Vergleich verschiedener Pläne  Plan mit geringsten Kosten entspricht dem tatsächlichen Ausführungsplan  explain plan for select count(1) from perfstat.stats$snapshot;  select * from table(dbms_xplan.display()) Plan hash value: 3157580645 ----------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Cost (%CPU)| Time | ----------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 5 (0)| 00:00:01 | | 1 | SORT AGGREGATE | | 1 | | | | 2 | INDEX FAST FULL SCAN| STATS$SNAPSHOT_PK | 3201 | 5 (0)| 00:00:01 | ----------------------------------------------------------------------- SQL-Analyse und Tuning – einfach und schnell © OPITZ CONSULTING GmbH 2012 Seite 15
  • 15. gather_plan_statistics  Kann man Plan und Realität gegenüberstellen?  Ja, das geht ganz einfach:  set serverout off  select /*+gather_plan_statistics*/ count(1) from perfstat.stats$snapshot;  select * from table(dbms_xplan.DISPLAY_CURSOR(null,null,'ALLSTATS LAST')) ----------------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | ----------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | 1 |00:00:00.01 | 76 | | 1 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:00.01 | 76 | | 2 | INDEX FAST FULL SCAN| STATS$SNAPSHOT_PK | 1 | 3201 | 3305 |00:00:00.01 | 76 | -----------------------------------------------------------------------------------------------------  E-Rows = Vorhersage Optimizer  A-Rows, A-Time (DB Time) = tatsächliche Werte für die Ausführung  Buffers = verarbeitete Blöcke  Gut erkennbar, wo die DB Time „verbrannt“ wird! SQL-Analyse und Tuning – einfach und schnell © OPITZ CONSULTING GmbH 2012 Seite 16
  • 16. Ausführungspläne – weitere Details  Ausführungspläne enthalten noch mehr Daten  Filterpredicate beschreiben, wie die SQL-Engine wo filtert  Indexnutzung sinnvoll?  Falscher Index => möglicherweise zu viele Treffer in A-Rows mit anschließenden Tabellenzugriff => große DB Time wegen großer Blockanzahl (A-Time)  Viele Tools zeigen mittlerweile auch Filter bei Ausführungsplänen mit an -------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | OMem | -------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | 1 |00:00:00.08 | 16 | | | 1 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:00.08 | 16 | | | 2 | MERGE JOIN | | 1 | 278 | 475 |00:00:00.07 | 16 | | | 3 | INDEX FULL SCAN | STG_DBI_PK_PK_1 | 1 | 7 | 6 |00:00:00.03 | 1 | | |* 4 | SORT JOIN | | 6 | 79 | 475 |00:00:00.04 | 15 | 73728 | |* 5 | TABLE ACCESS FULL| DWH$SNAPSHOT | 1 | 79 | 95 |00:00:00.02 | 15 | | Predicate Information (identified by operation id): --------------------------------------------------- 4 - access("SI"."DBID"="SS"."DBID") filter("SI"."DBID"="SS"."DBID") 5 - filter("SS"."STARTUP_TIME">SYSDATE@!-4) SQL-Analyse und Tuning – einfach und schnell © OPITZ CONSULTING GmbH 2012 Seite 17
  • 17. Fazit  Finden der Top-Consumer ist manchmal schwierig  Mit passender Strategie eigentlich kein Problem  DB Time ist der Schlüssel für Performance  gather_plan_statistics-Hint ist sehr praktisch  Liefert schnell Informationen über das was Oracle tatsächlich macht  Verursacher in umfangreichen Selects schnell identifizierbar  Für 1. Analyse keine Kenntnisse über das Datenmodell benötigt  Filterregeln sehr hilfreich  Was passiert mit der DB Time, wenn ich Hints einsetze?  SQL-Analyse ist kein Hexenwerk – geht einfacher als häufig vermutet SQL-Analyse und Tuning – einfach und schnell © OPITZ CONSULTING GmbH 2012 Seite 18
  • 18. Kontakt Thorsten Bruhns Solution Architekt OPITZ CONSULTING Deutschland GmbH Standort Bad Homburg Norsk-Data-Strasse 3 61352 Bad Homburg Tel. +49 (6172) 66260 0 thorsten.bruhns@opitz-consulting.com SQL-Analyse und Tuning – einfach und schnell © OPITZ CONSULTING GmbH 2012 Seite 19