Oracle Grid Infrastructure inkluderer Cluster Health Monitor (CHM), som regelmæssigt fanger OS-relateret ydeevneinformation. I tidlige versioner bruger CHM en Berkeley DB til sit datalager. I Grid Infrastructure 12.1.0.2 er det nu nødvendigt at bruge en Oracle-database til datalageret. Denne Oracle-database kaldes Grid Infrastructure Management Repository (GIMR). Mange mennesker er allerede klar over, at GIMR kører med databasenavnet "-MGMTDB" og kun kører på én node i GI-klyngen. Hvis den node bliver tilgængelig, vil GI automatisk starte GIMR på en resterende node.
Ovenstående afsnit handler om alle de baggrundsoplysninger, jeg vil give om GIMR. Hvis læseren ønsker at vide mere, kan de helt sikkert lave en websøgning efter information om, hvordan man administrerer (hvor lidt administration, der kræves af denne database), og hvordan man starter og stopper databasen og dens dedikerede lytter.
Dette blogindlæg har til hensigt at uddanne læseren om, hvordan man får adgang til GIMR-databasen og udtrækker meningsfuld information fra den. Mere websøgning kan vise, hvordan man bruger kommandolinjeværktøjer til at eksportere data fra GIMR. Og der er et grafisk hjælpeprogram, CHMOSG, der kan bruges til at se CHM-dataene i depotet. Men for sjov skyld tænkte jeg, at jeg ville vise, hvordan man kommer direkte til dataene.
Først skal du vide, hvilken node databasen kører på. På enhver node kan jeg udstede følgende:
[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
Ovenstående viser databasen og lytteren kører på host01. Nu hvor jeg kender forekomstens node, kan jeg logge på den node og indstille mine miljøvariabler til at oprette forbindelse til forekomsten. Denne database løber tør for Grid Infrastructure-hjemmet, ikke RDBMS-hjemmet. Så jeg skal indstille min ORACLE_HOME korrekt. Forekomstens navn starter også med en bindestreg, så jeg skal pakke SID'et ind i dobbelte anførselstegn.
[oracle@host01 ~]$ eksport ORACLE_HOME=/u01/app/crs12.1.0.2[oracle@host01 ~]$ eksport PATH=$ORACLE_HOME/bin:$PATH[oracle@host01 ~]$ eksport ORACLE_SID="-MGMTDB"
Jeg kan nu oprette forbindelse til instansen og bekræfte, at jeg er forbundet til den korrekte.
[oracle@host01 ~]$ sqlplus /nolog
SQL*Plus:Udgivelse 12.1.0.2.0 Produktion mandag 21. december 15:17:21 2015
Copyright (c) 1982, 2014, Oracle. Alle rettigheder forbeholdes.
SQL> connect / as sysdbaConnected.SQL> vælg instance_name fra v$instance;
INSTANCE_NAME----------------MGMTDB
Denne database er en Oracle multitenant-database, som en PDB. Jeg er nødt til at bestemme PDB-navnet. PDB-navnet vil være det samme som klyngenavnet. Jeg kan minde mig selv om klyngenavnet ved at forespørge V$ACTIVE_SERVICES.
SQL> vælg navn, con_id 2 fra v$active_services;
NAVN CON_ID---------------------------------------------- -------- ----------min_klynge 3-MGMTDBXDB 1_mgmtdb 1SYS$BACKGROUND 1SYS$USERS 1
SQL> alter session set container=my_cluster;
Session ændret.
Kun én tjeneste har container-id'et, der ikke er lig med 1 (1 er CDB), så det må være det PDB, jeg leder efter. Jeg ændrer min session til at bruge PDB som sin beholder.
Min næste opgave er at få en liste over borde, der ejes af CHM.
SQL> vælg tabelnavn fra dba_tables, hvor ejer='CHM' 2 sorteres efter tabelnavn;
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_TBLCHMLETSSYSTEM_PRINT_TBLCHMOS_STATIC_TBLCHMLETCAMP_SYSTEM_STATIC_TBLCHMOS_SYSTEM_STATIC_TBLCHMOS_FILESYSTEM_Kun 10 tabeller i skemaet. Den første tabel på listen viser nogle konfigurationsoplysninger om de CHM-overvågede værter.
SQL> vælg værtsnavn,NUMPHYCPUS,NUMCPUS,NUMDISKS 2 fra CHM.CHMOS_ACTIVE_CONFIG_INT_TBL;HOSTNAVN NUMPHYCPUS NUMCPUS NUMDISKS---------------- ---------- ---------- ----------host01 1 2 3host02 1 2 3Jeg kan se, at CHM samler information om to noder i klyngen. Jeg kan se antallet af fysiske CPU'er for hver node og antallet af samlede kerner (2). Disse noder har også 3 diske.
Vi kan også lære information om operativsystemet.
SQL> vælg værtsnavn, osnavn, chiptype 2 fra CHM.CHMOS_STATIC_CONFIG_INT_TBL;VÆRTNAVN OSNAVN CHIPTYPE------------ ---------- --------------------host01 Linux Intel( R)host02 Linux Intel(R)Der er en god mængde information i disse tabeller, og det kræver bare nogle forsøg og fejl at finde ud af, hvad der er derinde. For eksempel kan jeg bruge denne forespørgsel til at få en optælling af processer, der kører på host01, bestilt over tid.
vælg starttid, tæl(*) fra CHM.CHMOS_PROCESS_INT_TBLhvor værtsnavn='host01'grupper efter begyndelsesrækkefølge efter begyndelsestid;Jeg har med vilje ikke inkluderet output, da det ville være for langt til et blogindlæg. Her er et par flere eksempelforespørgsler, som du kan prøve på din GIMR-database.
Disk I/O-aktivitet for en bestemt vært over tid.
vælg starttidspunkt,DISK_BYTESREADPERSEC/1024/1024 som MB_READ_SEC,DISK_BYTESWRITTENPERSEC/1024/1024 som MB_WRITE_SEC,DISK_NUMIOSPERSEC som IO_PER_SECfra CHM.CHMOS_INT_SEC fra CHM.CHMOS_INT_SAMPP>hvor værtsnavnet_system_TBL0begynd=hvortil_SYSTEM_TBLAMP>begynd=time_SYSTEM_SAMP>Skift på en bestemt vært over tid.
vælg starttid,swpin,swpout fra CHM.CHMOS_SYSTEM_SAMPLE_INT_TBLhvor værtsnavn='host01'rækkefølge efter starttid;Den næste SQL-sætning vil beregne et histogram over disk I/O-aktivitet. Jeg er sikker på, at en anden kan komme med en mere elegant version, da mine SQL-sætninger har en tendens til at være mere brutale.
vælg first.num_count som "<=10ms", second.num_count som "<=20ms", third.num_count som "<=50ms", fourth.num_count som "<=100ms", fifth.num_count som "<=500ms", final.num_count as ">500ms"from(vælg count(*) som num_count fra CHM.CHMOS_DEVICE_INT_TBL hvor devid='sda1' og latens mellem 0 og 10) først,(vælg count(*) som num_count fra CHM .CHMOS_DEVICE_INT_TBL hvor devid='sda1' og latens mellem 11 og 20) sekund, (vælg count(*) som num_count fra CHM.CHMOS_DEVICE_INT_TBL hvor devid='sda1' og latens mellem 21 og 50) tredje, (vælg count(*) som num_count fra CHM.CHMOS_DEVICE_INT_TBL hvor devid='sda1' og latens mellem 51 og 100) fjerde, (vælg count(*) som num_count fra CHM.CHMOS_DEVICE_INT_TBL hvor devid='sda1' og latens mellem 101 og 500 count(*) som num_count fra CHM.CHMOS_DEVICE_INT_TBL hvor devid='sda1' og latency> 500) final;<=10ms <=20ms <=50ms <=100ms <=500ms>500ms------------ ---------- ---------- ---------- ---------- ---------- 150693 10 1 0 0 0
Der er en god mængde information i CHM-skemaet. Jeg forventer for det meste, at denne information kun er lærerig, og de fleste mennesker vil ikke spørge direkte til CHM-tabellerne. Men dette er god information at kende og kan hjælpe andre.