Benutzer-Werkzeuge

Webseiten-Werkzeuge


dba:awr_oracle

Das Oracle AWR Repository - Abfrage und Pflege

11g/12c

Das Oracle AWR Repository dient der Datenbank zum langfristigen Speichern der Datenbank Statistiken und ähnlicher Informationen.

Das Repository liegt dazu im Tablespace SYSAUX.

Die Verwendung, des für die Datenbank Funktion unbedingt notwendigen Repository, zum Nutzen des Kunden setzt die entsprechende EE Lizenz und wenigstens das Tuning Pack voraus! Alles andere ist illegal!

Begriff:

  • AWR - Automatic Workload Repository
  • ASH - Active Session History
    • current state of all active sessions
  • ADDM - Automatic Database Diagnostics Monitor

Der SYSAUX Tablespace

Inhalte des SYSAUX Tablespaces abfragen

Neben dem AWR liegen auch weitere Repositories in diesem Tablespace, wie viel Platz diese verbrauchen und wie die Daten verlegt werden können lässt sich über die View v$sysaux_occupants abfragen.

Größe des Repositories

Die Größe des Repository wird auf der einen Seite vom Detail Grad und der Anzahl der zu speichernden Snapshots bestimmt und von der Größe des verfügbaren Speicherplatzes im Tablespace.

Der SYSAUX Tablespace sollte auf seine gewünschte maximale Größe limitiert werden, um unnötiges Wachstum zu vermeiden, da später meist der Tablespace nicht mehr verkleinert werden kann.

Ein sinnvoller Wert liegt zwischen 2GB für Datenbank mit niedrigen Transaktionsvolumen und 8GB für Datenbank hohen Durchsatz und erweiterten Log Level.

Einstellungen

Über die View DBA_HIST_WR_CONTROL können die aktuellen Einstellungen kontrolliert werden.

col SNAP_INTERVAL format a25
col RETENTION format a25
 
SELECT DBID
      ,SNAP_INTERVAL
      ,RETENTION
      ,TOPNSQL 
 FROM DBA_HIST_WR_CONTROL
/

Die Einstellungen lassen sich anpassen:

SELECT dbid FROM v$database;
 
      DBID
----------
 278277283
 
BEGIN
  DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS( 
              retention => (60*24*30) -- 30 Tage
            , INTERVAL  => 30
            , topnsql   => 100
            , dbid => 278277283
   );
END;
/
  • Retention - Aufbewahrung Zeit in Minuten
  • Interval - Zeitraum zwischen zwei Snapshots
  • Topsql - Anzahl der x Top SQL Statements für das Capture
  • Dbid - ID der Datenbank

Daten aus dem Repository wieder löschen

Mit folgender Routine können Snapshots wieder gelöscht werden:

BEGIN                                                               
  dbms_workload_repository.drop_snapshot_range( 
        low_snap_id  => <min_snap_id>
      , high_snap_id => <max_snap_id>);                                         
 END;
 /

Daten aus dem Repository extrahieren und wieder laden

Daten können nur von einer Datenbank in die andere geladen werden. Ein erneutes Laden der Daten in die GLEICHE Datenbank wird NICHT unterstützt!

Daten aus dem Repository laden:
Mit den Skript „awrextr.sql“ können Daten aus dem Repository extrahiert werden und mit DataPump exportiert.

Daten auswählen:

sqlplus / AS sysdba
 
SQL>@?/rdbms/admin/awrextr.sql
  • Datenbank ID auswählen oder mit return die Default id wählen
  • Snap ID's der letzten x Tage anzeigen
  • Start Snap ID anzeigen
  • End Snap ID anzeigen
  • Oracle Datenbank Directory auswählen, in das der Export erfolgen soll
  • Namen des Exports angeben
  • per PL/SQL Aufruf wird ein Datapump Export durchgeführt (dauert je nach Volumen etwas!)

Daten in einer anderen Datenbank wieder einlesen:

SQL>@?/rdbms/admin/awrload.sql
  • Oracle Datenbank Directory auswählen, in dem der Export liegt
  • Namen des Exports angeben
  • Staging Schema wie „LOAD_AWR“ für die Import Tabellen angeben (wird dazu neu angelegt!)
  • Tablespace für die Import Tabellen angeben
  • Temporary Tablespace angeben
  • Repository Daten werden geladen

Der Versuch die DAten in der gleichen DB wieder einzulesen führt zu einem „ORA-20107: not allowed to move AWR data for local dbid“ Fehler.

AWR Berichte erstellen

mit Hilfe der folgenden Skripte können die Berichte aus dem AWR gelesen werden.

Bericht über die ganze Datenbank:

sqlplus / AS sysdba
 
SQL>@?\rdbms\admin\awrrpt.sql

Bericht über eine Instance:

sqlplus / AS sysdba
 
