Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Eine Reise durch die GIMR

Oracle Grid Infrastructure enthält den Cluster Health Monitor (CHM), der regelmäßig betriebssystembezogene Leistungsinformationen erfasst. In frühen Versionen verwendet CHM eine Berkeley DB für seinen Datenspeicher. In Grid Infrastructure 12.1.0.2 ist es jetzt erforderlich, eine Oracle-Datenbank für den Datenspeicher zu verwenden. Diese Oracle-Datenbank wird Grid Infrastructure Management Repository (GIMR) genannt. Vielen ist bereits bekannt, dass die GIMR mit dem Datenbanknamen „-MGMTDB“ läuft und nur auf einem Knoten des GI-Clusters läuft. Sollte dieser Knoten verfügbar werden, startet GI automatisch das GIMR auf einem verbleibenden Knoten.

Im obigen Absatz geht es um alle Hintergrundinformationen, die ich über die GIMR geben werde. Wenn der Leser mehr wissen möchte, kann er sicherlich im Internet nach Informationen suchen, wie man diese Datenbank verwaltet (wie wenig Verwaltung für diese Datenbank erforderlich ist) und wie man die Datenbank und ihren dedizierten Listener startet und stoppt.

Dieser Blogbeitrag soll den Leser darüber informieren, wie er auf die GIMR-Datenbank zugreifen und aussagekräftige Informationen daraus extrahieren kann. Weitere Websuchen können zeigen, wie Sie Befehlszeilenprogramme verwenden, um Daten aus dem GIMR zu exportieren. Und es gibt ein grafisches Dienstprogramm, CHMOSG, mit dem die CHM-Daten im Repository angezeigt werden können. Aber nur zum Spaß dachte ich, ich würde zeigen, wie man direkt zu den Daten kommt.

Zunächst müssen Sie wissen, auf welchem ​​Knoten die Datenbank läuft. Auf jedem Knoten kann ich Folgendes ausgeben:

[oracle@host01 bin]$ cd /u01/app/crs12.1.0.2
[oracle@host01 bin]$ ./crs_stat -t | grep -i mgmt
ora.MGMTLSNR ora....nr.type ONLINE ONLINE host01 
ora.mgmtdb ora....db.type ONLINE ONLINE host01

Das Obige zeigt, dass die Datenbank und der Listener auf host01 ausgeführt werden. Jetzt, da ich den Knoten der Instanz kenne, kann ich mich bei diesem Knoten anmelden und meine Umgebungsvariablen so einstellen, dass sie eine Verbindung zur Instanz herstellen. Diese Datenbank wird aus dem Grid-Infrastruktur-Home ausgeführt, nicht aus dem RDBMS-Home. Also muss ich mein ORACLE_HOME richtig einstellen. Außerdem beginnt der Instanzname mit einem Bindestrich, also muss ich die SID in doppelte Anführungszeichen setzen.

[oracle@host01 ~]$ export ORACLE_HOME=/u01/app/crs12.1.0.2
[oracle@host01 ~]$ export PATH=$ORACLE_HOME/bin:$PATH
[oracle@host01 ~]$ export ORACLE_SID="-MGMTDB"

Ich kann mich jetzt mit der Instanz verbinden und überprüfen, ob ich mit der richtigen verbunden bin.

[oracle@host01 ~]$ sqlplus /nolog
SQL*Plus: Release 12.1.0.2.0 Production on Mon Dec 21 15:17:21 2015
Copyright (c) 1982, 2014, Oracle. All rights reserved.
SQL> connect / as sysdba
Connected.
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
-MGMTDB

Diese Datenbank ist eine mandantenfähige Oracle-Datenbank, die eine PDB. Ich muss den PDB-Namen bestimmen. Der PDB-Name ist mit dem Clusternamen identisch. Ich kann mich an den Clusternamen erinnern, indem ich V$ACTIVE_SERVICES abfrage.

SQL> select name,con_id
 2 from v$active_services;
NAME                                                      CON_ID
----------------------------------------------------- ----------
my_cluster                                                     3
-MGMTDBXDB                                                     1
_mgmtdb                                                        1
SYS$BACKGROUND                                                 1
SYS$USERS                                                      1
SQL> alter session set container=my_cluster;
Session altered.

Nur ein Dienst hat die Container-ID ungleich 1 (1 ist die CDB), also muss es die PDB sein, nach der ich suche. Ich ändere meine Sitzung so, dass sie die PDB als Container verwendet.

Meine nächste Aufgabe ist es, eine Liste von Tabellen zu bekommen, die CHM gehören.

SQL> select table_name from dba_tables where owner='CHM'
 2 order by table_name;
