Database Workload Capture in der Version 10g - Teil 1

03.
Oktober
2008
Veröffentlicht von: Richard Meinhardt

Mit dem Patch 10.2.0.4 hat Oracle die Möglichkeit geschaffen, Last aufzuzeichnen, um diese dann auf einer 11g Datenbank wiederzugeben.

Dieses Feature eröffnet natürlich fantastische Möglichkeiten im Bereich der Migration auf 11g. Hierbei bietet das hinzugekommene Database Workload von Oracle die perfekte Grundlage für "lebensnahe" Tests in einem Nicht-Produktivsystem.

Mit dem Patch 10.2.0.4 hat Oracle die Möglichkeit geschaffen, Last aufzuzeichnen, um diese dann auf einer 11g Datenbank wiederzugeben.

Dieses Feature eröffnet natürlich fantastische Möglichkeiten im Bereich der Migration auf 11g. Hierbei bietet das hinzugekommene Database Workload von Oracle die perfekte Grundlage für "lebensnahe" Tests in einem Nicht-Produktivsystem.

In diesem Monatstipp wird auf der Oracle Oberfläche SQLPlus gearbeitet.

Als erstes muss hierfür der Parameter pre_11g_enable_capture auf "true" gesetzt werden. Dies geschieht am einfachsten mit dem Script wrrenbl.sql, das Sie als sys oder system mit folgendem Befehl ausführen können:

SQL> @?\rdbms\admin\wrrenbl.sql
Script Ausgabe: SET FEEDBACK 1
Script Ausgabe: SET NUMWIDTH 10
Script Ausgabe: SET LINESIZE 80
Script Ausgabe: SET TRIMSPOOL ON
Script Ausgabe: SET TAB OFF
Script Ausgabe: SET PAGESIZE 100
Script Ausgabe: alter system set PRE_11G_ENABLE_CAPTURE=true sid='*';

Script Ausgabe: System wurde geändert.

Desweitern wird noch ein Directory Objekt benötigt, damit Oracle die Workload Dateien ablegen kann. Die Erstellung eines entsprechendem Verzeichnisses wird mit diesem Befehl erzeugt:

SQL> CREATE DIRECTORY db_workload_dir AS 'c:\temp\oracle';
Verzeichnis wurde erstellt.

Damit keine unnötigen Daten aufgezeichnet werden, sollte nun ein sinnvoller Filter eingestellt werden. Im Falle dieses Tipps ist ein einfacher Filter ausreichend:

BEGIN
    DBMS_WORKLOAD_CAPTURE.ADD_FILTER(
        fname => 'User_Filter',
        fattribute => 'USER',
        fvalue => 'SWINGBENCH');
END;
/

Dieser Filter sorgt dafür, dass nur Aktionen vom Benutzer SWINGBENCH aufgezeichnet werden. Weitere Werte für den Parameter fattribute sind INSTANCE_NUMBER, MODULE, ACTION, PROGRAM und SERVICE. Der Name des Filters ist vor allem später zum Entfernen wieder wichtig.

Wenn Sie nun alle Filter nach Ihren Wünschen gesetzt haben geht es auch schon fast an den Workload Capture. Wenn sie das ganze Szenario auf einer Test-Datenbank durchführen, sollten Sie auf dieser Test-Datenbank Last erzeugen, die auch Ihren Filtern entspricht.

Wir machen das mit dem Tool Swingbench.

Sie starten nun die Aufnahme mit folgendem PL/SQL Block:

BEGIN
    DBMS_WORKLOAD_CAPTURE.START_CAPTURE(
        name => 'Monatstipp',
        dir => 'DB_WORKLOAD_DIR',
        duration => 1800);
END;
/

duration gibt die Zeit der Aufnahme in Sekunden an.

Beachten Sie bei Produktivsystemen, dass ein Workload Capture durchaus auch Ressourcen braucht und Sie deswegen den Akt der Balance zwischen praxisnahen Daten und einer nicht zu großen Zusatzbelastung für die Datenbank meistern müssen.

In dem Datenbank View dba_workload_captures finden sie dann die Informationen, die Sie für den späteren Verlauf brauchen werden:

SQL> col name for a20
SQL> col dir_path for a30
SQL> select id, name, dir_path from dba_workload_captures;

        ID NAME                 DIR_PATH
---------- -------------------- ------------------------------
         1 Monatstipp           c:\temp\oracle

Mit der ausgegebenen ID des Workload Capture können Sie diesen nun exportieren, dazu verwenden sie nachfolgenden PL/SQL Block:

BEGIN
    DBMS_WORKLOAD_CAPTURE.EXPORT_AWR(capture_id => 1);
END;
/

Nun können Sie sich noch per PL/SQL Block einen Report erzeugen lassen, der Ihnen genauere Informationen über den Lauf anzeigt:

set serveroutput on
set linesize 1000
set pagesize 1000

DECLARE
    wl_cp_report CLOB;
    wl_cp_id NUMBER;
BEGIN
    wl_cp_id := DBMS_WORKLOAD_CAPTURE.GET_CAPTURE_INFO(
            dir => 'DB_WORKLOAD_DIR');

    wl_cp_report := DBMS_WORKLOAD_CAPTURE.REPORT(
            capture_id => wl_cp_id,
            format => DBMS_WORKLOAD_CAPTURE.TYPE_TEXT);

    DBMS_OUTPUT.PUT_LINE(wl_cp_report);
END;
/

Somit haben Sie nun Last aufgezeichnet.

In unserem nächsten Monatstipp im November geht es dann um das Thema:

"<link blog-detailansicht database-workload-capture-in-der-version-10g-teil-2.html external-link-new-window internal link in current>Opens external link in new windowDatabase Workload Capture in der Version 10g - Teil 2" - wie wird diese aufgezeichnete Last auf einer entsprechend vorbereiteten Oracle 11g Datenbank wieder abgespielt.

Jede Menge Know-how für Sie!

In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.