Logo Oracle Deutschland   DBA Community  -   Mai 2015
Heat Map Funktionen in 12c
von Ulrike Schwinn, Oracle Deutschland B.V. & Co. KG

Neu mit Oracle Database 12c ist die Möglichkeit Information Lifecycle Management (ILM) nun direkt innerhalb der Oracle Datenbank zu verwenden. Kein Skripting oder gar die Installation separater Werkzeuge ist dazu erforderlich. ILM in der Datenbank beinhaltet mehrere Funktionen wie zum Beispiel die Automatischen Daten Optimierung und die Heat Map. Die Automatische Daten Optimierung ermöglicht beispielsweise die Verlagerung und/oder Komprimierung von Daten gemäß nutzer-definierter Regeln (englisch policies). Als Grundlage dient die sogenannte Heat Map, die unabhängig von der Automatischen Daten Optimierung aktiviert und über verschiedene Schnittstellen der Datenbank wie Data Dictionary Views, PL/SQL Packages und Enterprise Manager Cloud Control genutzt werden kann.

Was sind nun Heat Maps (auch Heatmaps)? In Wikipedia findet man beispielsweise folgende Definition: "Eine Heatmap (englisch: heat = "Hitze", "Wärme"; map = "Karte") ist ein Diagramm zur Visualisierung von Daten, deren abhängige Werte einer zweidimensionalen Definitionsmenge als Farben repräsentiert werden. Sie dient dazu, in einer großen Datenmenge intuitiv und schnell besonders markante Werte zu erfassen."

Bei der Oracle Datenbank handelt es sich bei den Heat Map Daten um system-generierte Statistiken, die die Nutzung wie Schreib- und Lesezugriffe auf Segment- bzw. auf Row-(Block) Ebene beschreiben. Diese Informationen können dann beispielsweise dazu verwendet werden, eine Komprimierung und/oder eine Verlagerung der Daten durchzuführen. Zusätzlich seit Version 12.1.0.2 gibt es sogar eine weitere Heat Map für den Bereich In-Memory Column Store, die die Nutzungsstatistiken der In-Memory Database anzeigt.

Die Aktivierung

Die Heat Map wird mit einem einzigen dynamischen Parameter eingeschaltet. Der Default Wert ist übrigens OFF.

ALTER SYSTEM SET HEAT_MAP = ON SCOPE=BOTH;
Einmal aktiviert werden automatisch Heat Map Segment (Row) Statistiken bzw. Statistiken für die Nutzung des In-Memory Column Store gesammelt. Um die Statistiken der Anwender nicht zu verfälschen, werden keine administrative Operationen wie DDL Kommandos oder Backups aufgezeichnet.
Aktueller Hinweis: Das Feature steht im Moment (Stand Release 12.1.0.2) nur mit einer Nicht Container (Non CDB) Umgebung zur Verfügung. Dies wird sich in den kommenden Release Zyklen ändern.

Nach der Aktivierung ermöglichen neue Views das Monitoring: Die Heat Map Daten werden initial im Hauptspeicher abgelegt; über die View $HEAT_MAP_SEGMENT wird dann eine Schnittstelle zu den realtime Segment Zugriffen gewährleistet. Periodisch - einmal pro Stunde - werden danach die Daten vom Hintergrundprozess MMON in Data Dictionary Views wie z.B. DBA_HEAT_MAP_SEGMENT geschrieben.

Statistiken für den Segmentzugriff an Beispielen

