Schnapp die Session Sessionhistorie mit Bordmitteln. DOAG Konferenz 2013 Jan Krüger TUI Infotec GmbH

Ähnliche Dokumente
Kostenlos aber effektiv: Performanceanalyse mit Statspack und SQL* Benedikt Nahlovsky. Performing Databases GmbH Mitterteich

SQL on RAC Pirates of the interconnect

Oracle AWR und ASH Analyse und Interpretation

DOAG Demo Kino: Advisors, Monitoring Werkzeuge in der Datenbank Ulrike Schwinn Business Unit Database Oracle Deutschland B.V.

SQL-Tuning auf RAC Piraten des Interconnects

Row Chaining & Row Migration Alte Bekannte - immer noch aktuell! DOAG 2014 Datenbank Dierk Lenz

Kostenlos aber effektiv: Performanceanalyse mit Statspack und SQL* Benedikt Nahlovsky. Performing Databases GmbH Mitterteich

Abfragen (Queries, Subqueries)

SQL Planmanagement. unter der Lupe. DOAG Konferenz 2012, Nürnberg Jan Krüger TUI Infotec GmbH, Hannover

SQL-Analyse und Tuning

Übung PL/SQL Trigger Lösungen

Performance in der Oracle Datenbank von Anfang an

Funktionen. Überblick über Stored Functions. Syntax zum Schreiben einer Funktion. Schreiben einer Funktion

Memory-Drilldown von der SGA über die PGA zum Database Buffer Advisor

ANALYSE UND VISUALISIERUNG VON STATSPACK UND AWR DATEN

Explain verstehen. Hans-Jürgen Schönig.

Technische Background Info und Trivadis Scripts

Skalierbarkeit von Oracle RAC

Datenbanken Labor, MI : Übung 1 SQL - Abfragen Patrick Lipinski

Performance Tuning mit Oracle 12c

DOAG Konferenz mal schneller Praxisgeschichten aus der Oracle-Datenbankwelt

Manuelles Oracle SQL Tuning

Order Ansicht Inhalt

Installation MySQL Replikationsserver

Flashback mal sieben. DOAG Konferenz , Nürnberg. Klaus Reimers

Die Datenbank ist langsam!

PostgreSQL Wartungsstrategien

Übersicht der wichtigsten MySQL-Befehle

Anwendungsentwicklung Datenbanken SQL. Stefan Goebel

Oracle 10g Einführung

Oracle 9i Einführung Performance Tuning

Oracle-Threads unter Win32-Systemen killen

Datenmanagement I SoSe 2006 Aufgabenblatt 4

ISU 1. Ue_08/02_Datenbanken/SQL. 08 Datenbanken. Übung. SQL Einführung. Eckbert Jankowski.

Datenbanksysteme I WS 18/19 Teillösung Übungsblatt 4-6

Oracle Database 12c Was Sie immer schon über Indexe wissen wollten

Isolationsstufen für Transaktionen. Dr. Karsten Tolle

Transaktionen in Praxis. Dr. Karsten Tolle Vorl

How-To-Do. OPC-Server with MPI and ISO over TCP/IP Communication. Content. How-To-Do OPC-Server with MPI- und ISO over TCP/IP Communication

SQL. DDL (Data Definition Language) Befehle und DML(Data Manipulation Language)

Vergessene (?) SQL- und PL/SQL- Funktionen

Warum wird mein Index nicht benutzt?

Die PostgreSQL Performance Schnelldiagnose

Oracle 9i Einführung Performance Tuning

Username and password privileges. Rechteverwaltung. Controlling User Access. Arten von Rechten Vergabe und Entzug von Rechten DBS1 2004

Die Datenmanipulationssprache SQL

Can I use an older device with a new GSD file? It is always the best to use the latest GSD file since this is downward compatible to older versions.

ANFRAGEOPTIMIERUNG IN POSTGRESQL

Querying Data with Transact-SQL MOC 20761

