sql >> Database >  >> RDS >> Oracle

Een reis door de GIMR

Oracle Grid Infrastructure omvat de Cluster Health Monitor (CHM) die regelmatig OS-gerelateerde prestatie-informatie vastlegt. In vroege versies gebruikt CHM een Berkeley DB voor zijn gegevensopslag. In Grid Infrastructure 12.1.0.2 is het nu verplicht om een ​​Oracle-database te gebruiken voor de datastore. Deze Oracle-database wordt de Grid Infrastructure Management Repository (GIMR) genoemd. Veel mensen weten al dat de GIMR draait met de databasenaam "-MGMTDB" en op slechts één knooppunt van het GI-cluster draait. Mocht dat knooppunt beschikbaar komen, dan start GI de GIMR automatisch op een overgebleven knooppunt.

De bovenstaande paragraaf gaat over alle achtergrondinformatie die ik ga geven over de GIMR. Als de lezer meer wil weten, kan hij zeker op internet zoeken naar informatie over hoe te beheren (het beetje beheer is nodig van deze database), en hoe de database en zijn toegewijde luisteraar te starten en te stoppen.

Deze blogpost is bedoeld om de lezer te leren hoe hij toegang kan krijgen tot de GIMR-database en er zinvolle informatie uit kan halen. Meer zoeken op internet kan laten zien hoe u opdrachtregelhulpprogramma's kunt gebruiken om gegevens uit de GIMR te exporteren. En er is een grafisch hulpprogramma, CHMOSG, dat kan worden gebruikt om de CHM-gegevens in de repository te bekijken. Maar voor de lol dacht ik dat ik zou laten zien hoe je rechtstreeks bij de gegevens kunt komen.

Eerst moet u weten op welk knooppunt de database wordt uitgevoerd. Op elk knooppunt kan ik het volgende uitgeven:

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

Het bovenstaande laat zien dat de database en de luisteraar op host01 draaien. Nu ik het knooppunt van de instantie ken, kan ik me aanmelden bij dat knooppunt en mijn omgevingsvariabelen instellen om verbinding te maken met de instantie. Deze database loopt uit de Grid Infrastructure-home, niet de RDBMS-home. Dus ik moet mijn ORACLE_HOME correct instellen. De instantienaam begint ook met een streepje, dus ik moet de SID tussen dubbele aanhalingstekens plaatsen.