Um die Funktionsweise zu demonstrieren, führen wir nach der Aktivierung einige Zugriffe auf eine Hilfstabelle (hier H_TEST) durch und sehen uns die Ergebnisse in den Heat Map Views an. Zuerst überprüfen wir, ob das Heat Map Feature eingeschaltet ist.
SQL> show parameter heat_map
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
heat_map                             string      ON
Nun erzeugen wir beispielsweise im Schema SCOTT die Tabelle H_TEST als Kopie der View ALL_OBJECTS. Die Spalte OBJECT_ID wird indiziert.
-- als User SCOTT
SQL> create table h_test as select * from all_objects where 1=2;
Table created.
SQL> create index i_h_test on scott.h_test(object_id);
Index created.
Nach der kleinen Vorbereitung fügen wir die Inhalte der ALL_OBJECTS View ein und beenden die Transaktion mit COMMIT.
Hinweis: Nur mit COMMIT abgeschlossene Transaktionen werden aufgezeichnet.
-- als User Scott
SQL> insert into h_test select * from all_objects;
73634 rows created.
SQL> commit;
Commit complete
Im weiteren Verlauf der Testreihe werden Index Lookups und Full Table Scans durchgeführt. Die Beispielabfragen könnten wie folgt aussehen.
-- als User SCOTT
SQL> select max(data_object_id) from h_test;

MAX(DATA_OBJECT_ID)
-------------------
             167740

SQL> select object_name, object_id from h_test where object_id=200;

OBJECT_NAME
--------------------------------------------------------------------------------
 OBJECT_ID
----------
I_DUC
       200
Wie oben schon erwähnt, werden die Heat Map Daten initial im Hauptspeicher abgelegt. Um einen Einblick in diese Informationen zu erhalten, selektieren wir zuerst den Inhalt der View V$HEAT_MAP_SEGMENT. Je nach durchgeführter Operation sind nun einige Spalten mit YES gekennzeichnet. Die Spalte TRACK_TIME stellt dabei die aktuelle Systemzeit dar.
SQL> ALTER SESSION SET NLS_DATE_FORMAT='dd.mm.yyyy hh24:mi';
SQL> select sysdate from dual;
SYSDATE
----------------
28.05.2015 11:46

SQL> col owner format a25
SQL> col object_name format a15
SQL> SELECT o.owner, track_time, h.object_name, segment_write "Write",
     full_scan "Full Scan", lookup_scan "Lookup"
     FROM v$heat_map_segment h, dba_objects o
     WHERE h.obj#=o.object_id and o.owner='SCOTT';

OWNER                     TRACK_TIME       OBJECT_NAME     Wri Ful Loo
------------------------- ---------------- --------------- --- --- ---
SCOTT                     28.05.2015 11:46 LOB_TEST3       NO  NO  NO
SCOTT                     28.05.2015 11:46 H_TEST          YES YES NO
SCOTT                     28.05.2015 11:46 I_H_TEST        YES NO  YES
SCOTT                     28.05.2015 11:46 TEST_TAB_PK     NO  NO  NO
SCOTT                     28.05.2015 11:46 PK_EMP          NO  NO  NO
SCOTT                     28.05.2015 11:46 EMP             NO  NO  NO
SCOTT                     28.05.2015 11:46 PK_DEPT         NO  NO  NO
SCOTT                     28.05.2015 11:46 DEPT            NO  NO  NO
...
Ähnlich wie bei den Active Session History Daten und den Workload Repository Views werden diese Daten dann periodisch - mindestens einmal pro Stunde - in das Data Dictionary gespeichert und können dann über die Views DBA_HEAT_MAP_SEG_HISTOGRAM und DBA_HEAT_MAP_SEGMENT selektiert werden. Mit der Prozedur FLUSH_ALL_SEGMENTS des Package DBMS_ILM kann sogar eine sofortige Aktualisierung initiiert werden, wie in folgendem Fall zu sehen ist.
SQL> ALTER SESSION SET NLS_DATE_FORMAT='dd.mm.yyyy hh24:mi';
SQL> select sysdate from dual;

SYSDATE
----------------
28.05.2015 11:47

-- Flush der Informationen
SQL> execute dbms_ilm.flush_all_segments();
PL/SQL procedure successfully completed.

-- Aktuellster/letzter Zugriff aus DBA_HEAT_MAP_SEGMENT
SQL> col owner format a10
SQL> col object_name format a20
SQL> SELECT object_name, segment_write_time "Write",
     full_scan "Full", lookup_scan "Lookup"
     FROM dba_heat_map_segment 
     WHERE owner='SCOTT' 
     ORDER BY object_name;