ORM & OLAP. Object-oriented Enterprise Application Programming Model for In-Memory Databases. Sebastian Oergel

Seminar 2. SQL - DML(Data Manipulation Language) und. DDL(Data Definition Language) Befehle.


Neuerungen in Marco Patzwahl MuniQSoft GmbH Unterhaching

VGM. VGM information. HAMBURG SÜD VGM WEB PORTAL - USER GUIDE June 2016

ACCESS SQL ACCESS SQL

Parallelisierung. Grundlagen und Nutzung. Stefan Seck Solution Engineer Inforsacom Logicalis GmbH. Düsseldorf,

Laden von Data Marts auch mal komplex DOAG BI, 9. Juni 2016 Dani Schnider, Trivadis AG

Transaktionen in Praxis. Dr. Karsten Tolle Vorl

Foglight Performance Analysis for Oracle

Performance für Oracle Anwendungen nicht nur für Oracle 11g

RMS-Tuning nach 4 Jahren

Nachtrag: Farben. Farbblindheit. (Light und Bartlein 2004)

Üben von DDL und DML. Ergebnis:

Schnellübersichten. SQL Grundlagen und Datenbankdesign

ANALYSE UND VISUALISIERUNG VON STATSPACK UND AWR DATEN

Lösungen der Übungsaufgaben von Kapitel 10

SQL Optimizer und SQL Performance

Vorstellung DIE QSC AG. Datum:

Im Geheimdienst Ihrer Majestät

TOOLGESTÜTZTE ORACLE PERFORMANCEANALYSE AUS CONSULTANT-SICHT

Andrea Held. Motivation ILM: Definition und Strategien Lösungen für Oracle Datenbanken. Empfehlungen

Housekeeping -2

Shaping the Future of Intelligence. PLATH Group 1

Übungsaufgaben mit Lösungen

VGM. VGM information. HAMBURG SÜD VGM WEB PORTAL USER GUIDE June 2016

5.8 Bibliotheken für PostgreSQL

Datenbankadministration

Extreme Performance mit Oracle Times Ten

IT-Symposium IT-Symposium

SQL - Datenbankdesign - Aufbau

Housekeeping -2

Magic Figures. We note that in the example magic square the numbers 1 9 are used. All three rows (columns) have equal sum, called the magic number.

Introduction to Data and Knowledge Engineering. 6. Übung SQL

Index Rebuild. DOAG Konferenz , Nürnberg. Martin Hoermann

Vorfahrtsregeln in APEX-Umgebungen: Ressourcen-Konflikte mit dem Ressourcen-Manager lösen

Datenbanken Implementierungstechniken SS2015

MySQL Replikation. Erkan Yanar linsenraum.de linsenraum.de

Kurs Oracle 9 i Einführung Performance Tuning Teil 5 Buffer Cache

SQL. Fortgeschrittene Konzepte Auszug

Präsentation mongodb. David Wild

Wiederholung VU Datenmodellierung

prorm Budget Planning promx GmbH Nordring Nuremberg

SQL als Zugriffssprache

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Query Result Caching. Optimierung des Datenbankzugriffs

Entwicklungsumgebung für die Laborübung

Historisierung und Versionierung

Transkript:

Schnapp die Session Sessionorie mit Bordmitteln DOAG Konferenz 2013 Jan Krüger TUI Infotec GmbH

TUI InfoTec. Unsere Unternehmensstruktur. 54,90% 43,33% 100% 100% More than a smile 100% 83,5% 50% TUI InfoTec Unternehmenspräsentation

TUI InfoTec. Unsere Geschichte. IT-Abteilung der TUI Best Practice Award für die beste Lösung im deutschsprachigen Raum TUI InfoTec bietet seine Dienstleistungen auch außerhalb des TUI Konzerns an bis 1997 1997 2002 2006 2007 2011 Ausgründung als TUI InfoTec GmbH Sonata wird mit 50.1% Anteilseigner von TUI InfoTec TUI Travel PLC übernimmt 100% der Anteile von TUI InfoTec TUI InfoTec Unternehmenspräsentation

