Performanceanalyse und Tuning von Oracle 10g Release 2 Dr. Günter Unbescheid Database Consult GmbH Performanceanalyse und Tuning von Oracle 10g Release 2 Prolog ©Database Consult GmbH - Jachenau 09/2006 Folie 2 von xx Statement 1 Performanceanalyse und Tuning von Oracle 10g Release 2 Unzureichendperformante performanteSysteme Systemesind sind Unzureichend normalund und normal ausdiesem diesemGrunde Grundekein keinGrund Grundzur zur aus Beunruhigung. Beunruhigung. Auf Überraschungen sind wir vorbereitet. – Nur die alltäglichen Dinge brechen über uns herein wie Katastrophen. Stanislaw Jercy Lec 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 3 von xx 1 Statement 2 Performanceanalyse und Tuning von Oracle 10g Release 2 Tuningist istdaher daherein ein Tuning alltäglichesGeschäft, Geschäft, alltägliches dasssich sichnoch nochdazu dazutäglich täglichändert! ändert! dass Wenn der Wind des Wandels weht, bauen die einen Schutzmauern, die anderen bauen Windmühlen Chinesische Weisheit ©Database Consult GmbH - Jachenau 09/2006 Folie 4 von xx Statement 3 Performanceanalyse und Tuning von Oracle 10g Release 2 Tuningist istkein keinautomatischer automatischerProzess, Prozess, Tuning sonderneine einezielgemässe zielgemässeund undbewusste bewusste sondern Planung,Umsetzung Umsetzungund undKontrolle Kontrolle Planung, Nur wer sein Ziel kennt,findet den Weg Lao-Tse ©Database Consult GmbH - Jachenau 09/2006 Folie 5 von xx Statement 4 Performanceanalyse und Tuning von Oracle 10g Release 2 Tuningerfordert erfordert Tuning Wissen,Geduld, Geduld,Neugier, Neugier,Phantasie, Phantasie, Wissen, Konzentrationauf aufdas dasWesentliche Wesentliche Konzentration Wenig gedeiht, Zuviel zerstreut. Volksmund 09/2006 Phantasie ist wichtiger als Wissen,denn Wissen ist begrenzt. Albert Einstein ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 6 von xx 2 Statement 5 Performanceanalyse und Tuning von Oracle 10g Release 2 DieKenntnis Kenntnisder der Features Featuresmacht machtnoch noch Die keinenSommer Sommer(=performantes (=performantesSystem). System). keinen Wir leben in einer Zeit vollkommener Mittel und verworrener Ziele. Albert Einstein ©Database Consult GmbH - Jachenau 09/2006 Folie 7 von xx Statement 6 Performanceanalyse und Tuning von Oracle 10g Release 2 Tuningmacht machtschnell(er) schnell(er)–– ist istjedoch jedoch Tuning nichtimmer immerschnell schnellund undeinfach. einfach. nicht „Wer kämpft, kann verlieren. Wer nicht kämpft, hat schon verloren.“ Bertolt Brecht ©Database Consult GmbH - Jachenau 09/2006 Folie 8 von xx Auf den Punkt... Performanceanalyse und Tuning von Oracle 10g Release 2 Wissen Strategie Werkzeuge Features 09/2006 Psychologie ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 9 von xx 3 Resumee Performanceanalyse und Tuning von Oracle 10g Release 2 [Tuning]ist istwie wieRudern Ruderngegen gegenStrom. Strom. [Tuning] Sobaldman manaufhört, aufhört,treibt treibtman manzurück. zurück. Sobald Anlehnungan anBenjamin BenjaminBritten Britten InInAnlehnung ©Database Consult GmbH - Jachenau 09/2006 Folie 10 von xx Database Consult GmbH Performanceanalyse und Tuning von Oracle 10g Release 2 • Gegründet 1996 • Kompetenzen im Umfeld von ORACLE-basierten Systemen • Tätigkeitsbereiche – – – – – – – – – Tuning, Installation, Konfiguration Support, Troubleshooting, DBA-Aufgaben Datenmodellierung und –design Datenbankdesign, Systemanalysen Programmierung: SQL,PL/SQL,JSP, ADF UIX, BC4J Client-Server und Webapplikationen Schulungen Expertise/Gutachten www.database-consult.de ©Database Consult GmbH - Jachenau 09/2006 Folie 11 von xx Agenda – Vom richtigen Umgang: Management des Datenbank-Managements – Vom richtigen Einstieg: geeignete Analysestrategien • Konfiguration und Prophylaxe – Memory-Techniken: SGA- und PGA-Analysen – Kennzahlen, Metriken und Alerts – Active Workload Repository – Performance-Berichte, Log- und Trace-Dateien • Lastprofile und Analysemethoden – Tracing-Werkzeuge – Wait Events und CPU-Profile Performanceanalyse und Tuning von Oracle 10g Release 2 • Konzeption • Cost Based Optimizer – Arbeitsweise, Statistiken und Histogramme – SQL-Profiles und SQL Tuning Advisor 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 12 von xx 4 Rahmenbedingungen – Nicht alle Features sind in einem Tag darstellbar – Auswahl nach Gewichtung und Bekanntheitsgrad • Darstellung des Beobachteten – keine graue Theorie, weil ... 09/2006 ©Database Consult GmbH - Jachenau Performanceanalyse und Tuning von Oracle 10g Release 2 • Technische Details des aktuellen Relesase-Standes 10.2.0.2 • Tests unter SuSe Linux 9.3 • Konzentration auf das Wesentliche Folie 13 von xx ...brave new softworld ?!... Performanceanalyse und Tuning von Oracle 10g Release 2 ...The Thefollowing following... ...isisnot notaacommitment commitmentto to ... deliverany anymaterial, material,code, code,or orfunctionality, functionality,and and deliver shouldnot notbe berelied reliedupon uponin inmaking makingpurchasing purchasing should decisions.The Thedevelopment, development,release, release,and and decisions. timingof ofany anyfeatures featuresor orfunctionality functionalitydescribed described timing forOracle’s Oracle’sproducts productsremains remainsat atthe the sole sole for discretionof ofOracle. Oracle. discretion WhitePaper PaperProlog Prolog White 09/2006 ©Database Consult GmbH - Jachenau Folie 14 von xx Performanceanalyse und Tuning von Oracle 10g Release 2 Teil 1: Die Konzeption 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 15 von xx 5 Performanceanalyse und Tuning von Oracle 10g Release 2 Teil 1: Die Konzeption Geeignete Analysestrategien ©Database Consult GmbH - Jachenau 09/2006 Folie 16 von xx Kontext Performanceanalyse und Tuning von Oracle 10g Release 2 • Tuning ist Teil des gesamten Oracle-Management Prozesses – Systemdesign und Implementierung während der Entwicklung – Kontrolle der Ziele während des „Approval“ – Monitoring und Tuning während Nutzung • Die Wirksamkeit steigt mit der „Design-Nähe“ Monitoring Tuning Systemdesign Approval ©Database Consult GmbH - Jachenau 09/2006 Folie 17 von xx Strategien Performanceanalyse und Tuning von Oracle 10g Release 2 • Reaktion bei Abweichung von Zielvorgaben – Skalierbarkeit – Antwortzeitverhalten • Kenntnis des Applikations-Umfeldes (Architektur) • Exakte Fokussierung auf das Problem – Monitoring - Lastprofile • Konzentration auf signifikante Engpässe – CPU-Zeiten, Wartezeiten • Optimierung dieser Engpässe • Kontrolle der Zielvorgaben • Bei Bedarf: nächste Runde 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 18 von xx 6 Strategie Performanceanalyse und Tuning von Oracle 10g Release 2 Methode Reduktion der Anwortzeiten durch Optimierung massgeblicher Faktoren Ermittlung der Faktoren durch Aufzeichnung von Ressourcenprofilen Ressourcenprofile listen CPU- und Wartezeiten von Kontexten Oracle Wait Events und Zeitmodelle ermöglichen Profile ©Database Consult GmbH - Jachenau 09/2006 Folie 19 von xx Kontext ©Database Consult GmbH - Jachenau 09/2006 Performanceanalyse und Tuning von Oracle 10g Release 2 Methode • Fokus auf geschäftsrelevante Dialoge mit kritischem Antwortzeitverhalten • Kenntnis des technologischen Umfelds • Kenntnis des konkreten Dialogablaufs – z.B. über Aktivitätsdiagramme • Messung zum richtigen Zeitpunkt in originalem System Folie 20 von xx Fokus C D S S S C D D S C Session 2 S D D C D D D C C S Session 3 D C C C D D S S C D Session 4 C D S S S S C C D D Zeit Grafik nach C. Millsap C = 32,5 % D = 37,5 % S = 30,0 % 09/2006 Performanceanalyse und Tuning von Oracle 10g Release 2 Session 1 C = 25 % D = 75 % S=0% ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 21 von xx 7 Performanceanalyse und Tuning von Oracle 10g Release 2 Teil 1: Die Konzeption Geeignete Analysestrategien Management des DB-Managements ©Database Consult GmbH - Jachenau 09/2006 Folie 22 von xx Management des DB-Managements Problemstellungen Performanceanalyse und Tuning von Oracle 10g Release 2 Tagesgeschäft Strategisches Geschäft Aufgaben Neue Technologie Entwicklung Lösung/Durchführung Logging Infrastruktur Archiv Monitoring Wissensbasis ©Database Consult GmbH - Jachenau 09/2006 Folie 23 von xx Management des DB-Managements Datenbank Enwicklung Applikation Netzwerk Betriebssystem – – – – – • Tuning ist Bestandteil aller Funktionsbereiche • Organisationsstrukturen sollten dies unterstützen! – – – – 09/2006 Netzwerk Betriebssystem Datenbank Applikation Entwicklung Performanceanalyse und Tuning von Oracle 10g Release 2 • Tuning ist Teamarbeit Ticket-Systeme Wissensbasis Gremien/Arbeitskreise Eskalationsstufen ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 24 von xx 8 Management des DB-Managements Performanceanalyse und Tuning von Oracle 10g Release 2 Tuning Lastprofile aktiv Monitoring Reporting Optimierte Implementierung Datenbankdesign Systemanalyse ©Database Consult GmbH - Jachenau 09/2006 proaktiv „performance engineering“ Folie 25 von xx Management des DB-Managements – baut auf bestehende Systeme – dort sind Modifikationen teuer oder unmöglich • Tuning ist nicht per se automatisch verfügbar – sef-tuning ersetzt kein Systemdesign und „performance engineering“ • Ziele – Minimierung des Ressourcenverbrauchs zur Sicherstellung des erwarteten Antwortverhaltens – auch bei Skalierung – Die Ressource-Minimierung wird – neben dem Funktionsumfang – zum Motor der Entwicklung. 09/2006 ©Database Consult GmbH - Jachenau Folie 26 von xx Performanceanalyse und Tuning von Oracle 10g Release 2 Teil 2: Konfiguration und Prophylaxe 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Performanceanalyse und Tuning von Oracle 10g Release 2 • Tuning ist reaktiv Folie 27 von xx 9 Performanceanalyse und Tuning von Oracle 10g Release 2 Teil 2: Konfiguration und Prophylaxe Memory-Techniken: SGA- und PGA-Analysen ©Database Consult GmbH - Jachenau 09/2006 Folie 28 von xx ASMM – eingeführt unter 9.0.1, erweitert unter 9.2.0 – dynamische Parameter für Shared Pool, Default Buffer Cache, und später Large Pool – Obergrenze (statisch) festgelegt über SGA_MAX_SIZE – keine automatische Umverteilung der SGA-Komponenten • Unter 10g – Möglichkeit der automatischen, Last-abhängigen Umverteilung bestimmter SGA-Komponenten durch den MMAN Prozess: Shared Pool, Default Buffer Cache, Large Pool und Java Pool – Dynamisch gesteuert über (m.H. von SPFILE) • SGA_TARGET > 0 und <= SGA_MAX_SIZE Performanceanalyse und Tuning von Oracle 10g Release 2 • Automatic Shared Memory Management (ASMM) • Historie • STATISTICS_LEVEL = {TYPICAL|ALL} ©Database Consult GmbH - Jachenau 09/2006 Folie 29 von xx ASMM Performanceanalyse und Tuning von Oracle 10g Release 2 • MMAN alle 5 Minuten aktiv • Anpassung der SGA-Komponenten auf Basis von – Workload Statistiken – konsultiert Memory Advisor • Views DBA_HIST_CACHE_ADVICE, DBA_HIST_[y]_POOL_ADVICE (y= JAVA | SHARED | STREAMS), DBA_HIST_[x]_ADVICE (x = MTTR | PGA | SGA) – “what-if” Analysen zur Ermittlung der besten Mem-Verteilung – Schichtet Mem entsprechend um – übernimmt nach Startup die zuletzt ermittelten Werte über entsprechende __-Parameter (z.B. __db_cache_size) • Explizit gesetzte Parameter geben Minimalgrössen vor 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 30 von xx 10 ASMM – – – – – DB_<KEEP/RECYCLE>_CACHE_SIZE DB_nK_CACHE_SIZE (non default block size) LOG_BUFFER FIXED SGA STREAMS_POOL_SIZE • SGA_TARGET = Summe der manuellen und automatischen Bereiche • Pro und Con Performanceanalyse und Tuning von Oracle 10g Release 2 • Nicht automatisch getunt (manuelle Bereiche): – Gut für (periodisch) wechselnde SGA-Anforderungen – Überflüssig bei „festen“ Ressourcen-Anforderungen • SGA_TARGET <= SGA_MAX_SIZE • Bei SGA_TARGET = 0 altes Memory-Modell (9i) ©Database Consult GmbH - Jachenau 09/2006 Folie 31 von xx ASMM – v$sgainfo, v$sga_dynamic_components, v$sga_dynamic_free_memory, v$sga_resize_ops NAME MB ---------------- ------------------------------Fixed SGA Size 1 Redo Buffers 3 Buffer Cache Size 364 Shared Pool Size 136 Large Pool Size 4 Java Pool Size 4 Streams Pool Size 0 Granule Size 4 Maximum SGA Size 512 Startup overhead in Shared Pool 28 Free SGA Memory Available 0 RESIZE -------No No Yes Yes Yes Yes Yes No No No ©Database Consult GmbH - Jachenau 09/2006 Performanceanalyse und Tuning von Oracle 10g Release 2 • Infos über Folie 32 von xx Automatisches PGA Management – Program Global Area oder Workarea liegt im process private memory des Server Processes – enthält globale Variablen, Daten Strukturen und control information für einen Server Process • z.B. runtime area eines Cursors, erzeugt bei jedem execute • Performance hängt auch von Memory in PGA ab • Manuell beeinflusst durch – SORT_AREA_SIZE, HASH_AREA_SIZE, BITMAP_MERGE_AREA_SIZE, CREATE_BITMAP_AREA_SIZE, etc. Performanceanalyse und Tuning von Oracle 10g Release 2 • PGA • Ab 9i automatisiertes PGA Memory Management – WORKAREA_SIZE_POLICY=AUTO – PGA_AGGREGATE_TARGET=<angestrebte Gesamtgroesse> – zunächst nur für Dedicated Server ab 10g auf für Shared Server 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 34 von xx 11 Automatisches PGA Management – Mischstrategien sind möglich! – bei „manual“ gelten die Werte der entsprechenden Init.ora Parameter • PGA_AGGREGATE_TARGET – angestrebte Gesamtgrössen für alle Sort- und Hash-Areas – grössere Anforderungen durch • massive gleichzeitige Sort-Operationen (Minimalgrösse garantiert) • Array-Speicher für z.B. PL/SQL Module • interne Limitierungen sind über folgende Parameter sichtbar Performanceanalyse und Tuning von Oracle 10g Release 2 • Beide Parameter sind dynamisch – _pga_max_size – maximaler PGA-Anteil pro Prozess (d. 200 MB) – _smm_max_size / _smm_min_size – maximaler/minimaler PGAAnteil pro Operation – unterschiedliche Defaults für serielle und parallele Operationen 09/2006 ©Database Consult GmbH - Jachenau Folie 35 von xx Automatisches PGA Management – OLTP Systeme PAT = (<Total Physical Memory > * 80%) * 20% – DSS Systeme PAT = (<Total Physical Memory > * 80%) * 50% • Tracing von Sort-Operationen etc. – Event 10032 (dump sort statistics) ALTER SESSION SET EVENTS '10032 trace name context forever, level 10'; – Event 10033 (dump sort intermediate run statistics. Level 10) – Event 10053 (dump the decisions made by the optimizer when parsing a statement. Level 1) 09/2006 ©Database Consult GmbH - Jachenau Performanceanalyse und Tuning von Oracle 10g Release 2 • Empfehlungen für die erste Einstellung Folie 36 von xx Automatisches PGA Management – v$pgastat - instance-level statistics on the PGA memory usage – V$SQL_WORKAREA_HISTOGRAM – Histogramm von WA-Grössen und Executions (one-pass, multi-pass) – V$SQL_WORKAREA_ACTIVE – aktive WAs (executing) in der Instanz – V$PGA_TARGET_ADVICE – Auswirkungen auf Cache Hit und Overallokation bei unterschiedlichen PATs – V$PGA_TARGET_ADVICE_HISTOGRAM – Auswirkungen auf 1-pass und multi-pass Operationen – DBA_HIST_PGASTAT (nur AWR) – DBA_HIST_PGA_TARGET_ADVICE (nur AWR) 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Performanceanalyse und Tuning von Oracle 10g Release 2 • Monitoring der PGA-Bereiche Folie 37 von xx 12 v$pgastat – Für dynamische workareas verfügbarer Bereich – pga_aggregate_target minus fester Bereich (z.B. Session Info • global memory bound – Maximalgröße einer Workarea (>= 1MB) • total PGA allocated • total PGA used for auto workareas – augenblicklich gesamthaft genutzte PGA für dynamische Bereiche 09/2006 ©Database Consult GmbH - Jachenau Performanceanalyse und Tuning von Oracle 10g Release 2 • Statistiken der PGA-Nutzung u.a.: • aggregate PGA auto target Folie 38 von xx v$pgastat 09/2006 164413440 201326592 941597696 100 0 40264704 23 103270400 7085056 0 0 666959872 20 74832 6750208 47042560 18685952 0 0 ©Database Consult GmbH - Jachenau bytes bytes bytes percent bytes bytes bytes bytes bytes bytes Performanceanalyse und Tuning von Oracle 10g Release 2 aggregate PGA auto target aggregate PGA target parameter bytes processed cache hit percentage extra bytes read/written global memory bound max processes count maximum PGA allocated maximum PGA used for auto workareas maximum PGA used for manual workareas over allocation count PGA memory freed back to OS process count recompute count (total) total freeable PGA memory total PGA allocated total PGA inuse total PGA used for auto workareas total PGA used for manual workareas bytes bytes bytes bytes bytes Folie 39 von xx v$process_memory Performanceanalyse und Tuning von Oracle 10g Release 2 • Memory Bereiche von Prozessen • Monitoring über v$process_memory • Neu in 10.2 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 40 von xx 13 Performanceanalyse und Tuning von Oracle 10g Release 2 Teil 2: Konfiguration und Prophylaxe SGA- und PGA-Analysen Active Workload Repository: Kennzahlen, Metriken und Alerts ©Database Consult GmbH - Jachenau 09/2006 Folie 42 von xx Ausblick und Terminologie – AWR (Automatic Workload Repository) – historische Infos – ASH (Active Session History) Infos über Sessions – ADDM (Automatic Database Diagnostic Monitor) wertet Kennzahlen aus und gibt Empfehlungen ©Database Consult GmbH - Jachenau 09/2006 Performanceanalyse und Tuning von Oracle 10g Release 2 • Die „automatic Performance Diagnostic und Tuning Features“ haben einen signifikanten Ausbau der Metriken und Systemstatistiken bewirkt. • Dadurch erhalten wir wertvolle Werkzeuge für die Generierung von Lastprofilen und die Performance-Analyse • Terminologie: Folie 43 von xx V$ Erweiterungen 10g SGA Historien/Klassen Vordef. Metriken Kennzahlen • • • • • • 09/2006 Kontextinfos Kennzahlen – v$sysstat, v$sessstat, v$mystat Kontextinfos – v$session_wait, v$sql Metriken – v$metricname, v$metric Klassifizierungen – v$metricgroup, v$system_wait_class Historien über zirkulären Buffer in der SGA – v$filemetric_history Summaries fassen Historien zusammen – v$sysmetric_summary ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Performanceanalyse und Tuning von Oracle 10g Release 2 Summaries und Histogramme Historien/Klassen Folie 44 von xx 14 V$ Erweiterungen 10g v$metricgroup v$sysstat v$metricname Performanceanalyse und Tuning von Oracle 10g Release 2 v$statname (mit class) v$metric v$sysmetric v$sysmetric_history ©Database Consult GmbH - Jachenau 09/2006 Folie 45 von xx DBA_HIST_xxx Views AWR SGA Summaries und Histogramme Historien/Klassen Historien/Klassen Performanceanalyse und Tuning von Oracle 10g Release 2 SYSAUX 10g – Automatic Workload Repository Vordef. Metriken Kennzahlen Kontextinfos ©Database Consult GmbH - Jachenau 09/2006 Folie 46 von xx AWR – Sammelt und speichert wait events, active session history, Systemstatistiken – Aufwendige SQL-Statements etc. – braucht statistics_level TYPICAL oder ALL ADDM WRH$-Tabellen DBA_HIST Views Advisories dbms_workload_repository V$Views "Snapshots" im SYSAUX-Tablespace AWR Background-Prozesse (MMON) MMNL-Prozess Performanceanalyse und Tuning von Oracle 10g Release 2 Werkzeuge • Automatic Workload Repository enthält SGA-Memory ASH etc. 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 47 von xx 15 v$statistics_level ACTIVATION ---------TYPICAL TYPICAL TYPICAL ALL TYPICAL TYPICAL ALL TYPICAL TYPICAL TYPICAL TYPICAL TYPICAL TYPICAL TYPICAL TYPICAL TYPICAL TYPICAL STATISTICS_VIEW_NAME --------------------V$DB_CACHE_ADVICE V$MTTR_TARGET_ADVICE SET -----NO NO YES YES V$SEGSTAT NO V$PGA_TARGET_ADVICE NO V$SQL_PLAN_STATISTICS YES V$SHARED_POOL_ADVICE NO NO V$SESSION_LONGOPS NO V$SQL_BIND_CAPTURE NO NO NO NO V$ACTIVE_SESSION_HISTORY NO V$UNDOSTAT NO V$STREAMS_POOL_ADVICE NO ©Database Consult GmbH - Jachenau 09/2006 Performanceanalyse und Tuning von Oracle 10g Release 2 STATISTICS_NAME ------------------------------------------Buffer Cache Advice MTTR Advice Timed Statistics Timed OS Statistics Segment Level Statistics PGA Advice Plan Execution Statistics Shared Pool Advice Modification Monitoring Longops Statistics Bind Data Capture Ultrafast Latch Statistics Threshold-based Alerts Global Cache Statistics Active Session History Undo Advisor, Alerts and Fast Ramp up Streams Pool Advice Folie 48 von xx AWR (Hidden) Parameter Performanceanalyse und Tuning von Oracle 10g Release 2 _cache_stats_monitor - if TRUE, enable cache stats monitoring _cursor_bind_capture_area_size maximum size of the cursor bind capture area db_cache_advice - Buffer cache sizing advisory _db_mttr_advice - MTTR advisory _disable_txn_alert - disable txn layer alert _dml_monitoring_enabled - enable modification monitoring _gc_statistics - if TRUE, kcl statistics are maintained _library_cache_advice - whether KGL advice should be turned on _longops_enabled - longops stats enabled _object_statistics - enable the object level statistics collection _rowsource_execution_statistics if TRUE, Oracle will collect rowsource statistics _smm_advice_enabled - if TRUE, enable v$pga_advice statistics_level - statistics level _threshold_alerts_enable if 1, issue threshold-based alerts timed_os_statistics internal os statistic gathering interval in seconds timed_statistics - maintain internal timing statistics _ultrafast_latch_statistics maintain fast-path statistics for ultrafast latches ©Database Consult GmbH - Jachenau 09/2006 Folie 49 von xx AWR – ermöglicht automatisierte Tuning-Aktionen – liefert eine Fülle von Kennzahlen und Statistiken für die eigene Analyse • Cons – Platzverbrauch im SYSAUX-Tablespace (konfigurierbar) – teilweise Ressourcen-intensive Operationen • library cache latch contention und Snapshot Contention ggf. durch grosse Anzahl von Bind Variablen oder grosse Anzahl von Child Cursorn (SQL Statistiken langsam) • Workaround durch Event awr_flush_table_off level <wrh_tableid> (siehe Metalink) 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Performanceanalyse und Tuning von Oracle 10g Release 2 • Pro Folie 50 von xx 16 AWR Konfiguration Performanceanalyse und Tuning von Oracle 10g Release 2 _awr_restrict_mode = FALSE STATISTICS_LEVEL = { TYPICAL | ALL } View DBA_HIST_WR_CONTROL (Default 60 Min. - 7 Tage) dbms_workload_repository.modify_snapshot_settings (interval => 45 -- Minuten ,retention => 20160 –- Minuten = 2 Wochen); _addm_auto_enable = { TRUE | FALSE } enable/disable auto stats collection job _optimizer_autstats_job = { TRUE | FALSE } ©Database Consult GmbH - Jachenau 09/2006 Folie 51 von xx AWR Platzverbrauch Auszug Report ********************************************* | Summary of SYSAUX Space Estimation | ******************************************* | Est size of SM/ADVISOR 7.6 MB | Est size of WM 6.9 MB | Est size of LOGMNR 5.9 MB | Est size of SM/OTHER 4.8 MB | Est size of EM_MONITORING_USER 1.6 MB | Est size of LOGSTDBY 0.9 MB | Est size of AO 0.8 MB | Est size of XSOQHIST 0.8 MB | Est size of STREAMS 0.5 MB | Est size of JOB_SCHEDULER 0.4 MB | Est size of TSM 0.3 MB | Est size of Others 6.9 MB | Est size of SM/AWR ©Database Consult GmbH - Jachenau 09/2006 Performanceanalyse und Tuning von Oracle 10g Release 2 • View v$sysaux_occupants für Komponente SM/AWR • Platzberechnung und Report über Skript ?/rdbms/admin/ utlsyxsz.sql 155.1 MB Folie 52 von xx AWR – Snapshot – schreiben von Kennzahlen aus AWR-Buffer auf Platte/Repository für die Dauer von <Retention> – Baseline – speichern von Snapshot-Bereichen über die Dauer von <Retention> hinaus (als Referenz-Statistiken) • Schnittstellen – – – – 09/2006 OEM Package DBMS_WORKLOAD_REPOSITORY Diverse Anbieter z.B. WISE Reports über ?/rdbms/admin/awrrpt.sql ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Performanceanalyse und Tuning von Oracle 10g Release 2 • Begriffe Folie 53 von xx 17 AWR – ggf. interessant, wenn Automatismus ausgeschaltet wurde BEGIN DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT (); END; / BEGIN DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE (low_snap_id => 22, high_snap_id => 32, dbid => 3310949047); END; / 09/2006 ©Database Consult GmbH - Jachenau Performanceanalyse und Tuning von Oracle 10g Release 2 • Snapshots können auch manuell erstellt, gelöscht etc. werden Folie 54 von xx Baselines BEGIN DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE ( start_snap_id => 270, end_snap_id => 280, baseline_name => 'Hochlast Wochenende', dbid => 3310949047); DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE ( baseline_name => 'peak baseline', cascade => FALSE, dbid => 3310949047); END; / 09/2006 ©Database Consult GmbH - Jachenau Folie 55 von xx ©Database Consult GmbH - Jachenau Folie 56 von xx Performanceanalyse und Tuning von Oracle 10g Release 2 • Speicherung von Kennzahlen und Metriken über die Retention Periode hinaus ("beibehaltene Snapshots") • Generiert per PL/SQL-Api mit jeweils einem Snapshot-Paar • View DBA_HIST_BASELINES AWR Report Performanceanalyse und Tuning von Oracle 10g Release 2 09/2006 Copyright Database Consult GmbH 18 AWR Transport Performanceanalyse und Tuning von Oracle 10g Release 2 • Auswertungen außerhalb des Produktivsystems • Übertrag in zentrales Repository • Daten extrahieren: – DBMS_SWRF_INTERNAL.AWR_EXTRACT( dmpfile => 'awr_data.dmp', dmpdir => 'TMP_DIR', bid => 302, eid => 305); • Übertrag in Übergangsschema: – DBMS_SWRF_INTERNAL.AWR_LOAD( SCHNAME => 'AWRTEMP', dmpfile => 'awr_data', dmpdir => 'TMP_DIR' ); • Verschieben ins AWR der Zieldatenbank (SYS): – DBMS_SWRF_INTERNAL.MOVE_TO_AWR( SCHNAME => 'AWRTEMP_USER'); ©Database Consult GmbH - Jachenau 09/2006 Folie 57 von xx Metriken Relationen von Kennzahlen, Quoten 144 vordefinierte Metriken, 9 Metrikgruppen v$metricgroup – listet Gruppen v$metricname – listet mögliche Metriken SELECT group_name, metric_name, metric_unit FROM v$metricname WHERE metric_name LIKE '%File%' OR metric_name LIKE '%Hit%'; 09/2006 ©Database Consult GmbH - Jachenau Performanceanalyse und Tuning von Oracle 10g Release 2 • • • • Folie 58 von xx Metriken Performanceanalyse und Tuning von Oracle 10g Release 2 METRIC_NAME METRIC_UNIT --------------------------Physical Block Writes (Files-Long) Blocks Physical Block Reads (Files-Long) Blocks Physical Writes (Files-Long) Writes Physical Reads (Files-Long) Reads Average File Write Time (Files-Long) CentiSeconds Per Write Average File Read Time (Files-Long) CentiSeconds Per Read PGA Cache Hit % % Bytes/TotalBytes Library Cache Hit Ratio % Hits/Pins Row Cache Hit Ratio % Hits/Gets Cursor Cache Hit Ratio % CursorCacheHit/SoftParse Redo Allocation Hit Ratio % (#Redo - RedoSpaceReq)/#Redo Buffer Cache Hit Ratio % (LogRead - PhyRead)/LogRead Library Cache Hit Ratio % Hits/Pins Buffer Cache Hit Ratio % (LogRead - PhyRead)/LogRead 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 59 von xx 19 Metriken Performanceanalyse und Tuning von Oracle 10g Release 2 • v$metric und v$sysmetric – Aktuelle Metriken für die Instanz – Messintervalle bestimmt durch v$metricgroup • Unterschiedliche Sichtweisen relevanter Metriken durch – – – – v$sessmetric v$filemetric v$eventmetric v$servicemetric ©Database Consult GmbH - Jachenau 09/2006 Folie 60 von xx Histogramme – v$temp_histogram, v$file_histogram, v$event_histogram SELECT event, wait_time_milli, wait_count , round(wait_count/summe.total*100,2) "wait%" FROM v$event_histogram , (SELECT sum(wait_count) total FROM v$event_histogram WHERE event = 'db file scattered read') summe WHERE event = 'db file scattered read' / 09/2006 ©Database Consult GmbH - Jachenau Performanceanalyse und Tuning von Oracle 10g Release 2 • Histogramme für aktuelle Metriken in unterschiedlichen Kontexten, z.B. Folie 61 von xx Histogramme 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Performanceanalyse und Tuning von Oracle 10g Release 2 EVENT WAIT_TIME_MILLI WAIT_COUNT wait% ---------------------- --------------- ------------- ---db file scattered read 1 4307 90,39 db file scattered read 2 18 0,38 db file scattered read 4 6 0,13 db file scattered read 8 19 0,4 db file scattered read 16 68 1,43 db file scattered read 32 135 2,83 db file scattered read 64 162 3,4 db file scattered read 128 45 0,94 db file scattered read 256 5 0,1 Folie 62 von xx 20 Historische Daten Performanceanalyse und Tuning von Oracle 10g Release 2 • Zweistufiges Verfahren: – Zyklische Puffer in der SGA samples im Minutentakt – Workload Repository mit Tabellen etc, im SYSAUX-Tablespace • statistics_level = {TYPICAL | ALL } • View DBA_HIST_WR_CONTROL DBID 2223592370 SNAP_INTERVAL RETENTION +00 01:00:00.000000 +04 00:00:00.000000 ©Database Consult GmbH - Jachenau 09/2006 Folie 63 von xx Historische Daten Performanceanalyse und Tuning von Oracle 10g Release 2 BEGIN dbms_workload_repository.modify_snapshot_settings (interval => 45 -- Minuten ,retention => 20160 –- Minuten = 2 Wochen); END; / • Aktuelle "History"- Informationen aus der SGA (minütlich) – – – – – – v$active_session_history v$sysmetric_history, v$filemetric_history v$waitclassmetric_history v$servicemetric_history v$session_wait_history ©Database Consult GmbH - Jachenau 09/2006 Folie 64 von xx Historische Daten Performanceanalyse und Tuning von Oracle 10g Release 2 • Speicherung der ASH Puffer im Shared Pool – Abhängig von Sessions, Snapshot-Interval • Zugriff auf das Repository über DBA_HIST-Views – DBA_HIST_SNAPSHOT – DBA_HIST_ACTIVE_SESS_HISTORY, DBA_HIST_SQLSTAT, DBA_HIST_SQLBIND – DBA_HIST_SYS_TIME_MODEL – DBA_HIST_SESSMETRIC_HISTORY ... SELECT * FROM v$sgastat WHERE name = 'ASH buffers'; POOL NAME BYTES ------------ ------------ -------shared pool ASH buffers 2097152 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 65 von xx 21 ASH – Ringpuffer in der SGA (shared pool) – Größe: 2MB x #CPUs (max. 5% der SGA bzw. <30MB) ermitteln: select name, bytes/1024/1024 mb from v$sgastat where name = 'ASH buffers'; • Daten aktiver Sessions (waiting/on CPU) – Wait event mit p1 – p3, Modul, Action, Client-ID, Cursor-ID • Gesammelt jede Sekunde (Default) • aktuelle Details über v$active_session_history • Historische Daten in AWR – geschrieben durch MMNL-Proz. Performanceanalyse und Tuning von Oracle 10g Release 2 Werkzeuge • Active Session History (ASH) – DBA_HIST_ACTIVE_SESS_HISTORY • ASH-Report über ?/rdbms/admin/ashrpt.sql • Buffer dumpen mit alter system set events 'immediate trace name ashdump level 10'; 09/2006 ©Database Consult GmbH - Jachenau Folie 66 von xx ASH 09/2006 ©Database Consult GmbH - Jachenau Folie 67 von xx ©Database Consult GmbH - Jachenau Folie 68 von xx Performanceanalyse und Tuning von Oracle 10g Release 2 _ash_disk_filter_ratio Ratio of the number of in-memory samples to the number of samples actually written to disk = 10 _ash_disk_write_enable To enable or disable Active Session History flushing = TRUE _ash_dummy_test_param Oracle internal dummy ASH parameter used ONLY for testing! = 0 _ash_eflush_trigger The percentage above which if the in-memory ASH is full the emergency flusher will be triggered = 66 _ash_enable To enable or disable Active Session sampling and flushing = TRUE _ash_sample_all To enable or disable sampling every connected session including ones waiting for idle waits = FALSE _ash_sampling_interval Time interval between two successive Active Session samples in millisecs = 1000 _ash_size To set the size of the in-memory Active Session History buffers = 1048618 ASH Report Performanceanalyse und Tuning von Oracle 10g Release 2 09/2006 Copyright Database Consult GmbH 22 Advisor Stab SQL Tuning SQL Access Space Memory Segment SGA Advisor Undo PGA Advisor MTTR JavaPool, Shared Pool etc. ©Database Consult GmbH - Jachenau 09/2006 Performanceanalyse und Tuning von Oracle 10g Release 2 ADDM Folie 69 von xx ADDM – automatisch im Anschluss an Snapshot – explizit über EM oder API (DBMS_ADVISOR, addmrpt.sql) • Ziel: Liefert detaillierte Empfehlungen • Empfehlungen über Views und Reports – Probleme (root causes) : Symptome : Informationen (non-problem areas) • Views: – – – – DBA_ADVISOR_TASKS DBA_ADVISOR_LOG DBA_ADVISOR_FINDINGS DBA_ADVISOR_RECOMMENDATIONS Performanceanalyse und Tuning von Oracle 10g Release 2 Werkzeuge • Automatic Database Diagnostic Monitor • analysiert die Daten des AWR • Report über ?/rdbms/admin/addmrpt.sql 09/2006 ©Database Consult GmbH - Jachenau Folie 70 von xx ADDM 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Performanceanalyse und Tuning von Oracle 10g Release 2 • DECLARE task_name VARCHAR2(30) := 'SCOTT_ADDM'; task_desc VARCHAR2(30) := 'ADDM Feature Test'; Ausführungsschritte task_id NUMBER; (manuell) BEGIN dbms_advisor.create_task('ADDM‚ – Task anlegen , task_id, task_name, task_desc, null); – Randbedingungen festlegen: dbms_advisor.set_task_parameter( start und Ende, Instanz 'SCOTT_ADDM', 'START_SNAPSHOT', 1); dbms_advisor.set_task_parameter( – Task ausführen 'SCOTT_ADDM', 'END_SNAPSHOT', 3); – Empfehlungen dbms_advisor.set_task_parameter( beurteilen/anwenden 'SCOTT_ADDM', 'INSTANCE', 1); dbms_advisor.set_task_parameter( 'SCOTT_ADDM', 'DB_ID', 494687018); (3) dbms_advisor.execute_task('SCOTT_ADDM'); END; / SET LONG 1000000 PAGESIZE 0 LONGCHUNKSIZE 1000 COLUMN get_clob FORMAT a80 SELECT dbms_advisor.get_task_report( 'SCOTT_ADDM', 'TEXT', 'TYPICAL') FROM sys.dual; Folie 71 von xx 23 ADDM Report FINDING 2: 35% impact (1456 seconds) -----------------------------------SQL statements consuming significant database time were found. RECOMMENDATION 1: SQL Tuning, 35% benefit (1456 seconds) ACTION: Run SQL Tuning Advisor on the SQL statement with SQL_ID gt9ahqgd5fmm2. RELEVANT OBJECT: SQL statement with SQL_ID gt9ahqgd5fmm2 and PLAN_HASH 547793521 UPDATE bigemp SET empno = ROWNUM ©Database Consult GmbH - Jachenau 09/2006 Performanceanalyse und Tuning von Oracle 10g Release 2 FINDING 1: 65% impact (2734 seconds) -----------------------------------PL/SQL execution consumed significant database time. RECOMMENDATION 1: SQL Tuning, 65% benefit (2734 seconds) ACTION: Tune the PL/SQL block with SQL_ID fjxa1vp3yhtmr. Refer to the "Tuning PL/SQL Applications" chapter of Oracle's "PL/SQL User's Guide and Reference" RELEVANT OBJECT: SQL statement with SQL_ID fjxa1vp3yhtmr BEGIN EMD_NOTIFICATION.QUEUE_READY(:1, :2, :3); END; Folie 72 von xx Advice Performanceanalyse und Tuning von Oracle 10g Release 2 Werkzeuge • Hilfsmittel bei der Konfiguration von Speichergrössen • verfügbar ab statistics_level = TYPICAL • V$-Views – – – – – – – v$shared_pool_advice v$java_pool_advice v$streams_pool_advice v$db_cache_advice v$sga_target_advice v$pga_target_advice v$mttr_target_advice • DBA-Views – DBA_HIST_SHARED_POOL_ADVICE – etc. ©Database Consult GmbH - Jachenau 09/2006 Folie 73 von xx ATO Performanceanalyse und Tuning von Oracle 10g Release 2 Werkzeuge • Automatic Tuning Optimizer – SQL Access Advisor: Indizes, MVs – SQL Tuning Advisor: SQL, SQL-Profile Erstellung • Expertensystem zur Optimierung von SQL-Statements – „Optimizer mit sehr weiten Analysezeiten“ • Detaillierte Analyse erstellt Report mit Verbesserungsvorschlägen • Expliziter Aufruf über Schnittstelle: – – – – 09/2006 Paket DBMS_SQLTUNE oder Enterprise Manager SQL-Vorlagen – einzeln oder in Sets manuelle Angabe, Cursor-Cache oder AWR-Historie ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 74 von xx 24 SQL Acess Advisor – Einzelstatement, Cached Statements, Tuning sets • Vorgehen – – – – Task definieren Workload neu definieren oder verlinken Empfehlungen generieren Ergebnisse evaluieren ©Database Consult GmbH - Jachenau 09/2006 Performanceanalyse und Tuning von Oracle 10g Release 2 • Analysiert Indizes und Materialized Views und Materialized View Logs • Nutzung über Enterprise Manager oder API (DBMS_ADVISOR) • Input Folie 75 von xx SQL Acess Advisor Performanceanalyse und Tuning von Oracle 10g Release 2 • Unterschiedliche Analyse und Reporting-Stufen – Comprehensive – Limited • Quicky mit einzelnen Statements – DBMS_ADVISOR.QUICK_TUNE( DBMS_ADVISOR.SQLACCESS_ADVISOR, task_name, 'SELECT AVG(amount_sold) FROM sh.sales WHERE promo_id=10'); Recommendation Comprehensive Create new index Yes Create new materialized view Yes Create new materialized view log Yes Drop unused index Yes Drop unused materialized view Yes Change type of existing indexes Yes Add columns to end of existing indexes Yes Add columns/clauses to materialized view log Yes 09/2006 Limited Yes Yes Yes No No No Yes Yes ©Database Consult GmbH - Jachenau Folie 76 von xx Übersicht DBMS_SQLTUNE Performanceanalyse und Tuning von Oracle 10g Release 2 Tuning Sets CREATE_SQLSET CAPTURE_CURSOR_CACHE_SQLSET SELECT_SQLSET DROP_SQLSET SQL-Profiles ACCEPT_SQL_PROFILE DROP_SQL_PROFILE ALTER_SQL_PROFILE 09/2006 Tasks CREATE_TUNING_TASK EXECUTE_TUNING_TASK REPORT_TUNING_TASK DROP_TUNING_TASK ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 77 von xx 25 Grenzwerte – Jeweils eine Warnschwelle und eine kritische Schwelle • API über DBMS_SERVER_ALERT DBMS_SERVER_ALERT.SET_THRESHOLD( DBMS_SERVER_ALERT.CPU_TIME_PER_CALL –- Art des Schwellwertes: CPU pro CALL , DBMS_SERVER_ALERT.OPERATOR_GE, '8000' -- Warnschwelle > 8000 Mikrosekunden , DBMS_SERVER_ALERT.OPERATOR_GE, '10000' –- kritische Schwelle > 10000 MS , 1 –- Beobachtungsdauer in Minuten , 2 –- Anzahl der Überschreitungen bis Alert gen. wird , 'T10G' -- Instanz , DBMS_SERVER_ALERT.OBJECT_TYPE_SERVICE , 'appl1.dcconsult.de') –- Datenbank Service für den Schwellw. gelten soll ©Database Consult GmbH - Jachenau 09/2006 Performanceanalyse und Tuning von Oracle 10g Release 2 • Definition von Grenzwerten für Metriken Folie 78 von xx Server Generated Alerts – Überschreitung eines Metrik-Grenzwertes, z.B physical reads/sec – Vorfall eines Events, z.B snapshot too old. • Meldungen erscheinen in persisten queue ALERT_QUE – Darstellung in OEM – manuell über Package DBMS_AQADM – Subscription für die Queue • von dort als Metrik-Historien in AWR übernommen. • OEM kann Alerts als Mail etc. weiterleiten. • Views Performanceanalyse und Tuning von Oracle 10g Release 2 • Alerts bei – DBA_OUTSTANDING_ALERTS – DBA_ALERT_HISTORY – v$alert_types ©Database Consult GmbH - Jachenau 09/2006 Folie 79 von xx Segment Level Statistiken – Für Tabellen und Indizes – Mindesten STATISTIC_LEVEL = TYPICAL • v$segstat_name – Übsicht über Statistikarten/Aktivierung • v$segstat und v$segment_statistics – Statistikwerte für konkrete Segmente 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Performanceanalyse und Tuning von Oracle 10g Release 2 • ab 9iR2 automatisch Statistiken auf Basis von Segmenten Folie 80 von xx 26 Segment-Level Statistics Performanceanalyse und Tuning von Oracle 10g Release 2 V$segstat_name STATISTIC# NAME 0 logical reads 1 buffer busy waits 2 db block changes 3 physical reads 4 physical writes 5 physical reads direct 6 physical writes direct 8 global cache cr blocks served 9 global cache current blocks served 10 ITL waits 11 row lock waits ©Database Consult GmbH - Jachenau 09/2006 Folie 81 von xx Segment Level Statistiken object_name,statistic_name,value v$segment_statistics object_name = 'EMP' owner = 'DEVELOPER' value > 0; OBJECT_NAME -----------EMP EMP EMP STATISTIC_NAME VALUE ------------------ --------logical reads 160 physical reads 5 physical writes 1 ©Database Consult GmbH - Jachenau 09/2006 Performanceanalyse und Tuning von Oracle 10g Release 2 SELECT FROM WHERE AND AND Folie 82 von xx Table Monitoring – View USER_TAB_MODIFICATIONS – Eintrag über SMON alle 3(!) Stunden; FLUSH möglich • DBMS_STATS kann dann per Option Statistiken automatisch aktualisieren – "GATHER STALE": Aktualisierung, wenn > 10% der Rows verändert wurden – "GATHER AUTO" zusätzliche Generierung, wenn keine Statistiken vorliegen 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Performanceanalyse und Tuning von Oracle 10g Release 2 • Protokollierung von DML-Häufigkeiten für bestimmte Tabellen – MONITORING Folie 83 von xx 27 Table Monitoring Performanceanalyse und Tuning von Oracle 10g Release 2 -- Monitoring überprüfen SELECT table_name FROM user_tables WHERE monitoring = 'YES'; -- .. Und einschalten ALTER TABLE emp MONITORING; BEGIN dbms_stats.ALTER_SCHEMA_TAB_MONITORING( 'DEVELOPER', TRUE); END; BEGIN dbms_stats.FLUSH_DATABASE_MONITORING_INFO; END; ©Database Consult GmbH - Jachenau 09/2006 Folie 84 von xx Table Monitoring TABLE_NAME INSERTS UPDATES DELETES TRU ---------- --------- ---------- ------- --EMP 0 4 0 NO BEGIN dbms_stats.GATHER_SCHEMA_STATS( ownname => 'DEVELOPER', options => 'GATHER STALE'); END; Performanceanalyse und Tuning von Oracle 10g Release 2 SELECT * FROM user_tab_modifications; -- Alternativ GATHER AUTO (auch leere Stat.) ©Database Consult GmbH - Jachenau 09/2006 Folie 85 von xx Index Monitoring Performanceanalyse und Tuning von Oracle 10g Release 2 • Indexnutzung protokollieren (YES/NO) • Explizites einstellen über ALTER INDEX • Abfragen über V$OBJECT_USAGE – Nur für eigenes Schema ALTER INDEX emp_idx MONITORING USAGE; desc v$object_usage INDEX_NAME NOT NULL VARCHAR2(30) TABLE_NAME NOT NULL VARCHAR2(30) MONITORING VARCHAR2(3) USED VARCHAR2(3) START_MONITORING VARCHAR2(19) END_MONITORING VARCHAR2(19) 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 86 von xx 28 Performanceanalyse und Tuning von Oracle 10g Release 2 Teil 3: Lastprofile und Analysemethoden 09/2006 ©Database Consult GmbH - Jachenau Folie 91 von xx Performanceanalyse und Tuning von Oracle 10g Release 2 Teil 3: Lastprofile und Analysemethoden Tracing Werkzeuge 09/2006 ©Database Consult GmbH - Jachenau Folie 92 von xx Polling versus Tracing t Performanceanalyse und Tuning von Oracle 10g Release 2 Werkzeuge Polling Tracing 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 93 von xx 29 Diagnostische Events – 10046 – (extended) SQL-Trace inkl. Waits und Binds – 10053 – Optimizer-Internals – 10031, 10032 – Sort Internals Performanceanalyse und Tuning von Oracle 10g Release 2 Werkzeuge • Generierung von zusätzlichen Debug- und TraceInformationen • Level-Angaben zur Steuerung des Detailierungsgrades • schreiben Informationen in ASCII-Trace-Dateien • Dateien können „roh“ interpretiert oder über Tools formatiert werden. • Hier interessant: • Zu Event 10046 existieren Alternativen ©Database Consult GmbH - Jachenau 09/2006 Folie 94 von xx Package DBMS_MONITOR Performanceanalyse und Tuning von Oracle 10g Release 2 Werkzeuge • „End to End Application Tracing“ – Statistik-Generierung – SQL-Tracing • Datensammlung auf unterschiedlichen Ebenen: – – – – Session Service, Modul und/oder Action - hierarchisch Client Identifier Instanz/Datenbank • manche Filter sind kombinierbar • SQL-Trace erzeugt „rohe“ Trace-Dateien zur Weiterverarbeitung ©Database Consult GmbH - Jachenau 09/2006 Folie 95 von xx STATSPACK Performanceanalyse und Tuning von Oracle 10g Release 2 Werkzeuge • Verfügbar ab Version 8i • Erweiterung von utlbstat/utlestat • Snapshots von V$-Objekten – Umfänge steuerbar über Level 0 bis 10 • • • • • 09/2006 Reports über Delta-Werte Geeignet zur Parametrierung der Instanz, Nur bedingt geeignet für einzelne Anwendungen Vorgeschaltete, strategische Analyse wichtig! Braucht mehr Ressourcen als AWR ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 96 von xx 30 STATSPACK Performanceanalyse und Tuning von Oracle 10g Release 2 Werkzeuge • Installiert über ?/rdbms/admin/spcreate.sql – User PERFSTAT – Hilfstabellen – Package STATSPACK • Arbeiten mit – EXECUTE statspack.snap; – Job über SPAUTO.SQL – Auswertungen: • Instanzreport über SPREPORT.SQL und SPREPINS.SQL • SQL-Report über SPREPSQL.SQL und SPRSQINS.SQL ©Database Consult GmbH - Jachenau 09/2006 Folie 97 von xx Eigene Skripte db file ... und direct path ... Events latch free enqueue und log file synch Buffer busy waits und free buffer waits und library chache pin – v$sessstat mit CPU-Statistiken ggf. v$sql – – – – • • • • über Logoff-Trigger für Zusammenfassungen Prozedurale Snapshots für Details – Auflösung von p1, p2, p3 Hilfstabellen speichern Historien vertretbarer Overhead ©Database Consult GmbH - Jachenau 09/2006 Performanceanalyse und Tuning von Oracle 10g Release 2 • Gurtgeeignet für Versionen < 10g • Strikte Beschränkung auf wichtige Kennzahlen und Wait events, z.B. Folie 98 von xx TKPROF Performanceanalyse und Tuning von Oracle 10g Release 2 Werkzeuge • „transient kernel profiler“ • formatiert einzelne SQL-Trace-Dateien • Trace-Dateien erzeugt über – Event 10046. DBMS_MONITOR, sql_trace = true • unterschiedliche Filter und Sortierungen verfügbar Tkprof <trace> <output> <explain> <insert> <sort> <sys> ..... 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 99 von xx 31 TRCSESS Werkzeug – Client-Identifier – Module, Actions – Sessions, Services • Nötig für Shared-Server, Parallelisierungen, Connection Pooling • Java-Werkzeug trcsess [output=output_file_name] [session=session_id] [clientid=client_id] [service=service_name] [action=action_name] [module=module_name] [trace_files] ©Database Consult GmbH - Jachenau 09/2006 Performanceanalyse und Tuning von Oracle 10g Release 2 Werkzeuge • Konsolidieren von Trace-Dateien für Folie 100 von xx Trace-Analyzer – RDBMS > 8.1.6 • Über Metalink: TRCANLZR.sql (Note 224270.1) • Erweiterte Funktionalität und Reports – auch für 8i funktionabel • läuft vollständig in der Datenbank – Tabellen und Prozeduren ©Database Consult GmbH - Jachenau 09/2006 Performanceanalyse und Tuning von Oracle 10g Release 2 Werkzeuge • Erzeugt detailliertes Last- und Ressourcenprofil daher sehr gut für Response Time Analyse • Skriptsammlung zur formatierten Ausgaben von 10046er Traces Folie 101 von xx hammerora Performanceanalyse und Tuning von Oracle 10g Release 2 Werkzeuge • Open Source Tool • verfügbar über www.sourceforge.net • Generiert Lasttest-Skripte aus SQL-Tracedateien – – – – 09/2006 Umwandlung der Tracedatei in Oratcl Oracle-Instantclient muss auf Testmaschine vorhanden sein Virtuelle Nutzer können eingerichtet werden TCL-Skripte editierbar ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 102 von xx 32 dbaman – Generierung von Testskripten – u.a. wirkungsvolle Simulation von Applikationen • Entwickelt von James Morle für „Scaling Oracle8i“ – http://www.morle.com/dbaman/index.htm – Shareware – getestet bis Oracle 8.1 – verfügbar für Unix • Voraussetzungen Performanceanalyse und Tuning von Oracle 10g Release 2 Werkzeuge • Erweiterung der TCL-Sprache für den Zugriff auf OracleDatebank über OCI • Parsing von Oracle-Tracedateien – TCL 8.0, C-Compiler, Oracle 7.3+, 8.x, > 8 ? ©Database Consult GmbH - Jachenau 09/2006 Folie 103 von xx Application Services Performanceanalyse und Tuning von Oracle 10g Release 2 Werkzeuge • Logische Bereiche zur – – – – "group of applications with common attributes" Verteilung der Arbeitslast, Job Scheduling Performancemessung und Monitoring Grenzwerte und Tuning select name, network_name from v$services; -NAME NETWORK_NAME ---------------- ----------------T10G.NndaDevi.de T10G.NandaDevi.de T10GXDB T10GXDB SYS$BACKGROUND SYS$USERS ©Database Consult GmbH - Jachenau 09/2006 Folie 104 von xx Application Services – v$active_services – v$service_events, v$service_metrics u.a. – v$session, DBA_THRESHOLDS • Konfiguration: – service_names (init.ora) – DBMS_SERVICE (auch disconnect_session) BEGIN DBMS_SERVICE.CREATE_SERVICE (SERVICE_NAME => 'App1', NETWORK_NAME => 'App1'); DBMS_SERVICE.START_SERVICE (SERVICE_NAME => 'App1', INSTANCE_NAME => 'T10G'); END; 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Performanceanalyse und Tuning von Oracle 10g Release 2 Werkzeuge • Views: Folie 105 von xx 33 Identifizierung Performanceanalyse und Tuning von Oracle 10g Release 2 Werkzeuge • Generiert individuelles Infix für Trace-Dateien • Dynamisch für die Session • Immer dann, wenn Session mehrere Prozesse benutzt: – Parallel Query – Shared Server ALTER SESSION SET tracefile_identifier = 'GU02'; Format: <sid>_ora_<pid>_GU02.trc ©Database Consult GmbH - Jachenau 09/2006 Folie 106 von xx Application Info Performanceanalyse und Tuning von Oracle 10g Release 2 Werkzeuge • client_info, module, action über DBMS_APPLICATION_INFO • client_id über DBMS_SESSION – „auditierbar“ • Filtern teilweise möglich über – v$session, – v$sqlarea, v$sql – dbms_monitor BEGIN DBMS_APPLICATION_INFO.SET_CLIENT_INFO ( CLIENT_INFO => 'Test-Client'); DBMS_SESSION.SET_IDENTIFIER (CLIENT_ID => 'Test-ID'); END; ©Database Consult GmbH - Jachenau 09/2006 Folie 107 von xx Markierungen Performanceanalyse und Tuning von Oracle 10g Release 2 Werkzeuge • Individuelles Schreiben in Trace- und Alert-Dateien – Markierung relevanter Code-Kontexte • Setzen von Zeitstempeln BEGIN -- schreibt Zeitstempel in TRACE-Datei dbms_system.ksdddt; -- Einzug mit Doppelpunkten ("::::") dbms_system.ksdind(4); dbms_system.ksdwrt (1, 'Output written to trace file'); dbms_system.ksdwrt (2, 'Output written to alert log'); dbms_system.ksdwrt (3, 'Output written to both trace file and alert log'); END; 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 108 von xx 34 Resumeé Performanceanalyse und Tuning von Oracle 10g Release 2 Werkzeuge Oracle bietet eine Fülle von Werkzeugen, Kennzahlen und Statistiken. Projekte müssen die für sie relevanten Werkzeuge und Methoden festlegen, um optimal optimieren zu können. Werkzeuge und Kennzahlen sollten so überschabar und einfach wie möglich sein! ©Database Consult GmbH - Jachenau 09/2006 Folie 109 von xx Tuning-Projekt Performanceanalyse und Tuning von Oracle 10g Release 2 • Exakte Formulierungen, aus den folgenden Bereichen: – – – – Programmatisches Umfeld Relevanz für das geschäftliche Umfeld Ist- und Soll-Zahlen Genaue Angaben zum Kontext des Performance-Problems • Server, Instanz, Zeitrahmen • Session, Modul, Schema, Service – erwarteter (geschäftlicher) Nutzen • Entscheidung zur Strategie und zu den Werkzeugen – Polling versus Tracing – Auswertungsverfahren • Keine Parametervorgaben akzeptieren! ©Database Consult GmbH - Jachenau 09/2006 Folie 110 von xx Tuning-Projekt Performanceanalyse und Tuning von Oracle 10g Release 2 • Polling – – – – – – Schnell einsetzbare V$Abfragen genaue Synchronisierung erforderlich – manuell oder Trigger unmittelbare Auswertung für Session oder Service keine zusätzlichen Tools lückenhafte Kennzahlen Ungenaue Analysen bei diffusen Trends • Tracing – – – – 09/2006 lückenlose Protokollierung, exakte Kontexte alle Filter möglich: Session, Module, Service Auswertung erfordert Tools ggf. grosse Datenmenge und damit erschwerte Analysen ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 111 von xx 35 Polling – v$sess_time_model – v$sessstat – diverse Statistiken • Wartezeiten: – – – – – – – – 09/2006 v$session_event – mit Historie der Session v$session – mit aktuellen Wartezyklen v$session_wait – aktuelle Wartezyklen v$session_wait_history – die letzten 10 Wartezyklen akt.S. v$service_event – Zusammenfassungen per Service per Event v$session_wait_class – Zusammenfassung nach Klassen v$service_wait_class – Zusammenfassung nach Klassen v$active_session_history – Historie v.Wartezyklen akt. Sessions ©Database Consult GmbH - Jachenau Performanceanalyse und Tuning von Oracle 10g Release 2 • CPU-Zeiten: Folie 112 von xx CPU-Statistiken >= 10g Performanceanalyse und Tuning von Oracle 10g Release 2 background cpu time background elapsed time connection management call elapsed time DB CPU DB time failed parse elapsed time failed parse (out of shared memory) elapsed time hard parse (bind mismatch) elapsed time hard parse elapsed time hard parse (sharing criteria) elapsed time inbound PL/SQL rpc elapsed time Java execution elapsed time parse time elapsed PL/SQL compilation elapsed time PL/SQL execution elapsed time repeated bind elapsed time RMAN cpu time (backup/restore) sequence load elapsed time sql execute elapsed time 09/2006 ©Database Consult GmbH - Jachenau Folie 113 von xx CPU Statistiken <= 10g – Parsing von SQL – Logical IO/Blockzugriffe im Buffer 12 11 161 46 43 332 331 330 328 329 8 09/2006 CPU used by this session CPU used when call started gc CPU used by this session global enqueue CPU used by this session IPC CPU used by this session parse count (failures) parse count (hard) parse count (total) parse time cpu parse time elapsed recursive cpu usage ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Performanceanalyse und Tuning von Oracle 10g Release 2 • Aus v$sysstat oder v$sesstat • CPU Zeit im wesentlichen nötig für Folie 114 von xx 36 Tracing >= 10g Performanceanalyse und Tuning von Oracle 10g Release 2 • • • • Hierarchische Filter für Servicename, Modul und Action Separater Filter für Client Identifier Regeln wirken kumulativ Ausgabe der definierten regeln über View DBA_ENABLED_TRACES dbms_monitor.serv_mod_act_trace_enable ('APP1', 'PACK_X', 'Proc_Y'); dbms_monitor.serv_mod_act_trace_disable ('APP1', 'PACK_X', 'Proc_Y'); dbms_monitor.client_id_trace_enable('GU'); dbms_monitor.client_id_trace_disable('GU'); ©Database Consult GmbH - Jachenau 09/2006 Folie 115 von xx Tracefile ermitteln und öffnen Performanceanalyse und Tuning von Oracle 10g Release 2 Rem ggf. an OS oder Ora-Version anpassen SET SUFFIX TRC COLUMN filename NEW_VALUE filename SELECT p1.value||'\'||p2.value||'_ora_'||p.spid ||decode(p3.value,null,'','_'||p3.value) filename FROM v$process p, v$session s, v$parameter p1, v$parameter p2, v$parameter p3 WHERE p1.name = 'user_dump_dest' AND p2.name = 'db_name' AND p3.name = 'tracefile_identifier' AND p.addr = s.paddr AND s.audsid = USERENV ('SESSIONID'); EDIT &&filename SET SUFFIX SQL COLUMN filename CLEAR ©Database Consult GmbH - Jachenau 09/2006 Folie 116 von xx Tracing Performanceanalyse und Tuning von Oracle 10g Release 2 • Mögliche weitere Arbeitsschritte: – – – – – 09/2006 ggf. zusammenführen verschiedener Trace-Dateien Verstehen der „rohen“ Trace-Datei Formatierung über TKPROF Formatierung über Trace Analyzer (trcanlzr.sql) Tools von www.hotsos.com ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 117 von xx 37 Tracing Performanceanalyse und Tuning von Oracle 10g Release 2 • Zusammenführen von Trace-Dateien für – Client-Identifier – Module, Actions – Sessions trcsess [output=output_file_name] [session=session_id] [clientid=client_id] [service=service_name] [action=action_name] [module=module_name] [trace_files] ©Database Consult GmbH - Jachenau 09/2006 Folie 118 von xx Tracing – Rawtrace Performanceanalyse und Tuning von Oracle 10g Release 2 • sinnvoll bei unvollständigen Auswertungen • exakte Zuordnung von Wait Events zu Calls • Gliederung – Allgemeiner Header – Identification: *** ACTION NAME:(Action X) 2005-11-03 13:24:10.265 *** MODULE NAME:(Module A) 2005-11-03 13:24:10.265 *** SERVICE NAME:(SYS$USERS) 2005-11-03 13:24:10.265 *** CLIENT ID:(GU) 2005-11-03 13:24:10.265 *** SESSION ID:(16.1022) 2005-11-03 13:24:10.265 ===================== 09/2006 ©Database Consult GmbH - Jachenau Folie 119 von xx Tracing – Rawtrace Performanceanalyse und Tuning von Oracle 10g Release 2 • • • • • • • • • Cursor Informationen direkt nach Parse Call oder später Nummer nimmt Bezug auf nachfolgende Calls len – Länge des Stmts, uid – schema ID des parsenden Benutzers oct – Oracle Call Type lid – privileged user id tim Zeitstempel in Mikrosekunden (>= 9i) z.B. gettimeofday hv – hash value ad - address PARSING IN CURSOR #7 len=32 dep=0 uid=58 oct=3 lid=58 tim=22374257176 hv=2935929963 ad='1fd73f00' select count(*) from dba_objects END OF STMT 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 120 von xx 38 Tracing – Rawtrace Bindevariablen werden positionsbedingt aufgeführt oacdty – external datatype (hier varchar) (entspricht dump-Ausgabe) avl – Länge; value – Länge Details über Note 39817.1 (Metalink) Scl und pre = scale und precision ===================== PARSING IN CURSOR #7 len=58 dep=1 uid=58 oct=3 lid=58 tim=535121950 hv=1332351685 ad='1fcb0338' SELECT COUNT(*) FROM DBA_TABLES WHERE TABLE_NAME LIKE :B1 END OF STMT ... BINDS #7: kkscoacd Bind#0 oacdty=01 mxl=32(30) mxlc=00 mal=00 scl=00 pre=00 oacflg=13 fl2=206001 frm=01 csi=178 siz=32 off=0 kxsbbbfp=0762442c bln=32 avl=04 flg=09 value="DBA%" ©Database Consult GmbH - Jachenau 09/2006 Performanceanalyse und Tuning von Oracle 10g Release 2 • • • • • Folie 121 von xx Tracing – Rawtrace – im Kontext von DB-Calls (erscheinen vor diesen hier grün) – zwischen DB-Calls (erscheinen separat hier blau) • nam – Names des Events • ela – elapsed time • die letzten 3 entsprechen p1, p2, p3 von v$session_wait EXEC #7:c=156250,e=153309,p=0,cr=2,cu=0,mis=1,r=0,dep=1,og=1,tim=535275386 WAIT #7: nam='db file sequential read' ela= 11988 file#=1 block#=10859 blocks=1 obj#=3 tim=535338348 FETCH #7:c=109375,e=123525,p=1,cr=2797,cu=0,mis=0,r=1,dep=1,og=1,tim=535398965 EXEC #10:c=265625,e=277739,p=1,cr=2799,cu=0,mis=0,r=1,dep=0,og=1,tim=535399206 WAIT #10: nam='SQL*Net message to client' ela= 6 driver id=1111838976 #bytes=1 p3=0 obj#=3 tim=535399302 WAIT #10: nam='SQL*Net message from client' ela= 459 driver id=1111838976 #bytes=1 p3=0 obj#=3 tim=535399827 09/2006 ©Database Consult GmbH - Jachenau Performanceanalyse und Tuning von Oracle 10g Release 2 • Wait Events Folie 122 von xx Tracing - Rawtrace STAT #7 id=1 cnt=1 pid=0 pos=1 obj=0 op='SORT AGGREGATE (cr=5248 pr=0 pw=0 time=407489 us)' STAT #7 id=2 cnt=50337 pid=1 pos=1 obj=2371 op='VIEW DBA_OBJECTS (cr=5248 pr=0 pw=0 time=1562536 us)' STAT #7 id=3 cnt=50337 pid=2 pos=1 obj=0 op='UNION-ALL (cr=5248 pr=0 pw=0 time=1159833 us)' STAT #7 id=4 cnt=50337 pid=3 pos=1 obj=0 op='FILTER (cr=5247 pr=0 pw=0 time=505435 us)' STAT #7 id=5 cnt=51503 pid=4 pos=1 obj=0 op='HASH JOIN (cr=625 pr=0 pw=0 time=980596 us)' 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Performanceanalyse und Tuning von Oracle 10g Release 2 • STAT kennzeichnet Rowsources (Ausführungspläne) – ähnlich plan_table • id – identifier; cnt – rowcount ; pid – parent id • obj – object id; op – operation, time – Zeit in Mikrosekunden • cr – consisent reads; pr – physical reads; pw – physical writes Folie 123 von xx 39 Tracing - Rawtrace PARSING IN CURSOR #1 len=46 dep=1 uid=0 oct=3 lid=0 tim=3282021354 hv=1343089354 ad='2aac0994' select node,owner,name from syn$ where obj#=:1 END OF STMT PARSE #1:c=0,e=46,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=4,tim=3282021346 PARSING IN CURSOR #1 len=179 dep=1 uid=0 oct=3 lid=0 tim=3282058960 hv=2812844157 ad='2aaf9d38' select owner#,..... from dependency$ d, obj$ o where d_obj#=:1 and p_obj#=obj#(+) order by order# END OF STMT ... ===================== PARSING IN CURSOR #7 len=32 dep=0 uid=58 oct=3 lid=58 tim=3282347867 hv=2935929963 ad='1fcc1024' select count(*) from dba_objects END OF STMT PARSE #7: c=328125,e=327028,p=0,cr=97,cu=0,mis=1,r=0,dep=0,og=1,tim=3282347858 ©Database Consult GmbH - Jachenau 09/2006 Performanceanalyse und Tuning von Oracle 10g Release 2 • Rekursive Calls erscheinen vor ihren Parents • Parents enthalten in elapsed time die Zeiten ihrer Kinder Folie 124 von xx Tracing - Rawtrace Performanceanalyse und Tuning von Oracle 10g Release 2 5 dep=0 2 3 4 dep=1 dep=1 dep=1 1 dep=2 09/2006 ©Database Consult GmbH - Jachenau Folie 125 von xx TKPROF 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Performanceanalyse und Tuning von Oracle 10g Release 2 C:\oracle\admin\ora102\udump>tkprof Usage: tkprof tracefile outputfile [explain= ] [table= ] [print= ] [insert= ] [sys= ] [sort= ] table=schema.tablename Use 'schema.tablename' with 'explain=' option. explain=user/password Connect to ORACLE and issue EXPLAIN PLAN. print=integer List only the first 'integer' SQL statements. aggregate=yes|no insert=filename List SQL statements and data inside INSERT statements. sys=no TKPROF does not list SQL statements run as user SYS. record=filename Record non-recursive statements found in the trace file. waits=yes|no Record summary for any wait events found in the trace file. sort=option Set of zero or more of the following sort options: prscnt number of times parse was called prscpu cpu time parsing Folie 126 von xx 40 TKPROF Output – – – – count cpu elapsed disk query current rows Summaries read consistency kein Schema-Trap mehr! Recursion-Trap Time Trap (locking) ©Database Consult GmbH - Jachenau 09/2006 Performanceanalyse und Tuning von Oracle 10g Release 2 • Zeiten nur bei timed_statistics = true • „Traps“ beachten Folie 127 von xx TKPROF call count ------- -----Parse 1 Execute 1 Fetch 4 ------- -----total 6 cpu elapsed disk query current -------- ---------- ---------- ---------- ---------0.06 0.06 0 2 0 0.02 0.01 0 0 0 0.05 0.04 0 7 0 -------- ---------- ---------- ---------- ---------0.13 0.12 0 9 0 rows ---------0 0 45 ---------45 Misses in library cache during parse: 1 Optimizer goal: CHOOSE Parsing user id: SYS Rows ------45 Row Source Operation --------------------------------------------------TABLE ACCESS FULL EMPLOYEES (cr=7 r=0 w=0 time=672 us) Performanceanalyse und Tuning von Oracle 10g Release 2 *************************************************************************** select * from hr.employees where department_id = 50 Elapsed times include waiting on following events: Event waited on Times Max. Wait Total Waited ---------------------------------------Waited ---------- -----------SQL*Net message to client 4 0.00 0.00 SQL*Net message from client 4 20.91 20.93 ******************************************************************************** 09/2006 ©Database Consult GmbH - Jachenau Folie 128 von xx Nachteile TKPROF Performanceanalyse und Tuning von Oracle 10g Release 2 • Eingeschränkte Übersicht der Wait Events • Keine Unterscheidung der Calls in User/recursive und Internal/recursive • Zeigt keine aktuellen Werte von Bindevariablen! 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 129 von xx 41 Trace-Analyzer – RDBMS > 8.1.6 • Über Metalink: TRCA.zip • Erweiterte Funktionalität und Reports – auch für 8i funktionabel • Arbeitet über Hilfstabellen und PL/SQL-Prozeduren – Zugriff auf Trace mittels DIRECTORY ©Database Consult GmbH - Jachenau 09/2006 Performanceanalyse und Tuning von Oracle 10g Release 2 • Skriptsammlung zur formatierten Ausgaben von 10046er Traces Folie 130 von xx Trace-Analyzer – Nötige Grants erteilen (über SYS) – Hilfstabellen (22) und Package (1) anlegen (unter user) – Analyse starten: • START TRCANLZR.sql UDUMP prod_ora_9105.trc; • Wenn keine rekrusiven Statements, dann vorher TRCAISYS.sql NO; 09/2006 ©Database Consult GmbH - Jachenau Performanceanalyse und Tuning von Oracle 10g Release 2 • Fokus: analysierender Benutzer (Generator von 10046)! • Arbeitsweise: Folie 131 von xx Trace-Analyzer (Report) TOP SQL (SUMMARY OF CPU, ELAPSED AND WAITS PER TOP EXPENSIVE CURSOR) GAPS OF NO TRACE ACTIVITY SUMMARY OF CALLS BY USER (INTERNAL LAST) AND NON-RECURSIVE/RECURSIVE SUMMARY OF CALLS BY COMMAND TYPE, USER (INTERNAL LAST) AND NONRECURSIVE/RECURSIVE SUMMARY OF WAITS BY USER (INTERNAL LAST) AND NON-RECURSIVE/RECURSIVE DETAIL OF NON-IDLE WAITS BY USER (INTERNAL LAST) AND NON-RECURSIVE/RECURSIVE HOTTEST 5 BLOCKS (MOST TIMES WAITED FOR) SUMMARY BY SQL STATEMENT (CURSOR) Performanceanalyse und Tuning von Oracle 10g Release 2 Introduction... *** Vorstellung der einzelnen Cursor mit Bindevariablen etc. 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 132 von xx 42 Trace-Analyzer 09/2006 ©Database Consult GmbH - Jachenau Performanceanalyse und Tuning von Oracle 10g Release 2 ******************************************************************************************** TRCANLZR.sql 115.9 NOTE:224270.1 2003-02-06 15:42:01 ******************************************************************************************** TRACE_DIRECTORY..........: /amer/oracle/visus86/visus86ora/8.1.7/admin/visus86/udump (ALIAS:UDUMP) TRACE_FILENAME...........: visus86_ora_17714.trc (TRACE_ID:31) INSTANCE_AND_RELEASE.... : VISUS86 (ON TDASOL3) 8.1.7.3.0 (SUNOS - PRODUCTION) TRACE_SIZE...............: 1332588 BYTES (IN 25314 LINES) TRACED_INTERVAL..........: STARTED ON 2003-02-04 11:03:13.545, AND LASTED 11.99 SECS USER_ELAPSED_TIME........: 11.99 SECS GAPS_WITH_NO_ACTIVITY....: 0.00 EFFECTIVE_TRACED_INTERVAL: 11.99 ACCOUNTED_CPU_TIME.......: 6.68 SECS (TOTAL SERVICE TIME) ACCOUNTED_ELAPSED_TIME...: 20.17 (RECURSIVE AND NON-RECURSIVE) WAITED_NON-IDLE_TIME.....: 7.72 SECS WAITED_IDLE_TIME.........: 0.90 ******************************************************************************************** Folie 133 von xx Trace Analyzer 09/2006 ©Database Consult GmbH - Jachenau Performanceanalyse und Tuning von Oracle 10g Release 2 NUMBER_OF_CURSORS........: 231 (USER), 172 (INTERNAL <SYS>), 403 (TOTAL) UNIQUE_SQL...............: 136 (USER), 44 (INTERNAL <SYS>), 180 (TOTAL) *************************************************************************************** TOP SQL (SUMMARY OF CPU, ELAPSED AND WAITS PER TOP EXPENSIVE CURSOR) ==================================================================== cursor user non-idle idle id id command type count cpu top elapsed top waits top waits top ------ ---- ----------------------- ------ ----- --- ------- --- ----- --- ----- --98.... 65.. pl/sql execute......... 2 0.71 1 2.21 2 0.00 0.00 99.... 65.. insert................. 2 0.69 2 2.19 3 1.81 2 0.00 18.... 65.. pl/sql execute......... 4 0.61 3 1.93 4 0.00 0.00 137... 0... insert................. 375 0.53 4 0.71 5 0.02 0.00 113... 65.. select................. 3 0.40 5 3.00 1 2.11 1 0.01 115... 65.. select................. 125 0.05 0.36 0.31 3 0.00 5..... 0... select................. 15 0.01 0.22 0.22 4 0.00 29.... 0... select................. 266 0.05 0.27 0.21 5 0.10 2 34.... 65.. select................. 3 0.24 0.38 0.00 0.11 1 130... 65.. select................. 63 0.01 0.01 0.00 0.05 3 133... 65.. select................. 17 0.06 0.24 0.20 0.05 4 12.... 65.. pl/sql execute......... 74 0.21 0.23 0.00 0.04 5 *************************************************************************************** Folie 134 von xx Trace-Analyzer • Sehr nützlich: Wait Events werden nach User und Segment individuell gruppiert! 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Performanceanalyse und Tuning von Oracle 10g Release 2 Details for wait event Times Count Max. Total Blocks 'db file scattered read (multiblock full scan)' Waited Zero Time Wait Waited Accessed --------------------------------------------------- ------ --------- ---- ------ -------bom.bom_calendar_dates............................. 26 8 0.02 0.19 178 mrp.mrp_schedule_dates_n1.......................... 2 0 0.04 0.06 21 mrp.mrp_load_parameters............................ 2 0 0.02 0.03 6 --------------------------------------------------- ------ --------- ---- ------ -------total.............................................. 30 8 0.04 0.28 205 Folie 135 von xx 43 Performanceanalyse und Tuning von Oracle 10g Release 2 Teil 4: Cost based Optimizer ©Database Consult GmbH - Jachenau 09/2006 Folie 144 von xx Performanceanalyse und Tuning von Oracle 10g Release 2 Teil 4: Cost based Optimizer Arbeitsweise des CBO ©Database Consult GmbH - Jachenau 09/2006 Folie 145 von xx Übersicht – veränderte Defaults (OPTMIZER_MODE = ALL_ROWS) – explizites Setzen möglich – Algorithmen mit altem Stand (V6/V7) • dadurch gleichbleibende Zugriffspläne • CBO unter 10g R1 und R2 – erweitertes Kostenmodell: CPU- und IO-Kosten, dynamic sampling per default – erweiterte Query Transformationen – weiter entwickelte Berechnungsmodelle – verbesserte Plan_Table Performanceanalyse und Tuning von Oracle 10g Release 2 • Ab 10g keine offizielle Unterstützung des Rule base Optimizer (RBO) • CBO-Krux: – Weiterentwicklungen in den Rechenmodellen und Defaults können Überraschungen bei Zugriffsplänen verursachen („Instabilität“) 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 146 von xx 44 Übersicht Performanceanalyse und Tuning von Oracle 10g Release 2 CBO arbeitet i.d.R. zufriedenstellend wenn er korrekt konfiguriert wurde! Gute Kenntnis der Grundlagen (init.ora und Statistiken) garantieren Verlässlichkeit! ©Database Consult GmbH - Jachenau 09/2006 Folie 147 von xx Einflussfaktoren CBO Performanceanalyse und Tuning von Oracle 10g Release 2 Statistiken io CPU Indexstrukturen Systemparameter CBO Constraints Interne Algorithmen Hints SQLKonstrukte 09/2006 ©Database Consult GmbH - Jachenau Folie 148 von xx Serverparameter CBO Diverse CURSOR_SHARING SKIP_UNUSABLE_INDEXES DB_FILE_MULTIBLOCK_READ_COUNT parallel processing underscore-Parameters Memory WORKAREA_SIZE_POLICY PGA_AGGREGATE_TARGET HASH_AREA_SIZE SORT_AREA_SIZE BITMAP_MERGE_AREA_SIZE Query transformation QUERY_REWRITE_ENABLED QUERY_REWRITE_INTEGRITY STAR_TRANSFORMATION_ENABLED OPTIMIZER_SECURE_VIEW_MERGING 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Performanceanalyse und Tuning von Oracle 10g Release 2 Grundlegend OPTIMIZER_MODE OPTIMIZER_FEATURES_ENABLE OPTIMIZER_DYNAMIC_SAMPLING OPTIMIZER_INDEX_COST_ADJ OPTIMIZER_INDEX_CACHING DB_FILE_MULTIBLOCK_READ_COUNT Folie 149 von xx 45 Grundeinstellungen / Migration – Systeme und Anwendungen haben unterschiedliche Anforderungen – Kaum universelle Parametervorgaben möglich • Weiteres Vorgehen – – – – – – Grundlegende Parameter einstellen Systemstatistiken generieren Objektstatistiken generieren (table, column, index) Workarea Policy einstellen (sort areas, hash areas) bei globaler Schieflage weitere Serverparameter anpassen bei einzelnen Ausreissern diese individuell optimieren Performanceanalyse und Tuning von Oracle 10g Release 2 • Keine Prognosen ohne Tests! • Migration – in harnäckigen Fällen plan stability einsetzen ©Database Consult GmbH - Jachenau 09/2006 Folie 150 von xx Plan Stability für Migration Performanceanalyse und Tuning von Oracle 10g Release 2 GRANT CREATE ANY OUTLINE TO <appuser> / ALTER SESSION SET CREATE_STORED_OUTLINES = rbolike / -- SQL auführen ALTER SESSION SET CREATE_STORED_OUTLINES = FALSE / -- Statistiken und OPTIMIZER_MODE einstellen ALTER SESSION SET USE_STORED_OUTLINES = rbolike / ©Database Consult GmbH - Jachenau 09/2006 Folie 151 von xx Statistiken Performanceanalyse und Tuning von Oracle 10g Release 2 • CBO relevante Statistiken – Objektstatistiken (Table, Index) – Systemstatistiken (CPU, IO) – Sonderfälle • Data Dictionary • Fixed Tables • CBO Statistiken – Schnittstelle DBMS_STATS (nicht mehr ANALYZE) – generieren, setzen, exportieren, importieren, löschen, einfrieren – ab 10g Statistik Historien • Segment Statistics – kein Einfluss auf CBO Entscheidungen – Bestandteil des AWR 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 152 von xx 46 Vorteile DBMS_STATS Globale Statistiken für partitionierte Objekte sammelt auch für externe Tabellen und V$-Tabellen kann parallelisiert werden keine schlagartige Invalidierung der abhängigen Cursor Analyze generiert zusätzlich, jedoch ohne Relevanz für CBO (Ausnahmen CHAIN_CNT) – – – – – EMPTY_BLOCKS CHAIN_CNT AVG_SPACE AVG_SPACE_FREELIST_BLOCKS NUM_FREELIST_BLOCKS ©Database Consult GmbH - Jachenau 09/2006 Performanceanalyse und Tuning von Oracle 10g Release 2 • • • • • Folie 153 von xx Systemstatistiken – erstellt nach Defaults bei erstem Intanzstart – wertlos – ioseektim = 10ms iotrfspeed = 4096 bytes/ms cpuspeednw = gathered value, varies based on system – erzeugt durch dbms_stats.gather_system_stats() • Workload – errechnet Werte durch Messung (start-stop) über längeren Zeitraum – empfehlenswert, da genauer – sehr wichtig für CBO ©Database Consult GmbH - Jachenau 09/2006 Performanceanalyse und Tuning von Oracle 10g Release 2 • Noworkload Folie 154 von xx Systemstatistiken – Siehe PLAN_TABLE und v$sql_plan – Betreffende Spalten sind sonst NULL • Analyse über eine vorgegebene Zeitspanne während charakteristischer Last • Aktivitäten: Sammeln, Export, Import, Setzen 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Performanceanalyse und Tuning von Oracle 10g Release 2 • Sammlung von Statistiken für System-IO und CPU Charakteristik • Notwendig zur (korrekten) Ermittlung von CPU_COST und IO_COST Folie 155 von xx 47 Systemstatistiken END; -- laufende Kontrolle STATID C1 --------- ------------SYSTEM_01 AUTOGATHERING ... SYSTEM_01 COMPLETED C2 C3 ---------------- ---------------08-09-2003 16:29 08-11-2001 16:29 08-09-2001 16:41 08-09-2001 16:43 Performanceanalyse und Tuning von Oracle 10g Release 2 BEGIN DBMS_STATS.GATHER_SYSTEM_STATS( gathering_mode => 'INTERVAL', interval => 2 , stattab => 'STAT_TABLE' , statown => 'DEVELOPER' , statid => 'SYSTEM_01'); -- oder dbms_stats.gather_system_stats(’start’) dbms_stats.gather_system_stats(’stop’) ©Database Consult GmbH - Jachenau 09/2006 Folie 156 von xx Systemstatistiken Performanceanalyse und Tuning von Oracle 10g Release 2 -- Löschen von Dictionary aux_stats$ BEGIN DBMS_STATS.DELETE_SYSTEM_STATS; END; -- Übertragen in Dictionary = aktivieren BEGIN DBMS_STATS.IMPORT_SYSTEM_STATS( stattab => 'STAT_TABLE', statid => 'SYSTEM_01', statown => 'DEVELOPER'); END; SELECT * FROM sys.aux_stats$; ©Database Consult GmbH - Jachenau 09/2006 Folie 157 von xx Systemstatistiken 09/2006 STATUS DSTART DSTOP FLAGS CPUSPEEDNW IOSEEKTIM IOTFRSPEED SREADTIM MREADTIM CPUSPEED MBRC MAXTHR SLAVETHR Performanceanalyse und Tuning von Oracle 10g Release 2 SYSSTATS_INFO SYSSTATS_INFO SYSSTATS_INFO SYSSTATS_INFO SYSSTATS_MAIN SYSSTATS_MAIN SYSSTATS_MAIN SYSSTATS_MAIN SYSSTATS_MAIN SYSSTATS_MAIN SYSSTATS_MAIN SYSSTATS_MAIN SYSSTATS_MAIN COMPLETED 08-01-2006 12:50 08-01-2006 12:50 1 1007,07785642063 10 4096 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 158 von xx 48 Systemstatistiken • PLAN_TABLE.CPU_COST: benötigte Maschinen-Zyklen • PLAN_TABLE.IO_COST: gelesene Datenblöcke ©Database Consult GmbH - Jachenau 09/2006 Performanceanalyse und Tuning von Oracle 10g Release 2 sreadtim : wait time to read single block, in milliseconds mreadtim : wait time to read a multiblock, in milliseconds cpuspeed : cycles per second, in millions mbrc : mulitblock read count (average) maxthr:maximum I/O system throughput, in bytes/sec Slavethr:average slave I/O throughput, in bytes/sec Folie 159 von xx DBMS_STATS ©Database Consult GmbH - Jachenau 09/2006 Performanceanalyse und Tuning von Oracle 10g Release 2 • dbms_stats.gather_fixed_table_stats • dbms_stats.gather_dictionary_table_stats • dbms_stats.restore_table_stats( null,'sales',systimestamp - interval '1' day); • dbms_stats.convert_raw_value • LOCK_TABLE_STATS, LOCK_SCHEMA_STATS, UNLOCK_TABLE_STATS, UNLOCK_SCHEMA_STATS Folie 160 von xx Statistics History Performanceanalyse und Tuning von Oracle 10g Release 2 • Statistiken werden per default automatisch historisiert • APIs über DBMS_STATS – – – – 09/2006 GET_STATS_HISTORY_RETENTION GET_STATS_HISTORY_AVAILABILITY PURGE_STATS ALTER_STATS_HISTORY_RETENTION ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 161 von xx 49 Column Usage Monitoring Performanceanalyse und Tuning von Oracle 10g Release 2 • • • • • • • • • • Keep track of columns that have been used in different predicate types – Equality – Range – Equi-join – Non Equi-join – LIKE – IS [NOT] NULL siehe Dict unter col_usage$ und mon_mods$ _col_tracking_level ©Database Consult GmbH - Jachenau 09/2006 Folie 162 von xx Index Performanceanalyse und Tuning von Oracle 10g Release 2 • Index Creation & Rebuild – automatische Erstellung von Statistiken bei • CREATE INDEX • ALTER INDEX REBUILD • Bei function based dann Statistiken für “virtuelle Spalte • Ovewrhead zu vernachlässigen ©Database Consult GmbH - Jachenau 09/2006 Folie 163 von xx Views 09/2006 Performanceanalyse und Tuning von Oracle 10g Release 2 • • • • • • DBA_TAB_STATISTICS DBA_IND_STATISTICS DBA_TAB_STATS_HISTORY DBA_TAB_COL_STATISTICS dba_part_col_statistics dba_subpart_col_statistics ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 164 von xx 50 Regeln zum Sammeln von Statistiken ©Database Consult GmbH - Jachenau 09/2006 Performanceanalyse und Tuning von Oracle 10g Release 2 • DBMS_STATS • Tabellen mit Sample Size (wenige Prozent) DBMS_STATS korrigiert nach oben) Partitions mit global stats, grosse Tabellen parallel • Indizes mit Compute Zeit testen • Beí Cascade ggf. automatisch 100% für Indizes (testen) • Gather Stale zur Optimierung falls statistics_level= typical • Histogramme für Spalten in Where-Klauseln size Skewonly schaut in col_usage$ • Achtung vor „temporären“ Tabellen – ggf. locken • ggf. Hilfstabelle und Wrapper-Prozedur zur Individuellen Konfiguration Folie 165 von xx Literatur Performanceanalyse und Tuning von Oracle 10g Release 2 James Morle – Scaling Oracle 8i Cary Millsap with Jeff Hold – Optimizing Oracle Performance R.Shee, K. Deshpande, K. Gopalakrishnan – Oracle Wait Interface Jonathan Lewis – Cost based Oracle Diverse Metalink-Artikel 09/2006 ©Database Consult GmbH - Jachenau Copyright Database Consult GmbH Folie 225 von xx 51