Database In-Memory mit Autonomous Database verwenden

Das in Autonomous Database verfügbare Database In-Memory-Feature kann die Performance für Echtzeitanalysen und gemischte Workloads erheblich verbessern.

Database In-Memory

Oracle Database In-Memory (Database In-Memory) ist eine Suite von Features, mit denen die Performance für Echtzeitanalysen und gemischte Workloads erheblich verbessert wird.

Das Database In-Memory-Feature ist in folgenden Situationen nützlich:
  • Sie haben das In-Memory-Feature für Ihre On-Premise-Datenbank aktiviert und migrieren jetzt von der On-Premise-Datenbank zu Autonomous Database.

  • Abfragen in Ihrer Datenbank verbringen den größten Teil ihrer Laufzeit mit dem Scannen und Filtern von Daten sowie mit der Ausführung von Joins und gruppierten Aggregationen.

  • Sie müssen die Antwortzeit Ihrer Abfragen verbessern, die analytischer Natur sind.

Der In-Memory-Spaltenspeicher ist das Hauptfeature von Database In-Memory. Der In-Memory-Spaltenspeicher befindet sich im In-Memory-Bereich, einem optionalen Teil der System Global Area (SGA). Wenn diese Option für In-Memory aktiviert ist, werden Tabellen, Partitionen, Unterpartitionen und Materialized Views in einem spaltenförmigen Format im In-Memory-Spaltenspeicher aufgefüllt. Dieses Spaltenformat ist für sehr schnelle Scans optimiert. Dadurch können analytische Abfragen Größenordnungen schneller ausführen als zeilenformatbasierte Abfragen. Weitere Informationen finden Sie unter Oracle Database In-Memory.

Der In-Memory-Spaltenspeicher wächst im Laufe der Zeit dynamisch an, um die heißesten INMEMORY-Objekte aufzunehmen. Sie können die Tabelle PRIORITY verwenden oder kontinuierliche Tabellenscans durchführen, um sicherzustellen, dass der In-Memory-Spaltenspeicher groß genug für Ihre Workload wird. Weitere Informationen finden Sie unter Größe des In-Memory Column Store festlegen.

Mit der Klausel INMEMORY in DDL-Anweisungen können Sie In-Memory für die folgenden Objekte aktivieren:
  • Tabellen (einschließlich externer Tabellen)

  • Partitionen oder Unterpartitionen

  • Materialized Views

Weitere Informationen finden Sie unter Objekte für In-Memory-Auffüllung aktivieren.

Beachten Sie Folgendes, um Database In-Memory zu aktivieren:

  • Database In-Memory ist nur für eine Autonomous Database-Instanz mit:

    • Das ECPU-Compute-Modell

    • Mindestens 16 ECPUs

  • Wenn Sie die Datenbank neu starten, müssen für INMEMORY aktivierte Objekte erneut in den In-Memory-Spaltenspeicher aufgefüllt werden. Je nach Prioritätseinstellung kann das erneute Auffüllen automatisch oder beim ersten Zugriff erfolgen. Wenn Sie die Performance überwachen, werden Sie eine langsamere Performance feststellen, bis das Objekt erneut aufgefüllt wird.

Objekte für In-Memory-Auffüllung aktivieren

Sie können Objekte zum Auffüllen im In-Memory-Spaltenspeicher aktivieren und deaktivieren.

Nur Objekte mit der Klausel INMEMORY können im In-Memory-Spaltenspeicher aufgefüllt werden. Verwenden Sie DDL-Anweisungen CREATE TABLE oder ALTER TABLE, um die Klausel INMEMORY anzuwenden.

Standardmäßig werden Objekte mit dem Attribut NO INMEMORY erstellt, d.h. sie können nicht in den In-Memory-Spaltenspeicher aufgefüllt werden.

Wenn Sie ein Objekt als INMEMORY aktivieren, wird angegeben, dass sich ein Objekt möglicherweise im In-Memory-Spaltenspeicher befinden kann. Die In-Memory-Auffüllung ist ein separater Schritt, der auftritt, wenn die Datenbank vorhandene Daten im Zeilenformat liest, sie in ein Spaltenformat transformiert und dann im In-Memory-Spaltenspeicher speichert. Standardmäßig werden alle Spalten in einem Objekt mit dem Attribut INMEMORY im In-Memory-Spaltenspeicher aufgefüllt.