OBJECT_NAME     Write            Full             Lookup
--------------- ---------------- ---------------- ----------------
DEPT                             19.05.2015 11:09
EMP             12.05.2015 15:08 19.05.2015 11:09 19.05.2015 11:09
H_TEST          28.05.2015 11:47 28.05.2015 11:47
I_H_TEST        28.05.2015 11:47	          28.05.2015 11:47
LOB_TEST3       12.05.2015 15:08 12.05.2015 15:08
PK_DEPT                                           28.05.2015 11:21
PK_EMP          12.05.2015 15:08                  28.05.2015 11:21
TEST_TAB_PK                                       28.05.2015 11:21
...

-- alle Zugriffe aus DBA_HEAT_MAP_SEG_HISTOGRAM
SQL> SELECT object_name, track_time, segment_write "Write",
     full_scan "Full Scan", lookup_scan "Lookup"
     FROM dba_heat_map_seg_histogram
     WHERE owner='SCOTT' 
     ORDER BY object_name, track_time;

OBJECT_NAME     TRACK_TIME       Wri Ful Loo
--------------- ---------------- --- --- ---
DEPT            28.04.2015 16:51 NO  YES NO
DEPT            19.05.2015 11:09 NO  YES NO
EMP             12.05.2015 15:08 YES NO  NO
EMP             19.05.2015 11:09 NO  YES YES
H_TEST          28.05.2015 11:47 YES YES NO
I_H_TEST        28.05.2015 11:47 YES NO  YES
LOB_TEST3       12.05.2015 15:08 YES YES NO
PK_DEPT         28.05.2015 11:21 NO  NO  YES
PK_EMP          12.05.2015 15:08 YES NO  NO
PK_EMP          19.05.2015 14:14 NO  NO  YES
PK_EMP          28.05.2015 11:21 NO  NO  YES
...
Zum Abschluss kontrollieren wir wieder V$HEAT_MAP_SEGMENT und stellen fest, dass die letzte Speicherung im Data Dictionary und somit das letzet Zurückschreiben um 11:47 stattgefunden hat.
SQL> SELECT o.owner, track_time, h.object_name, segment_write "Write",
     full_scan "Full Scan", lookup_scan "Lookup"
     FROM v$heat_map_segment h, dba_objects o
     WHERE h.obj#=o.object_id and o.owner='SCOTT'; 

OWNER                     TRACK_TIME       OBJECT_NAME     Wri Ful Loo
------------------------- ---------------- --------------- --- --- ---
SCOTT                     28.05.2015 11:47 LOB_TEST3       NO  NO  NO
SCOTT                     28.05.2015 11:47 H_TEST          NO  NO  NO
SCOTT                     28.05.2015 11:47 I_H_TEST        NO  NO  NO
SCOTT                     28.05.2015 11:47 TEST_TAB_PK     NO  NO  NO
SCOTT                     28.05.2015 11:47 PK_EMP          NO  NO  NO
SCOTT                     28.05.2015 11:47 EMP             NO  NO  NO
SCOTT                     28.05.2015 11:47 PK_DEPT         NO  NO  NO
SCOTT                     28.05.2015 11:47 DEPT            NO  NO  NO
...
Möchte man einen Gesamtüberblick über die Zugriffe der 100 aktivsten (Top 100) Objekte und Tablespaces erhalten, kann man die beiden Views DBA_HEATMAP_TOP_OBJECTS und DBA_HEATMAP_TOP_TABLESPACES zu rate ziehen oder gleich in der visualisierten Heat Map Darstellung im Enterprise Manager Cloud Control nachsehen.

Möchte man die Zugriffe auf Block-, Segment-, Extent- oder Tablespace- Ebene überwachen, eignet sich die Verwendung des Package DBMS_HEAT_MAP.