[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"

Ik kan nu verbinding maken met de instantie en controleren of ik ben verbonden met de juiste.

[oracle@host01 ~]$ sqlplus /nolog
SQL*Plus:release 12.1.0.2.0 productie op ma 21 december 15:17:21 2015
Copyright (c) 1982, 2014, Oracle. Alle rechten voorbehouden.
SQL> connect / as sysdbaConnected.SQL> selecteer instance_name van v$instance;
INSTANCE_NAME-----------------MGMTDB

Deze database is een Oracle multitenant database, waarvan één PDB. Ik moet de PDB-naam bepalen. De PDB-naam is hetzelfde als de clusternaam. Ik kan mezelf aan de clusternaam herinneren door V$ACTIVE_SERVICES op te vragen.

SQL> selecteer naam,con_id 2 van v$active_services;
NAAM CON_ID--------------------------------------------- -------- ----------mijn_cluster 3-MGMTDBXDB 1_mgmtdb 1SYS$ACHTERGROND 1SYS$USERS 1
SQL> alter session set container=my_cluster;
Sessie gewijzigd.

Slechts één service heeft de container-ID niet gelijk aan 1 (1 is de CDB), dus het moet de PDB zijn waarnaar ik op zoek ben. Ik pas mijn sessie aan om de PDB als container te gebruiken.

Mijn volgende taak is om een ​​lijst te krijgen met tabellen die eigendom zijn van CHM.

SQL> selecteer table_name uit dba_tables waar owner='CHM' 2 sorteer op table_name;
TABLE_NAME---------------------------------------------- ----------------------------------CHMOS_ACTIVE_CONFIG_INT_TBLCHMOS_ASM_CONFIG_INT_TBLCHMOS_CPU_INT_TBLCHMOS_DEVICE_INT_TBLCHMOS_FILESYSTEM_INT_TBLCHMOS_NIC_INT_TBLCHMOS_PROCESS_INT_TBLCHMOS_STATIC_CONFIG_INT_TBLCHMOS_SYSTEM_PERIODIC_INT_TBLCHMOS_SYSTEM_SAMPLE_INT_TBL

Slechts 10 tabellen in het schema. De eerste tabel in de lijst toont wat configuratie-informatie over de door CHM gecontroleerde hosts.

SQL> selecteer hostnaam,NUMPHYCPUS,NUMCPUS,NUMDISKS 2 van CHM.CHMOS_ACTIVE_CONFIG_INT_TBL;
HOSTNAAM NUMPHYCPUS NUMCPUS NUMDISKS---------- ---------- ---------- ----------host01 1 2 3host02 1 2 3

Ik kan zien dat CHM informatie verzamelt over twee knooppunten in het cluster. Ik kan het aantal fysieke CPU's voor elk knooppunt en het aantal totale kernen zien (2). Deze nodes hebben ook 3 schijven.

We kunnen ook informatie krijgen over het besturingssysteem.

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

Er is een goede hoeveelheid informatie in deze tabellen en het kost wat vallen en opstaan ​​om erachter te komen wat er in staat. Ik kan deze query bijvoorbeeld gebruiken om een ​​telling te krijgen van processen die op host01 worden uitgevoerd in de loop van de tijd.

selecteer begintime,count(*)uit CHM.CHMOS_PROCESS_INT_TBLwhere hostname='host01'groep op begintimeorder op begintime;

Ik heb opzettelijk de output niet opgenomen omdat het te lang zou zijn voor een blogpost. Hier zijn nog een paar voorbeeldvragen die u kunt proberen in uw GIMR-database.

Schijf-I/O-activiteit voor een specifieke host in de loop van de tijd.

selecteer begintime,DISK_BYTESREADPERSEC/1024/1024 als MB_READ_SEC,DISK_BYTESWRITTENPERSEC/1024/1024 als MB_WRITE_SEC,DISK_NUMIOSPERSEC als IO_PER_SECvan CHM.CHMOS_SYSTEM_SAMPLE_INT_TBLwaar hostnaam='host01'order> 

In de loop van de tijd wisselen van een specifieke host.

selecteer begintime,swpin,swpoutvan CHM.CHMOS_SYSTEM_SAMPLE_INT_TBLwhere hostname='host01'bestel op begintijd;

De volgende SQL-instructie berekent een histogram van schijf-I/O-activiteit. Ik weet zeker dat iemand anders met een elegantere versie kan komen, aangezien mijn SQL-statements vaak bruter zijn.

selecteer first.num_count als "<=10ms", second.num_count als "<=20ms", third.num_count als "<=50ms", four.num_count als "<=100ms", vijfde.num_count als "<=500ms", final.num_count as ">500ms"from(select count(*) as num_count from CHM.CHMOS_DEVICE_INT_TBL waar devid='sda1' en latentie tussen 0 en 10) eerst,(select count(*) as num_count van CHM .CHMOS_DEVICE_INT_TBL waar devid='sda1' en latentie tussen 11 en 20) seconde,(select count(*) as num_count van CHM.CHMOS_DEVICE_INT_TBL waar devid='sda1' en latentie tussen 21 en 50) derde,(select count(*) als num_count van CHM.CHMOS_DEVICE_INT_TBL waar devid='sda1' en latentie tussen 51 en 100) vierde,(select count(*) als num_count van CHM.CHMOS_DEVICE_INT_TBL waar devid='sda1' en latency tussen 101 en 500) vijfde,(selecteer count(*) as num_count van CHM.CHMOS_DEVICE_INT_TBL waarbij devid='sda1' en latentie> 500) definitief;
<=10ms <=20ms <=50ms <=100ms <=500ms>500ms---------- ---------- ---------- ---------- ---------- ---------- 150693 10 1 0 0 0

Er is een goede hoeveelheid informatie in het CHM-schema. Ik verwacht dat deze informatie vooral educatief is en dat de meeste mensen de CHM-tabellen niet rechtstreeks zullen doorzoeken. Maar dit is goede informatie om te weten en kan anderen helpen.


  1. Opgeslagen procedure uitvoeren in SQL Developer?

  2. Hoe een varchar-kolom te splitsen als meerdere waarden in SQL?

  3. Een lange tekenreeks invoegen in CLOB-gegevenstype in Oracle

  4. 3 manieren om HEX naar INT te converteren in SQL Server (T-SQL)