SQL>@?\rdbms\admin\awrgrpti.sql

Tip: Der Html Bericht läßt sich in Windows einfach mit „host <name_des_html_berichts>.html“ öffnen, da Windows per Default html Dateien sofort im Browser öffnet.

SQL Berichte

Für eine SQL Bericht muss die SQL ID des Statements bekannt sein.

Bericht über SQL Statement:

SQL>@?\rdbms\admin\awrsqrpt.sql

Bericht über das SQL Statement auf einer bestimmten Instance:

SQL>@?\rdbms\admin\awrsqrpi.sql

Übergelaufenes AWR neu aufbauen

Vor dem Löschen unbedingt ein vollständiges Backup der DB erstellen und entsprechend lange Downtime einplanen.

SQL> CONNECT / AS sysdba 
 
SQl> startup force
 
SQL> @?\rdbms\admin\catnoawr.sql 
SQL> ALTER system FLUSH shared_pool;
 
-- check for orphan objects
SELECT TABLE_NAME FROM dba_tables WHERE TABLE_NAME LIKE 'WRM$_%' OR TABLE_NAME LIKE 'WRH$_%';
 
 
SQL> @?\rdbms\admin\catawrtb.sql 
 
SQL> @?\rdbms\admin\utlrp.sql
 
SQL> @?\rdbms\admin\execsvrm.sql
 
SQL> @?\rdbms\admin\utlrp.sql
 
SQL> startup force
 
-- Tablespace reorganiseren / verkleinern wenn möglich
 
 
-- testen 
 
SQL> EXEC dbms_workload_repository.create_snapshot;

Im Test ließ sich das ohne Anpassung von DB Parameter durchführen, allerdings wird im Support Portal ein etwas anderes Verfahren vorgeschlagen, siehe dazu „How to Recreate The AWR ( AUTOMATIC WORKLOAD ) Repository ? (Doc ID 782974.1)“ im Metalink.

Skript

Skript für die Auswertung aktuellste Version unter awr.sql.

SET pagesize 300
SET linesize 250
 
---
@space_tablespace.sql SYSAUX
--
 
 
ttitle LEFT  "AWR Snapshots count" skip 2
COLUMN snapshot_count format 999999 heading "Snapshot Count"
 
SELECT COUNT(*) AS snapshot_count FROM sys.wrm$_snapshot
/
 
ttitle LEFT  "AWR Snapshots time frame" skip 2
COLUMN snap_id format 999999 heading "Snap|Id"
COLUMN start_time format a21 heading "Start|time"
COLUMN end_time   format a21 heading "End|time"
 
 
SELECT  snap_id
      , to_char(begin_interval_time,'dd.mm.yyyy hh24:mi:ss') AS start_time
	  , to_char(end_interval_time ,'dd.mm.yyyy hh24:mi:ss')  AS end_time
 FROM sys.wrm$_snapshot 
WHERE   ( 
        snap_id = ( SELECT MIN (snap_id) FROM sys.wrm$_snapshot) 
    OR  snap_id = ( SELECT MAX(snap_id) FROM sys.wrm$_snapshot) 
    )
ORDER BY snap_id ASC
/
 
 
ttitle LEFT  "AWR Usage Overview" skip 2
 
COLUMN occupant_name  format a25
COLUMN schema_name    format a18
COLUMN move_procedure format a40
COLUMN space_usage    format 9G999 heading "Space | Usage (M)"
 
SELECT   occupant_name
       , round( space_usage_kbytes/1024) AS space_usage  
       , schema_name
       , move_procedure
 FROM  v$sysaux_occupants  
 WHERE space_usage_kbytes > 1
ORDER BY 2 DESC    
/
 
 
DOC 
-------------------------------------------------------------------------------
 TO DROP SOME snapshots FROM the repostitory you can USE this command:
 BEGIN                                                               
  dbms_workload_repository.drop_snapshot_range( low_snap_id  => <min_snap_id>
                                              , high_snap_id => <max_snap_id>);                                         
 END;
 / 
-------------------------------------------------------------------------------
#
 
ttitle off

Fehlermeldung Emergency Flush Messages im Alert log

Meldung:

Sun Apr 27 19:00:16 2014
Active Session History (ASH) performed an emergency flush.

Größe überprüfen mit:

SELECT total_size,awr_flush_emergency_count FROM v$ash_info;

Lösung:

Über den DB Parameter „_ASH_SIZE“ den eingestellten Wert verdoppeln.

siehe Note: Active Session History (ASH) Performed An Emergency Flush Messages In The Alert Log (Doc ID 1385872.1)

Quellen

Oracle:
AWR Abfragen:
ASH
Allgemein:
Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
"Autor: Gunther Pipperr"
dba/awr_oracle.txt · Zuletzt geändert: 2017/01/06 11:18 von Gunther Pippèrr