Unsere Rechenzentren. Ihre Daten bleiben sicher in Deutschland. 2 Standorte in Hannover, 350 Mitarbeiter Service Management, Service Desk & Data Center A Enterprise Operation Center & Data Center B TUI InfoTec Unternehmenspräsentation

TUI InfoTec: Mittelständische Struktur. Erfahrung mit internationalen Konzernen. Wir erbringen Services für unternehmenskritische Anwendungen für große Unternehmen. Aber: Mittelständische Strukturbedeutet für uns und unsere Kunden kurze Entscheidungswege Anpassungsfähigkeit an kundenspezifische Anforderungen ausgeprägte Kundenorientierung direkter Zugang zu allen Managementebenen TUI InfoTec Unternehmenspräsentation

Unsere Vision. We integrate your business into the future - with a smile! Wir bewirken, dass unsere Kunden in dieser Welt ihr Business beherrschen und ausbauen können. Wir schaffen Lösungen für unsere Kunden, in dem wir die richtigen Menschen und passenden Technologien zusammenführen. Wir sind stolz, mit Leidenschaft und Kompetenz die Zukunftsfähigkeit unserer Kunden zu sichern. TUI InfoTec Unternehmenspräsentation

Schnapp die Session Was ist das Problem? Erster Versuch: Nicht sehr praktisch Zweiter Versuch: So geht s nicht Dritter Versuch: Stabile Lösung Anwendungsbeispiele aus der Praxis DOAG 2013 Jan Krüger TUI Infotec GmbH

Das Problem Flüchtige Diagnoseinformation Probleme treten sporadisch auf Spezialistin fehlt, wenn Problem auftritt Die besten Analyseideen kommen einem erst hinterher Statspack zu geringe zeitliche Auflösung und zu stark aggregiert Verschiedene Tools am Markt Diagnostic Pack Foglight Seite 8

Schnapp die Session Was ist das Problem? Erster Versuch: Nicht sehr praktisch Zweiter Versuch: So geht s nicht Dritter Versuch: Stabile Lösung Anwendungsbeispiele aus der Praxis DOAG 2013 Jan Krüger TUI Infotec GmbH

Erster Versuch Shellscript in Datei crontab gesteuerte Datensammlung * * * * */tui/ /scripts/memwatch.ksh NPMP 0 4 * * * find /tui/ /memwatch -mtime +15 -exec rm {} \\; cat memwatch.ksh DAY=`/bin/date '+%d'` echo `date` ++++++++++++ >> $DATADIR/pswatch.txt.$DAY /bin/ps -eo "user pid ppid pri nice vsz tty etime time args" >> $DATADIR/pswatch.txt.$DAY Seite 10

