Empfohlene Programmierverfahren

Verwenden Sie die folgenden empfohlenen Programmierverfahren.

Instrumentierungspakete verwenden

Oracle AI Database stellt Instrumentierungspackages bereit, deren Unterprogramme es Ihrer Anwendung ermöglichen, bei Bedarf Traceinformationen zu generieren. Mit diesen Trace-Informationen können Sie Ihre Anwendung ohne Debugger debuggen und Code identifizieren, der schlecht funktioniert.

Instrumentierung bietet Ihrer Anwendung eine beträchtliche Funktionalität; daher ist es kein Overhead. Overhead ist etwas, das Sie entfernen können, ohne viel Nutzen zu verlieren.

Einige Instrumentierungspakete, die Oracle AI Database bereitstellt, sind:

Siehe auch: Oracle AI Database PL/SQL Packages and Types Reference für eine Zusammenfassung der PL/SQL-Packages, die Oracle AI Database bereitstellt

Statistiksammlung und Anwendungs-Tracing

Datenbankstatistiken bieten Informationen über den Lasttyp in der Datenbank und die von der Datenbank verwendeten internen und externen Ressourcen. Um Performanceprobleme mit der Datenbank mithilfe von ADDM genau diagnostizieren zu können, müssen Statistiken verfügbar sein.

Informationen zum Sammeln von Statistiken finden Sie unter Oracle AI Database - Erste Schritte mit Performance Tuning.

Hinweis: Wenn Oracle Enterprise Manager nicht verfügbar ist, können Sie Statistiken mit DBMS_MONITOR-Unterprogrammen erfassen, wie in der Oracle AI Database PL/SQL Packages and Types Reference beschrieben.

Oracle AI Database bietet mehrere Tracing-Tools, mit denen Sie Datenbankanwendungen überwachen und analysieren können. Weitere Informationen finden Sie in der Dokumentation SQL Tuning Guide für Oracle AI Database.

Vorhandene Funktionen verwenden

Eine Anwendung, die vorhandene Funktionen verwendet, ist einfacher zu entwickeln und zu warten als eine Anwendung, die dies nicht tut, und sie wird auch schneller ausgeführt.

Verwenden Sie bei der Entwicklung Ihrer Anwendung die vorhandene Funktionalität Ihrer Programmiersprache, Ihres Betriebssystems, der Oracle AI Database sowie der PL/SQL-Packages und -Typen, die Oracle AI Database so weit wie möglich bereitstellt.

Beispiele für vorhandene Funktionen, die viele Entwickler neu erfinden, sind:

In Beispiel 8-4 entpacken zwei nebenläufige Transaktionen Nachrichten, die in einer Tabelle gespeichert sind (d.h. jede Transaktion findet und sperrt die nächste nicht verarbeitete Zeile der Tabelle). Anstatt einfach die Prozedur DBMS_AQ.DEQUEUE aufzurufen (in Oracle AI Database PL/SQL Packages and Types Reference beschrieben), erstellt das Beispiel einen funktionsbasierten Index für die Tabelle und verwendet diese Funktion dann in jeder Transaktion, um die Zeilen abzurufen und die Nachrichten anzuzeigen.

Der Code in Beispiel 8-4 implementiert ein Feature, das einem DBMS_AQ.DEQUEUE-Aufruf ähnelt, jedoch weniger Funktionen aufweist. Die durch die Verwendung vorhandener Funktionen eingesparte Entwicklungszeit (in diesem Fall funktionsbasierte Indizes) kann groß sein.

Beispiel 8-4: Gleichzeitige Dequeuing-Transaktionen

Tabelle erstellen:

DROP TABLE t;
CREATE TABLE t
  ( id             NUMBER PRIMARY KEY,
    processed_flag VARCHAR2(1),
    payload        VARCHAR2(20)
  );

Index in Tabelle erstellen:

CREATE INDEX t_idx ON
  t( DECODE( processed_flag, 'N', 'N' ) );

Tabelle ausfüllen:

INSERT INTO t
  SELECT r,
         CASE WHEN MOD(r,2) = 0 THEN 'N' ELSE 'Y' END,
         'payload ' || r
  FROM (SELECT LEVEL r FROM DUAL CONNECT BY LEVEL <= 5);

Tabelle anzeigen:

SELECT * FROM t;

Ergebnis:

        ID P PAYLOAD
---------- - --------------------
         1 Y payload 1
         2 N payload 2
         3 Y payload 3
         4 N payload 4
         5 Y payload 5

5 rows selected.

Erste Transaktionen:

DECLARE
  l_rec t%ROWTYPE;
  CURSOR c IS
    SELECT *
    FROM t
    WHERE DECODE(processed_flag,'N','N') = 'N'
    FOR UPDATE
    SKIP LOCKED;
BEGIN
  OPEN c;

  FETCH c INTO l_rec;

  IF ( c%FOUND ) THEN
    DBMS_OUTPUT.PUT_LINE( 'Got row ' || l_rec.id || ', ' || l_rec.payload );
  END IF;

  CLOSE c;
END;
/

Ergebnis:

Got row 2, payload 2

Hintergrundtransaktion:

DECLARE
  PRAGMA AUTONOMOUS_TRANSACTION;
  l_rec t%ROWTYPE;
  CURSOR c IS
    SELECT *
    FROM t
    WHERE DECODE(processed_flag,'N','N') = 'N'
    FOR UPDATE
    SKIP LOCKED;
BEGIN
  OPEN c;

  FETCH c INTO l_rec;

  IF ( c%FOUND ) THEN
    DBMS_OUTPUT.PUT_LINE( 'Got row ' || l_rec.id || ', ' || l_rec.payload );
  END IF;

  CLOSE c;
  COMMIT;
END;
/

Ergebnis:

Got row 4, payload 4

Siehe:

Datenbanktabellen mit Editionsansichten abdecken

Wenn Ihre Anwendung Datenbanktabellen verwendet, decken Sie jede Anwendung mit einer Editionsansicht ab, sodass Sie die Datenbankkomponente Ihrer Anwendung mit einer Editions-basierten Neudefinition (EBR) upgraden können, während sie verwendet wird. Dadurch wird die Ausfallzeit minimiert oder eliminiert.

Informationen zur Editions-basierten Neudefinition finden Sie im Oracle AI Database Development Guide.