Das Festlegen des Attributs INMEMORY für ein Objekt impliziert, dass das Objekt ein Kandidat für die Population im In-Memory-Spaltenspeicher ist. Das Objekt wird nicht sofort im In-Memory-Spaltenspeicher aufgefüllt. Sie können jedoch die Klausel PRIORITY mit dem Attribut INMEMORY verwenden, um die Priorität der Auffüllung im In-Memory-Spaltenspeicher zu steuern. Die Klausel PRIORITY kann mit den folgenden Werten angegeben werden:

  • CRITICAL: Das Objekt wird unmittelbar nach dem Öffnen der Datenbank aufgefüllt.

  • HIGH : Das Objekt wird aufgefüllt, nachdem alle CRITICAL-Objekte aufgefüllt wurden, wenn im In-Memory-Spaltenspeicher weiterhin Speicherplatz verfügbar ist.

  • MEDIUM: Das Objekt wird aufgefüllt, nachdem alle CRITICAL- und HIGH-Objekte aufgefüllt wurden, und der Speicherplatz bleibt im In-Memory-Spaltenspeicher verfügbar.

  • LOW: Das Objekt wird aufgefüllt, nachdem alle CRITICAL-, HIGH- und MEDIUM-Objekte aufgefüllt wurden, wenn im In-Memory-Spaltenspeicher weiterhin Speicherplatz verfügbar ist.

  • NONE: Objekte werden erst aufgefüllt, nachdem sie zum ersten Mal gescannt wurden, wenn im In-Memory-Spaltenspeicher Speicherplatz verfügbar ist. Die Priorität NONE ist die Standardpriorität.

Beispiel zum Erstellen einer Tabelle mit dem Attribut INMEMORY:

CREATE TABLE im_emp (
    id  NUMBER,  name VARCHAR2(20),  
    depno NUMBER,  sal   NUMBER,  
    mgr   NUMBER,  
    loc   VARCHAR2(20)) 
    INMEMORY;
In diesem Beispiel wird die Tabelle im_emp mit dem Attribut INMEMORY erstellt. Im Beispiel wird die Standardpriorität NONE für die Klausel INMEMORY verwendet. Das bedeutet, dass die Tabelle erst aufgefüllt wird, nachdem sie zum ersten Mal gescannt wurde.

Beispiel für die Verwendung der Klausel PRIORITY mit dem Attribut INMEMORY:

CREATE TABLE im_emp_1 (
    id  NUMBER,  name VARCHAR2(20),  
    depno NUMBER,  sal   NUMBER,  
    mgr   NUMBER,  
    loc   VARCHAR2(20)) 
    INMEMORY PRIORITY CRITICAL;

Beispiel zum Festlegen des Attributs INMEMORY für eine vorhandene Tabelle:

ALTER TABLE employees INMEMORY;

In diesem Beispiel wird das Attribut INMEMORY für die Tabelle employees festgelegt.

Sie können eine Tabelle auch so ändern, dass das Attribut INMEMORY nur für eine Teilmenge von Spalten in der Tabelle festgelegt wird. Beispiele:

ALTER TABLE im_emp_tb INMEMORY NO INMEMORY(depno);
In diesem Beispiel wird das Attribut INMEMORY für im_emp_tb festgelegt, die Spalte depno wird jedoch ausgeschlossen.

Weitere Informationen finden Sie unter INMEMORY_TABLE_CLAUSE.

Nachdem INMEMORY für eine Tabelle aktiviert wurde, können Sie die View V$IM_SEGMENTS abfragen, um zu bestimmen, ob Daten aus der Tabelle im In-Memory-Spaltenspeicher aufgefüllt werden. Beispiele:
SELECT SEGMENT_NAME, POPULATE_STATUS 
FROM   V$IM_SEGMENTS 
WHERE  SEGMENT_NAME = 'IM_EMP';

Weitere Informationen finden Sie in V$IM_SEGMENTS.