TABLE_NAME
--------------------------------------------------------------------------------
CHMOS_ACTIVE_CONFIG_INT_TBL
CHMOS_ASM_CONFIG_INT_TBL
CHMOS_CPU_INT_TBL
CHMOS_DEVICE_INT_TBL
CHMOS_FILESYSTEM_INT_TBL
CHMOS_NIC_INT_TBL
CHMOS_PROCESS_INT_TBL
CHMOS_STATIC_CONFIG_INT_TBL
CHMOS_SYSTEM_PERIODIC_INT_TBL
CHMOS_SYSTEM_SAMPLE_INT_TBL

Nur 10 Tabellen im Schema. Die erste Tabelle in der Liste zeigt einige Konfigurationsinformationen über die von CHM überwachten Hosts.

SQL> select hostname,NUMPHYCPUS,NUMCPUS,NUMDISKS
 2 from CHM.CHMOS_ACTIVE_CONFIG_INT_TBL;
HOSTNAME   NUMPHYCPUS NUMCPUS    NUMDISKS
---------- ---------- ---------- ----------
host01              1          2          3
host02              1          2          3

Ich kann sehen, dass CHM Informationen über zwei Knoten im Cluster sammelt. Ich kann die Anzahl der physischen CPUs für jeden Knoten und die Anzahl der Kerne insgesamt sehen (2). Diese Knoten haben auch 3 Festplatten.

Wir können auch Informationen über das Betriebssystem erfahren.

SQL> select hostname,osname,chiptype
 2 from CHM.CHMOS_STATIC_CONFIG_INT_TBL;
HOSTNAME OSNAME CHIPTYPE
---------- ---------- --------------------
host01 Linux Intel(R)
host02 Linux Intel(R)

Es gibt eine Menge Informationen in diesen Tabellen und es braucht nur ein bisschen Versuch und Irrtum, um herauszufinden, was da drin ist. Zum Beispiel kann ich diese Abfrage verwenden, um eine Anzahl von Prozessen zu erhalten, die auf host01 ausgeführt werden, geordnet über die Zeit.

select begintime,count(*)
from CHM.CHMOS_PROCESS_INT_TBL
where hostname='host01'
group by begintime
order by begintime;

Ich habe die Ausgabe absichtlich nicht aufgenommen, da sie für einen Blogbeitrag zu lang wäre. Hier sind ein paar weitere Beispielabfragen, die Sie in Ihrer GIMR-Datenbank ausprobieren können.

Festplatten-E/A-Aktivität für einen bestimmten Host im Laufe der Zeit.

select begintime,
DISK_BYTESREADPERSEC/1024/1024 as MB_READ_SEC,
DISK_BYTESWRITTENPERSEC/1024/1024 as MB_WRITE_SEC,
DISK_NUMIOSPERSEC as IO_PER_SEC
from CHM.CHMOS_SYSTEM_SAMPLE_INT_TBL
where hostname='host01'
order by begintime;

Wechseln auf einem bestimmten Host im Laufe der Zeit.

select begintime,swpin,swpout
from CHM.CHMOS_SYSTEM_SAMPLE_INT_TBL
where hostname='host01'
order by begintime;

Die nächste SQL-Anweisung berechnet ein Histogramm der Festplatten-E/A-Aktivität. Ich bin sicher, jemand anderes kann sich eine elegantere Version einfallen lassen, da meine SQL-Anweisungen tendenziell mehr Brute-Force sind.

select first.num_count as "<=10ms",
 second.num_count as "<=20ms",
 third.num_count as "<=50ms",
 fourth.num_count as "<=100ms",
 fifth.num_count as "<=500ms",
 final.num_count as ">500ms"
from
(select count(*) as num_count from CHM.CHMOS_DEVICE_INT_TBL 
 where devid='sda1' and latency between 0 and 10) first,
(select count(*) as num_count from CHM.CHMOS_DEVICE_INT_TBL 
 where devid='sda1' and latency between 11 and 20) second,
(select count(*) as num_count from CHM.CHMOS_DEVICE_INT_TBL 
 where devid='sda1' and latency between 21 and 50) third,
(select count(*) as num_count from CHM.CHMOS_DEVICE_INT_TBL 
 where devid='sda1' and latency between 51 and 100) fourth,
(select count(*) as num_count from CHM.CHMOS_DEVICE_INT_TBL 
 where devid='sda1' and latency between 101 and 500) fifth,
(select count(*) as num_count from CHM.CHMOS_DEVICE_INT_TBL 
 where devid='sda1' and latency > 500) final;
<=10ms     <=20ms     <=50ms     <=100ms    <=500ms    >500ms
---------- ---------- ---------- ---------- ---------- ----------
    150693          10         1          0          0          0

Das CHM-Schema enthält eine große Menge an Informationen. Ich erwarte hauptsächlich, dass diese Informationen nur lehrreich sind und die meisten Leute die CHM-Tabellen nicht direkt abfragen werden. Aber das ist eine gute Information und kann anderen helfen.