• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
X$Tabellen und SgaScanner, DOAG 2009
 

X$Tabellen und SgaScanner, DOAG 2009

on

  • 935 views

Eine Einführung in den Aufbau einer Oracle SGA, den X$Tabellen und der Architektur von SGAScannern .

Eine Einführung in den Aufbau einer Oracle SGA, den X$Tabellen und der Architektur von SGAScannern .

Statistics

Views

Total Views
935
Views on SlideShare
933
Embed Views
2

Actions

Likes
0
Downloads
0
Comments
0

2 Embeds 2

http://www.slideshare.net 1
https://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    X$Tabellen und SgaScanner, DOAG 2009 X$Tabellen und SgaScanner, DOAG 2009 Presentation Transcript

    • DOAG 2009 X$Tabellen und SGA-Scanner Dipl.-Inform. Frank Beutelschiess 19.11.2009 DOAG 2009 Seite
    • Übersicht
      • Kapitel 1 – Vorstellung
      • Kapitel 2 – SGA
      • Kapitel 3 – X$Tabellen
      • Kapitel 4 – V$Views
      • Kapitel 5 – SGA-Scanner
      19.11.2009 DOAG 2009 Seite
    • Kapitel 1
      • Kapitel 1 – Vorstellung
      • Kapitel 2 – SGA
      • Kapitel 3 – X$Tabellen
      • Kapitel 4 – V$Views
      • Kapitel 5 – SGA-Scanner
      19.11.2009 DOAG 2009 Seite
    • Wer bin ich?
      • Dipl.-Informatiker aus Leidenschaft
      • 17 Jahre freiberuflich tätig
      • 10 Jahre im Bereich Siebel und OracleDB
      • Seit 2 Jahren BzYxS.com
      19.11.2009 DOAG 2009 Seite
    • Was macht BzYxS.com?
      • Schulungen & Consulting
        • u.a. für die Oracle University
      • Siebelumfeld
        • Konfigurationsreviews
        • Komponententuning
      • Oracle Datenbankumfeld
        • Tuning, bevorzugt unter Verwendung der Tracefileanalyse mit QueryAdvisor
      19.11.2009 DOAG 2009 Seite
    • Kapitel 2
      • Kapitel 1 – Vorstellung
      • Kapitel 2 – SGA
      • Kapitel 3 – X$Tabellen
      • Kapitel 4 – V$Views
      • Kapitel 5 – SGA-Scanner
      19.11.2009 DOAG 2009 Seite
    • SGA – Was ist das?
      • Abkürzung für „Shared Global Area“
      • Ein zwischen allen Prozessen (Unix) oder Threads (Windows) geteilter Speicher.
      • Während des Startens einer Instanz im Zustand NoMount angelegt.
      • Je nach Release und OS teilweise (Unix) oder komplett (Windows) angelegt.
      • Instanz = Prozesse (Threads) + SGA
      19.11.2009 DOAG 2009 Seite
    • SGA - Umfeld SGA 19.11.2009 DOAG 2009 Seite Redo Buffer Large Pool Dedicated Server Prozess Shared Server Prozess CKPT Daten RedoLog Archive Control ARCn LGWR SMON PMON BufferCache Streams Pool Java Pool Shared Pool PGA PGA Dispatcher User User User User Dedicated Server Shared Server DBWn Instanz Datenbank Fixed Area
    • SGA - Bereiche
      • Buffer Pool
        • Default/Keep/Recycle, n-Size (n = 2,4,8,16,32KB)
      • Shared Pool
        • Library Cache
          • Shared SQL-Bereiche & Private SQL-Bereiche (nur bei shared Server)
          • PL/SQL Prozeduren
          • Library Cache Handles
        • Dictionary Cache
        • Kontrollstrukturen (Latches & Enques)
      • Redo Buffer
      • Large Pool
      • Java & Streams Pool
      19.11.2009 DOAG 2009 Seite
    • SGA – Fixed Area
      • Part of the SGA contains general information about the state of the database and the instance, which the background processes need to access. No user data is stored here.
      • http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/memory.htm
      • Oracle also maintains a "fixed" area in the SGA that contains a number of atomic variables, pointers, and other miscellaneous structures that reference areas of the SGA. http://www.dba-oracle.com/oracle_tips_sga_regions.htm
      19.11.2009 DOAG 2009 Seite
    • SGA - Dedicated/Shared Server
      • Dedicated/Shared
      • UGA (User Global Area) PGA/SGA
      • Request/Response Queues PGA/SGA
      • Laufzeitbereich Select PGA
      • Laufzeitbereich DMLs/DDLs PGA
      19.11.2009 DOAG 2009 Seite
    • SGA - Statische Strukturen
      • Statisch während des Starts einer Instanz angelegt (V$SGA mit Name = ‘Fixed Size‘))
        • Session Array
        • Process Array
      • Speicherbedarf wird beim Hochfahren der Instanz berechnet und sofort vollständig allokiert.
      • Eine Veränderung kann erst nach einem Durchstarten gültig werden.
      19.11.2009 DOAG 2009 Seite
    • SGA - Dynamische Strukturen
      • Dynamisch, d.h zur Laufzeit als Heap angelegt (V$SGA_DYNAMIC_COMPONENTS)
        • Buffer Cache
        • Shared Pool (Library Cache, Dictionary Cache)
        • Large Pool
      19.11.2009 DOAG 2009 Seite
    • SGA - Parameter
      • Art eines Parameters (statisch oder dynamisch) wird z.B. im Enterprise Manager angezeigt.
      19.11.2009 DOAG 2009 Seite
    • SGA - Speicherallokierung
      • SGA_MAX_SIZE legt die maximale Größe der SGA fest.
      • Je nach Release und OS schwanken die maximal möglichen Werte.
      • Allokierung erfolgt sofort vollständig oder in Teilen in Form einzelner Blöcke, welche Granule genannt werden.
      • Die Größe einer Granule liegt je nach Größe der SGA, Release und OS bei 4 oder 8, bzw. 16MB.
      19.11.2009 DOAG 2009 Seite
    • SGA - Granulenabfolge 19.11.2009 DOAG 2009 Seite Fixed Area Unused Buffer Cache Large Pool Java Pool Shared Pool Shared Pool Redo Buffer Zunehmende Speicheradresse Shared Pool Shared Pool Java Pool Streams Pool Shared Pool Shared Pool Large Pool Buffer Cache Buffer Cache Buffer Cache Buffer Cache Buffer Cache Buffer Cache Buffer Cache Buffer Cache Unused
    • Kapitel 3
      • Kapitel 1 – Vorstellung
      • Kapitel 2 – SGA
      • Kapitel 3 – X$Tabellen
      • Kapitel 4 – V$Views
      • Kapitel 5 – SGA-Scanner
      19.11.2009 DOAG 2009 Seite
    • X$Tabellen - Hinweis (1/2)
      • Alle Beispiele basieren auf Oracle 9.2 .0.5.0
      • Alle Beispiele basieren auf einer 32 Bit Windows XP Installation.
      • Warum diese historische Konfiguration?
      • Grundlegende Konzepte der Struktur einer SGA wie z.B. Granulen wurden erst in 9i eingeführt.
      19.11.2009 DOAG 2009 Seite
    • X$Tabellen - Hinweis (2/2)
      • X$Tabellen sind nicht offiziell von Oracle dokumentiert.
      • X$Tabellen können sich jederzeit, d.h. von Release zu Release, sowohl in ihrer Existenz als auch ihrer Struktur ändern.
      • Alles was hier im folgenden dargestellt wird, basiert nur begründeten Annahmen.
      • Deshalb bitte mit Verstand und Bedacht verwenden!
      19.11.2009 DOAG 2009 Seite
    • X$KSMGE (1/3)
      • Kernel/Service/Memory/Granule
      • GranType 4 = ‚JavaPool‘
      • GranType 5 = ‚BufferPool‘
      19.11.2009 DOAG 2009 Seite
    • X$KSMGE (2/3)
      • select 'X$KSMGE',
      • decode(grantype,0,'Free',2,'SharedPool',3,'LargePool',4,'JavaPool',
      • 5,'BufferPool',grantype) as Component,count(*),count(*)*4
      • from X$KSMGE group by GRANTYPE
      • union all
      • select 'X$KSMSD',KSMSDNAM,0,KSMSDVAL/(1024*1024)
      • from X$KSMSD
      • order by 1,2
      19.11.2009 DOAG 2009 Seite Hinweis: X$KSMSD (Kernel/Service/Memory/SizeDefinition) ~ V$SGA
    • X$KSMGE (3/3)
      • Database Buffers 24.00 MB
      • Variable Size 104.00 MB
        • Shared Pool 64.00 MB
        • Java Pool 32.00 MB
        • Large Pool 8.00 MB
      • Fixed Size 0.43 MB
      • Redo Buffers 0.64 MB
      • ------------------------------------------------
      • Gesamt 129.07 MB
      19.11.2009 DOAG 2009 Seite
    • X$Tabellen – Was ist das?
      • Das Fenster zur SGA.
      • Entspricht der erwähnten Fixed Area.
      • X$Tabellen entsprechen Strukturen der Programmiersprache C.
      • Diese Strukturen sind realisiert in Form einfacher atomarer Variablen, Pointer, Arrays, verketteter Listen,…
      19.11.2009 DOAG 2009 Seite
    • X$KSMMEM (1/4)
      • Mapped jedes Byte der SGA nach außen
      19.11.2009 DOAG 2009 Seite
    • X$KSMMEM (2/4)
      • Dump der ersten Bytes einer 32 Bit SGA
      • KSMMMVAL enthält jeweils 4 Bytes
      19.11.2009 DOAG 2009 Seite Achtung: Unter Unix kann es ohne eine Einschränkung im where-Teil Fehler geben!
    • X$KSMMEM (3/4)
      • Dump der ersten Bytes einer 32 Bit SGA
      • KSMMMVAL enthält jeweils 4 Bytes
      19.11.2009 DOAG 2009 Seite
    • X$KSMMEM (4/4)
      • Dump der ersten Bytes einer 32 Bit SGA
      • KSMMMVAL entspricht 4 Bytes
      19.11.2009 DOAG 2009 Seite
    • X$-Tabellen - Warum?
      • Just for fun.
      • Zugriff auf sonst nicht direkt verfügbare Daten, da nur ein Teil der Information über die V$Views zugänglich ist.
      19.11.2009 DOAG 2009 Seite
    • X$KSPPI & X$KSPPSV
      • Zugriff auf alle Parameter (incl. hidden)
      • X$KSPPI Kernel/Service/Parameter/ParameterInfo
      • X$KSPPSV Kernel/Service/Parameter/SystemValues
      • select * from X$KSPPI P,X$KSPPSV V
      • where P.INDX = V.INDX and P.INST_ID = V.INST_ID
      19.11.2009 DOAG 2009 Seite
    • X$KSPPI & X$KSPPSV
      • select
      • x.inst_id,y.ksppinm,
      • decode(y.ksppity,1,'Boolean',2,'String',3,'Integer',
      • 4,'ParameterFile',5,'Reserved',6,'BigInteger',y.ksppity),
      • x.ksppstvl,x.ksppstdf,
      • decode(bitand(y.ksppiflg/256,1),1,'TRUE','FALSE'), decode(bitand(y.ksppiflg/65536,3),
      • 1,'IMMEDIATE',2,'DEFERRED',3,'IMMEDIATE','FALSE'),
      • decode(bitand(x.ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE'), decode(bitand(x.ksppstvf,2),2,'TRUE','FALSE'),
      • y.ksppdesc
      • from
      • X$KSPPI y, X$KSPPSV x
      • where
      • x.indx = y.indx and x.inst_id = y.inst_id
      • order by 1,2
      19.11.2009 DOAG 2009 Seite
    • X$Tabellen - Zugriff
      • Rechte auf X$Tabellen können nicht einfach geGranted werden.
      • Schreibender Zugriff würde die Stabilität der Instanz gefährden!
      19.11.2009 DOAG 2009 Seite
    • X$Tabellen - Bezeichnung 19.11.2009 DOAG 2009 Seite Metalink Doc ID:  Note:22241.1 Subject: List of X$ Tables and how the names are derived
    • X$Tabellen - Forschungsbasis
      • X$KSMMEM - Speicherzugriff
      • X$KQFTA - Alle X$Tabellen
      • X$KQFDT - Abgeleitete Tabellen
      • X$KQFCO - Spaltendefinitionen
      19.11.2009 DOAG 2009 Seite
    • X$Tabellen - Offsetbestimmung
      • select c.kqfconam field_name,
      • c.kqfcooff offset,
      • c.kqfcosiz sz
      • from
      • x$kqfco c,
      • x$kqfta t
      • where
      • t.indx = c.kqfcotab and
      • t.kqftanam='X$KSUSECST'
      • order by
      • offset
      • X$KSUSECST = Kernel/Service/User/SessionStatusForEvents
      • Verwendung z.B. in V$SESSION
      19.11.2009 DOAG 2009 Seite
    • X$Tabellen - Struktur
      • Jede X$Tabelle besteht aus
        • physisch vorhandenen Spalten
        • virtuellen Spalten.
      • Immer vorhandene virtuelle Spalten
        • ADDR = physikalische Speicheradresse
        • INDX = Index innerhalb der Tabelle
      • Joins oft über INDX Spalte
      • Die Reihenfolge der Spalten ist nicht identisch mit dem Datenstrukturaufbau!
      19.11.2009 DOAG 2009 Seite
    • X$Tabellen – Contention (1/2)
      • X$KGLOB (KernelGenericLibraryObject)
      • FullScan bedeutet, daß alle Latches im LibraryCache durchwandert werden.
      19.11.2009 DOAG 2009 Seite
    • X$Tabellen – Contention (2/2)
      • X$Tabellen sind als LowLevel Structuren von Latches geschützt.
      • FullTable Scan kann LatchContention verursachen!
      • Besonders gefährdet ist X$KGLOB (siehe Metalink).
      • Zugriff über Indices erzwingen, bzw. je nach Flüchtigkeit der einzelnen X$Tabelle keine Statistiken erzeugen!
      19.11.2009 DOAG 2009 Seite
    • Kapitel 4
      • Kapitel 1 – Vorstellung
      • Kapitel 2 – SGA
      • Kapitel 3 – X$Tabellen
      • Kapitel 4 – V$Views
      • Kapitel 5 – SGA-Scanner
      19.11.2009 DOAG 2009 Seite
    • V$ Views
      • Basieren i.A. auf X$Tabellen, bzw. deren Verknüpfung.
      • Sind dokumentiert und auch versionsübergreifend weitgehendst stabil.
      • V$Views werden auf GV$Views durch Beschränkung auf die Instanz abgebildet.
      • Zugriffsbeschränkungen auf X$Tabellen werden durch ein zweistufiges Mapping über GV_$Views auf die eigentlichen GV$Views gelöst.
      19.11.2009 DOAG 2009 Seite
    • V$Views - Definition
      • X$KQFVI - V$ & GV$ Viewnamen
      • X$KQFVT - Dazugehörige Definitionen
      • V$FIXED_VIEW_DEFINITION
      • Script für das Mapping in CATALOG.SQL
        • create or replace view gv_$bh as select * from gv$bh;
        • create or replace public synonym gv$bh for gv_$bh;
        • grant select on gv_$bh to public;
      19.11.2009 DOAG 2009 Seite
    • Kapitel 5
      • Kapitel 1 – Vorstellung
      • Kapitel 2 – SGA
      • Kapitel 3 – X$Tabellen
      • Kapitel 4 – V$Views
      • Kapitel 5 – SGA-Scanner
      19.11.2009 DOAG 2009 Seite
    • SGA-Scanner – Was?
      • Direktes Auslesen der SGA auf Speicherebene unter Umgehung der Datenbankinstanz.
      • Eigenständiges Program auf dem jeweiligen Datenbankserver.
      • SGA Adresse etc. wird im Vorfeld über Datenbankabfragen ermittelt.
      19.11.2009 DOAG 2009 Seite
    • SGA-Scanner - Aufbau 19.11.2009 DOAG 2009 Seite
    • SGA-Scanner - Herausforderung
      • 32 Bit / 64 Bit entsprechend 4 / 8 Byte Arithmetik / Pointer
      • Adress Alignment (z.B. Word immer auf einer geraden Adresse beginnend)
      • Big (PowerPC) & Little Endian (X86)
        • Register: =0A0B0C0D=>
        • BigEndian: =0A0B0C0D=>
        • LittleEndian: =0D0C0B0A=>
      • Granulen & nichtlineare Speicherbereiche
      19.11.2009 DOAG 2009 Seite
    • SGA-Scanner - Windows
      • 1 Prozess, viele Tasks
      • 1 Speicherbereich
      19.11.2009 DOAG 2009 Seite
    • SGA-Scanner - Implementierung 19.11.2009 DOAG 2009 Seite <Psapi>.EnumProcesses(*pProcessIds,…) <Kernel32>.OpenProcess(0x410,…,dwProcessId) <Psapi>.GetModuleBaseName(hProcess,…,lpBaseName,…) <Kernel32>.CloseHandle(hObject) <Kernel32>.ReadProcessMemory(hProcess, lpBaseAddress,lpBuffer,…) Oracle.exe? Liste fertig? <Kernel32>.CloseHandle(hObject) Ja Ja Nein Nein Start Ende
    • SGA-Scanner - Warum?
      • Zugriff auch bei einer nicht mehr/schlecht erreichbaren Datenbank.
      • Keine Belastung der Instanz durch Contentions, da geshareder Speicher (reine CPU Last).
      • Hohe Samplinggeschwindigkeit (bis 1000x/Sekundeim Gegensatz zu max. 50x über V$Views).
      19.11.2009 DOAG 2009 Seite
    • SGA-Scanner – V$SESSION (1/9)
      • - Liste aller Sessions (analog zu V$SESSION)
      19.11.2009 DOAG 2009 Seite
    • SGA-Scanner – V$SESSION (2/9)
      • - Session 10 (SID 10) ist neu hinzugekommen
      19.11.2009 DOAG 2009 Seite
    • SGA-Scanner – V$SESSION (3/9)
      • - Session 11 (SID 12) ist neu hinzugekommen.
      19.11.2009 DOAG 2009 Seite
      • Vorbereitung der beiden Sessions, Autocommit ist ausgeschaltet!
      SGA-Scanner – V$SESSION (4/9) 19.11.2009 DOAG 2009 Seite
    • SGA-Scanner – V$SESSION (5/9)
      • - Zugriff auf die von der anderen Session gelockte Tabelle.
      19.11.2009 DOAG 2009 Seite
    • SGA-Scanner – V$SESSION (6/9)
      • - Session 11 (SID 12) wartet aufgrund eines Enqueues.
      19.11.2009 DOAG 2009 Seite
    • SGA-Scanner – V$SESSION (7/9)
      • - Lock wird durch einen manuellen Commit aufgehoben.
      19.11.2009 DOAG 2009 Seite
    • SGA-Scanner – V$SESSION (8/9)
      • Enqueue ist aufgelöst.
      19.11.2009 DOAG 2009 Seite
    • SGA-Scanner – V$SESSION (9/9) 19.11.2009 DOAG 2009 Seite
    • Danke für Ihre Aufmerksamkeit! 19.11.2009 DOAG 2009 Seite