Erster Versuch Shellscript in Datei sqlplus -s "/ as sysdba" << EOFSQL >> $DATADIR/memwatch.txt.$DAY column terminal format a15 set linesize 460 pagesize 60 trimspool on SELECT (SELECT st.value FROM v\$sesstat st, v\$statname n WHERE st.statistic# = n.statistic# AND n.name = 'consistent gets' AND st.sid = s.sid) consgets, sid, s.serial#, s.username, STATUS, SERVER, SCHEMANAME, OSUSER, PROCESS, MACHINE, s.terminal, s.program, LOGON_TIME, TYPE, MODULE, ACTION, CLIENT_INFO, CLIENT_IDENTIFIER, event, s.sql_id, s.sql_child_number, s.prev_sql_id, s.prev_child_number, service_name, p.spid, p.pga_alloc_mem, p.pga_freeable_mem, p.pga_max_mem, p.pga_used_mem FROM v\$process p, v\$session s WHERE s.paddr = p.addr and TYPE!= 'BACKGROUND' order by consgets desc nulls last; EOFSQL Seite 11

Erster Versuch Shellscript in Datei echo `date` +++++++++++++++ >> $DATADIR/jobwatch.txt.$DAY sqlplus -s "/ as sysdba" << EOFSQL >> $DATADIR/jobwatch.txt.$DAY set linesize 120 pagesize 50 SELECT r.job, r.sid, s.program, j.what FROM (DBA_JOBS_RUNNING r INNER JOIN v\$session s ON r.sid = s.sid) LEFT OUTER JOIN DBA_JOBS j ON (r.job = j.job); EOFSQL Seite 12

Erster Versuch Nicht sehr praktisch in der Auswertung Seite 13

Schnapp die Session Was ist das Problem? Erster Versuch: Nicht sehr praktisch Zweiter Versuch: So geht s nicht Dritter Versuch: Stabile Lösung Anwendungsbeispiele aus der Praxis DOAG 2013 Jan Krüger TUI Infotec GmbH

Zweiter Versuch INSERT SELECT CREATE TABLE SESHIST AS SELECT SYSTIMESTAMP TS, s.* from gv$session s where 1=2; crontab einmal die Minute INSERT INTO SESHIST SELECT SYSTIMESTAMP, s.* FROM gv$session s; crontab einmal am Tag um 4 Uhr DELETE FROM SESHIST where ts < SYSTIMESTAMP INTERVAL 14 DAY; COMMIT; Weitere Tabellen: dba_jobs_running gv$process Seite 15

Zweiter Versuch INSERT SELECT Seite 16

Zweiter Versuch INSERT SELECT Seite 17

Zweiter Versuch Fragmentierung der Tabelle 1 2 3 4 5 6 2 3 4 5 6 6 7 3 4 5 6 6 7 8 9 5 6 9 10 7 8 9 10 10 7 8 9 10 11 6 9 9 10 12 8 9 10 11 12 9 12 10 12 9 10 11 12 9 12 Seite 18

Schnapp die Session Was ist das Problem? Erster Versuch: Nicht sehr praktisch Zweiter Versuch: So geht s nicht Dritter Versuch: Stabile Lösung Anwendungsbeispiele aus der Praxis DOAG 2013 Jan Krüger TUI Infotec GmbH

Dritter Versuch Partitioning mit Bordmitteln Am Montag: Am Dienstag: Am Montag kurz vor Mitternacht: INSERT INTO ses1 INSERT SELECT INTO ses1 SELECT truncate table ses2; snapid, s.* from gv$session snapid, s s.* from gv$session s DELETE from sessnaps INSERT INTO sessnaps where ts < systimestamp VALUES (snapid, day, ts); INTERVAL 8 DAY; ses 1 proc 1 job 1 ses 2 proc 2 job 2 ses 7 proc 7 job 7 ses snaps Seite 21

Dritter Versuch Partitioning mit Bordmitteln timestamp timestamp timestamp View ses UNION 1-7 View proc UNION 1-7 View job UNION 1-7 ses 1 proc 1 job 1 ses 2 proc 2 job 2 ses 7 proc 7 job 7 ses snaps Seite 22

Dritter Versuch Partitioning mit Bordmitteln timestamp timestamp timestamp Global temporary table myses Global temporary table myproc Global temporary table myjob timestamp timestamp timestamp View ses UNION ALL 1-7 View proc UNION ALL 1-7 View job UNION ALL 1-7 Seite 23

Sessionorie nutzen Arbeitskopie befüllen timestamp Global temporary table myses INSERT INTO myses SELECT * FROM ses WHERE ts BETWEEN TO_TIMESTAMP ('08.08.2013 14:25:00') AND TO_TIMESTAMP ('08.08.2013 15:10:00') ORDER BY ts; timestamp View ses UNION ALL 1-7 JOIN sessnaps ses 1 proc 1 job 1 ses 2 proc 2 job 2 ses 7 proc 7 job 7 ses snaps Seite 24

Schnapp die Session Was ist das Problem? Erster Versuch: Nicht sehr praktisch Zweiter Versuch: So geht s nicht Dritter Versuch: Stabile Lösung Anwendungsbeispiele aus der Praxis DOAG 2013 Jan Krüger TUI Infotec GmbH

Blocking Locks Kleine Ursache schnell Vorbei Seite 26

Blocking Locks auch kleinere Störungen Seite 27

Blocking Locks Vorgehen myses mit fraglichem Zeitraum befüllen PROGRAM, MODULE, ACTION, OSUSER SQL aus v$sql Generelle WAIT Event Analyse oder über event like %TX% (enq: TX - row lock contention) BLOCKING_INSTANCE BLOCKING_SESSION FINAL_BLOCKING_INSTANCE FINAL_BLOCKING_SESSION sql_id ermitteln ROW_WAIT_OBJ# ROW_WAIT_BLOCK# ROW_WAIT_ROW# OBJECT_ID in dba_objects select * from table where DBMS_ROWID.ROWID_ BLOCK_NUMBER(rowid) = DBMS_ROWID.ROWID_ RELATIVE_FNO(rowid)= Seite 28

IO Subsystem in Gefahr Direct Path Read Seite 29

IO Subsystem in Gefahr Direct Path Read Seite 30

IO Subsystem in Gefahr Direct Path Read Seite 31

Direct path read Full table scan Seite 32

Nach upgrade 11.2 bevorzugt Full table scan direct path Seite 33

IO Subsystem in Gefahr Vorgehen myses mit fraglichem Zeitraum befüllen Auf event= direct path read analysieren (ohne STATE= WAITING ) sql_id ermitteln PROGRAM, MODULE, ACTION, OSUSER aus ses ROW_WAIT_OBJ# aus ses OBJECT_ID in dba_objects SQL aus v$sql Seite 34

PGA Verbrauch Out of memory PGA Verbrauch durch PL/SQL nicht begrenzt In Out-of-Memory-Situationen killt der Kernel Prozesse Beweise werden so vernichtet Seite 35

PGA usage Vorgehen myses und myproc mit fraglichem Zeitraum befüllen sql_id ermitteln SELECT p.ts, p.inst_id, p.addr, p.pga_alloc_mem, p.pga_max_mem, s.* FROM myproc p LEFT OUTER JOIN myses s ON (s.paddr = p.addr AND s.inst_id = p.inst_id AND s.snapid = p.snapid) WHERE pga_alloc_mem > 1024 * 1024 * 1024 ORDER BY p.ts, p.inst_id, pga_alloc_mem DESC SQL aus v$sql PROGRAM, MODULE, ACTION, OSUSER aus ses Seite 36

Long running Statements über sql_exec_start myses mit fraglichem Zeitraum befüllen sql_id ermitteln SELECT ts - sql_exec_start, program, sql_id, sql_child_number, s.* FROM myses s WHERE status = 'ACTIVE' AND TYPE!= 'BACKGROUND' AND sql_exec_start IS NOT NULL ORDER BY ts, inst_id, ts - sql_exec_start DESC SQL aus v$sql PROGRAM, MODULE, ACTION, OSUSER aus ses Seite 37

Long running Statements über statistische Häufung myses mit fraglichem Zeitraum befüllen sql_id ermitteln SELECT ts, inst_id, COUNT (*), sql_id, sql_child_number FROM myses s WHERE status = 'ACTIVE' AND TYPE!= 'BACKGROUND' HAVING COUNT (*) > 5 GROUP BY sql_id, inst_id, ts, sql_child_number ORDER BY ts, inst_id, COUNT (*) DESC SQL aus v$sql PROGRAM, MODULE, ACTION, OSUSER aus ses Seite 38

Anwendungsbeispiel Einbruch in den Transaktionen RAC1 DOAG 2013 Jan Krüger TUI Infotec GmbH 18.11.2013 Page 39

Sessionorie Nutzen Worauf warten die Sessions SELECT ts, inst_id, event, COUNT (*) FROM myses WHERE status = 'ACTIVE' AND state = 'WAITING' AND TYPE!= 'BACKGROUND' HAVING COUNT (*) > 3 GROUP BY ts, inst_id, event ORDER BY ts, inst_id, COUNT (*) DESC; Seite 40

Sessionorie nutzen Was machen die wartenden SELECT * FROM myses WHERE status = 'ACTIVE' AND state = 'WAITING' AND TYPE!= 'BACKGROUND' AND event = 'latch: cache buffers chains' ORDER BY ts, inst_id Seite 41

Worauf warten die Sessions? TOP Event / TOP Objekt TS INST_ID EVENT COUNT(*) 08.08.2013 14:50:01, 1 latch: cache buffers chains 300 08.08.2013 14:50:01, 1 gc buffer busy acquire 253 08.08.2013 14:50:01, 1 TCP Socket (KGAS) 8 08.08.2013 14:50:01, 1 PX Deq: Table Q Normal 8 08.08.2013 14:50:01, 1 PL/SQL lock timer 7 08.08.2013 14:50:01, 1 gc cr request 6 08.08.2013 14:50:01, 1 db file sequential read 6 08.08.2013 14:50:01, 1 PX Deq: Execute Reply 4 Seite 42

Interconnect busy? Global Cache Fusion Seite 43

Consistent Changes im gleichen Zeitraum Seite 44

Consistent Changes nicht sehr gut instrumentiert Aus der Doku von v$sysstat, v$sesstat: consistent changes Number of times a user process has applied rollback entries to perform a consistent read on the block. Work loads that produce a great deal of consistent changes can consume a great deal of resources. The value of this statistic should be small in relation to the "consistent gets" statistic. Seite 45

Statspack liefert einen Verdächtigen TOP buffer get statements SQL ordered by Gets CPU Elapsd Old Buffer Gets Executions Gets per Exec %Total Time (s) Time (s) Hash Value --------------- ------------ -------------- ------ -------- --------- ---------- 48,318,176 16,319 2,960.9 2.4 318.70 651.94 1599842283 Module: RePriceRequest SELECT 'Y' FROM AR_AQT_CACHE AQ WHERE AQ.USER_DATA.TARGET_ID IN ( :B3, :B2 ) AND AQ.Q_NAME = :B1 AND NOT EXISTS (SELECT 1 FROM AQ$_AR_AQT_CACHE_H DQ WHERE DQ.MSGID = AQ.MSGID AND DQ.DEQUEUE_T IME IS NOT NULL ) Seite 46

Zeitreihenauswertung aus Statspack sql_id des fraglichen Statements SELECT snap_time, executions - LAG (executions) OVER (ORDER BY snap_id) execs, buffer_gets - LAG (buffer_gets) OVER (ORDER BY snap_id) bufgets, ROUND ( (buffer_gets - LAG (buffer_gets) OVER (ORDER BY snap_id)) / (executions - LAG (executions) OVER (ORDER BY snap_id))) getsperexec FROM perfstat.stats$sql_summary s JOIN perfstat.stats$snapshot USING (snap_id) WHERE sql_id IN ('du2nurwg75x8s') AND s.instance_number = 1 AND snap_id BETWEEN 115169 AND 115252 ORDER BY snap_id Seite 47

The missing link Ausführungen folgen dem Tagesverlauf Seite 48

The missing link Transaktionsprofil und SQL Ausführung Seite 49

The missing link Buffergets per second und cache fusion Seite 50

The missing link Mehr gets per exec durch consistent updates Seite 51

Fazit Sessionorie mit Bordmitteln Schnell installiert Resourcenschonend beim Datensammeln Stabil Abdeckung aller Lizenzversionen Liefert in der Praxis häufig Lösung oder zumindest wichtige Hinweise Seite 52

Vielen Dank für Ihre Aufmerksamkeit.