Hinweis: Möchte man mehr Details über die Art der Zugriffe auf Tabellen und auch auf zugehörige Spalten erhalten, eignet sich zusätzlich die Verwendung der Views DBA_TAB_MODIFICATIONS oder SYS.COL_USAGE$ (siehe auch Blogeintrag Tabellen Monitoring mit DBA_TAB_MODIFICATIONS und SYS.COL_USAGE$ ).

Visualisierung der Segmentzugriffe

Nun fehlt natürlich noch die graphische Darstellung im Enterprise Manager Cloud Control. Ist die Heat Map eingeschaltet, kann man direkt in Cloud Control 12c Release 4 zur Heat Map Seite über "Administration => Storage => Information Lifecycle Management" navigieren. Als Erstes erhält man eine Database Level Ansicht mit den entsprechend eingefärbten Tablespaces; die Farbe Rot steht dabei für hohe Aktivität. Bitte berücksichtigen Sie, dass die Anzeige nicht für realtime Anforderungen programmiert ist; erst mit etwas Verzögerung wird die Ansicht aktualisiert. Auf der linken Seite unterhalb der Graphik kann man dabei die Ansicht nach Zugriffsart wie z.B. LAST FULL TABLE SCAN DATE einstellen. Scrollt man weiter nach unten erhält man einen Bericht über die Tablespace Zugriffsaktvitäten im Einzelnen.



Ein Klick auf einen Tablespacenamen z.B. USERS führt zur Tablespace Level Heat Map. Auch hier erscheint unterhalb der Graphik eine detaillierte Ansicht über die Aktivitäten der Objekte im entsprechenden Tablespace. Werden Partitionen verwendet, lohnt sich ein weiterer Drill Down auf Object Level Heat Map Ebene um die entprechenden Aktivitäten der Partitionen zu überwachen.



Visualisierung der In-Memory Database Objektzugriffe

Die In-Memory Object Page im Enterprise Manager ist über die Menüpunkte "Administration=> In Memory Central" zu erreichen. Hier können Einstellungen der In-Memory Datenbank, der Compression Faktor und weitere Eigenschaften der einzelnen Objekte im Column Store eingesehen werden. Zusätzlich können die Zugriffe auf die Column Store Objekte graphisch in einer Heat Map angezeigt werden.

Wie bei der Segment Heat Map ist auch hier die Aktivierung über den HEAT_MAP Parameter erforderlich. Die Heat Map zeigt die relative Größe und die Zugriffsfrequenz der Objekte im Columnstore mit verschiedenen Einfärbungen an. Wie zu erwarten bedeutet die Einfärbung mit roter Farbe eine hohe Zugriffsrate, die Einfärbung Blau das Gegenteil. Da der Anwender selbst entscheidet, welche Objekte in den Columnstore geladen werden, sollte es das Ziel sein, besonders viele rote Bereiche in der Heat Map zu sehen. Die blauen Bereiche hingegen können eine unnütze Speicherverschwendung anzeigen.





Fazit

Die Heat Map Funktionen liefern eine neue Möglichkeit Zugriffsverhalten auf Objekte und Tablespaces zu monitoren. Im Gegensatz zu den traditionellen Techniken über die verschiedensten Data Dictionary Views wie DBA_TAB_MONITORING, SYS.COL_USAGE$ usw., besteht mit der Heat Map die Möglichkeit schnell und ohne viel Aufwand einen guten Gesamtüberblick über das Zugriffsverhalten zu erhalten. Auf dieser Basis kann der DBA schnell verifizieren, welche Tablespaces oder Objekte im häufigen oder weniger häufigen Zugriff sind. Speziell auch die graphische Implementierung im Enterprise Manager hilft dabei einen guten Gesamtüberblick auf den verschiedenen Ebenen zu erhalten.

Lizenzierungshinweis

Die Nutzung der Heat Map erfordert die Lizenzierung der Oracle Advanced Compression Option.

Weitere Informationen

Zurück zur Community-Seite