Nachdem das Objekt im In-Memory-Spaltenspeicher aufgefüllt wurde, wird es nur entfernt, wenn das Objekt gelöscht oder verschoben wird oder das Objekt mit dem Attribut NO INMEMORY aktualisiert wird. Beispiele:
ALTER TABLE im_emp NO INMEMORY;

Weitere Informationen finden Sie unter How In-Memory Population Works.

Hinweise zum Aktivieren von Objekten für In-Memory-Auffüllung:

  • Die Datenbank füllt In-Memory-Objekte nicht automatisch mit der Einstellung PRIORITY von NONE auf. Sie können diese Objekte jedoch manuell in den In-Memory-Spaltenspeicher auffüllen. Weitere Informationen finden Sie unter IM-Spaltenspeicher manuell auffüllen und Prozedur DBMS_INMEMORY.POPULATE.

  • Es müssen kontinuierliche Tabellenscans vorhanden sein, um sicherzustellen, dass der In-Memory-Spaltenspeicher automatisch groß genug für Ihre Workload wird. Wenn ein Objekt teilweise aufgefüllt ist, kann der Tabellenscan sowohl In-Memory als auch Exadata Smart Scan verwenden.

Größe des In-Memory Column Store festlegen

Wenn Ihre Autonomous Database-Instanz über 16 oder mehr ECPUs verfügt, ist das Database In-Memory-Feature standardmäßig aktiviert, und bis zu 50% der SGA können von In-Memory verwendet werden.

Der Speicher für den speicherresidenten Bereich ist nicht im Voraus reserviert, und die anfängliche Größe des speicherresidenten Bereichs beträgt 0. Der In-Memory-Bereich wächst allmählich, wenn nicht genügend Platz für die In-Memory-Population vorhanden ist.

Objekte im In-Memory-Spaltenspeicher werden dynamisch von Automatic In-Memory (AIM) verwaltet. "Automatischer In-Memory" ist standardmäßig für Autonomous Database aktiviert.

AIM ermittelt anhand interner Statistiken, wie häufig auf In-Memory-Objekte und -Spalten zugegriffen wird. Wenn der In-Memory-Spaltenspeicher voll ist und andere Segmente, auf die häufiger zugegriffen wird, von der Population im In-Memory-Spaltenspeicher profitieren würden, entfernt der In-Memory-Spaltenspeicher inaktive Segmente.

Um sicherzustellen, dass das Arbeits-Dataset immer aufgefüllt wird, entfernt AIM automatisch kalte Segmente (auf die selten zugegriffen wird). Weitere Informationen finden Sie unter Verwaltung von In-Memory-Objekten automatisieren.

Die maximale In-Memory-Standardgröße für Autonomous Database kann bis zu 50% der SGA-Größe betragen. Sie können jedoch die maximale In-Memory-Größe für Autonomous Database ändern:
  • Durch Ändern der ECPU-Anzahl für Autonomous Database.

  • Mit der Prozedur DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE können Sie die maximale In-Memory-Größe ändern. Sie können einen Wert im Bereich zwischen 0 und 70 angeben. Wenn Sie einen Nullwert (0) angeben, wird Database In-Memory deaktiviert. Beispiele:
    BEGIN
        DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE(60);
    END;
    /
    In diesem Beispiel wird die maximale In-Memory-Größe auf 60% der SGA-Größe geändert.

Weitere Informationen finden Sie unter Prozedur SET_SGA_PERCENTAGE.

Fragen Sie die Ansicht V$INMEMORY_AREA ab, um Informationen zur Speicherplatzzuweisung im In-Memory-Bereich abzurufen. Beispiele:

SELECT * FROM V$INMEMORY_AREA;
Weitere Informationen finden Sie in V$INMEMORY_AREA.

In-Memory Column Store deaktivieren

Sie können den In-Memory-Spaltenspeicher für Autonomous Database deaktivieren, indem Sie die maximale In-Memory-Größe in 0 ändern.

Beispiele:

BEGIN
    DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE(0);
END;
/

In diesem Beispiel wird der Wert für die maximale In-Memory-Größe auf null (0) geändert, und Database In-Memory wird für die Instanz deaktiviert.

Weitere Informationen finden Sie unter Prozedur SET_SGA_PERCENTAGE.