Oracle Grid Infrastructure inkluderar Cluster Health Monitor (CHM) som regelbundet fångar OS-relaterad prestandainformation. I tidiga versioner använder CHM en Berkeley DB för sitt datalager. I Grid Infrastructure 12.1.0.2 krävs nu att en Oracle-databas används för datalagret. Denna Oracle-databas kallas Grid Infrastructure Management Repository (GIMR). Många människor är redan medvetna om att GIMR körs med databasnamnet "-MGMTDB" och körs på endast en nod i GI-klustret. Om den noden blir tillgänglig kommer GI automatiskt att starta GIMR på en återstående nod.
Ovanstående stycke handlar om all bakgrundsinformation jag kommer att tillhandahålla om GIMR. Om läsaren vill veta mer kan de säkert göra en webbsökning efter information om hur man hanterar (vilken lite hantering som behövs av denna databas), och hur man startar och stoppar databasen och dess dedikerade lyssnare.
Det här blogginlägget syftar till att utbilda läsaren om hur man kommer åt GIMR-databasen och extraherar meningsfull information från den. Mer webbsökning kan visa hur man använder kommandoradsverktyg för att exportera data från GIMR. Och det finns ett grafiskt verktyg, CHMOSG, som kan användas för att se CHM-data i förvaret. Men bara för skojs skull tänkte jag visa hur man kommer till data direkt.
Först måste du veta vilken nod databasen körs på. På vilken nod som helst kan jag utfärda följande:
[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
Ovanstående visar databasen och lyssnaren körs på host01. Nu när jag känner till instansens nod kan jag logga in på den noden och ställa in mina miljövariabler för att ansluta till instansen. Denna databas tar slut från Grid Infrastructure-hemmet, inte RDBMS-hemmet. Så jag måste ställa in min ORACLE_HOME korrekt. Dessutom börjar instansnamnet med ett bindestreck så jag måste linda in SID:t med dubbla citattecken.
[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"
Jag kan nu ansluta till instansen och verifiera att jag är ansluten till den rätta.
[oracle@host01 ~]$ sqlplus /nolog
SQL*Plus:Release 12.1.0.2.0 Produktion den mån 21 dec 15:17:21 2015
Upphovsrätt (c) 1982, 2014, Oracle. Alla rättigheter reserverade.
SQL> anslut / som sysdbaConnected.SQL> välj instansnamn från v$instans;
INSTANCE_NAME----------------MGMTDB
Denna databas är en Oracle multitenant-databas, som en PDB. Jag måste bestämma PDB-namnet. PDB-namnet kommer att vara detsamma som klusternamnet. Jag kan påminna mig själv om klusternamnet genom att fråga V$ACTIVE_SERVICES.
SQL> välj namn, con_id 2 från v$active_services;
NAMN CON_ID---------------------------------------------- -------- ----------mitt_kluster 3-MGMTDBXDB 1_mgmtdb 1SYS$BACKGROUND 1SYS$USERS 1
SQL> alter session set container=my_cluster;
Sessionen har ändrats.
Endast en tjänst har container-id som inte är lika med 1 (1 är CDB) så det måste vara PDB jag letar efter. Jag ändrar min session för att använda PDB som dess behållare.
Min nästa uppgift är att få en lista över bord som ägs av CHM.
SQL> välj tabellnamn från dba_tables där ägare='CHM' 2 sorteras efter tabellnamn;
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_TBLCHMOS_SYSTEM_STATIC_TBLCHMOS_FILESYSTEM_INT_TBLCHMOS_NIC_INT_TBLCHMOS_PROCESS_INT_TBLCHMOS_STATIC_TBLCHMOS_SYSTEM_STATIC_TBLCHMLETCAMP_SYSTEM_STATIC_TBLCHMOS_SYSTEM_CONFIGOS-SYSTEM_Bara 10 tabeller i schemat. Den första tabellen i listan visar lite konfigurationsinformation om CHM-övervakade värdar.
SQL> välj värdnamn,NUMPHYCPUS,NUMCPUS,NUMDISKS 2 från CHM.CHMOS_ACTIVE_CONFIG_INT_TBL;VÄRDNAMN NUMPHYCPUS NUMCPUS NUMDISKS---------------- ---------- ---------- ----------host01 1 2 3host02 1 2 3Jag kan se att CHM samlar information om två noder i klustret. Jag kan se antalet fysiska CPU:er för varje nod och antalet totala kärnor (2). Dessa noder har också 3 diskar.
Vi kan också lära oss information om operativsystemet.
SQL> välj värdnamn,osname,chiptype 2 från CHM.CHMOS_STATIC_CONFIG_INT_TBL;VÄRDNAMN OSNAME CHIPTYPE--------- ---------- --------------------host01 Linux Intel( R)host02 Linux Intel(R)Det finns en bra mängd information i dessa tabeller och det krävs bara lite försök och misstag för att ta reda på vad som finns där. Till exempel kan jag använda den här frågan för att få ett antal processer som körs på host01 ordnade över tid.
välj starttid, räkna(*) från CHM.CHMOS_PROCESS_INT_TBLdär hostname='host01'gruppera efter starttidordning efter starttid;Jag har medvetet inte inkluderat resultatet eftersom det skulle bli för långt för ett blogginlägg. Här är några fler exempelfrågor som du kan prova i din GIMR-databas.
Disk I/O-aktivitet för en specifik värd över tid.
välj starttid,DISK_BYTESREADPERSEC/1024/1024 som MB_READ_SEC,DISK_BYTESWRITTENPERSEC/1024/1024 som MB_WRITE_SEC,DISK_NUMIOSPERSEC som IO_PER_SECfrån CHM.CHMOS_INT_SECfrån CHM.CHMOS_INT_SECfrån CHM.CHMOS_INT_SAMPP; där börjar värdnamnetSYSTEM_TBLAMP>värd av värddator"Byter på en specifik värd över tiden.
välj starttid,swpin,swpoutfrån CHM.CHMOS_SYSTEM_SAMPLE_INT_TBLdär hostname='host01'ordning efter starttid;Nästa SQL-sats kommer att beräkna ett histogram över disk I/O-aktivitet. Jag är säker på att någon annan kan komma med en mer elegant version eftersom mina SQL-satser tenderar att vara mer brutala.
välj 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älj count(*) som num_count från CHM.CHMOS_DEVICE_INT_TBL där devid='sda1' och latens mellan 0 och 10) först, (välj count(*) som num_count från CHM .CHMOS_DEVICE_INT_TBL där devid='sda1' och latens mellan 11 och 20) sekund, (välj count(*) som num_count från CHM.CHMOS_DEVICE_INT_TBL där devid='sda1' och latens mellan 21 och 50) tredje, (välj count(*) som num_count från CHM.CHMOS_DEVICE_INT_TBL där devid='sda1' och latens mellan 51 och 100) fjärde, (välj count(*) som num_count från CHM.CHMOS_DEVICE_INT_TBL där devid='sda1' och latens mellan 101 och 500) count(*) som num_count från CHM.CHMOS_DEVICE_INT_TBL där devid='sda1' och latens> 500) final;<=10ms <=20ms <=50ms <=100ms <=500ms>500ms----------- ---------- ---------- ---------- ---------- ---------- 150693 10 1 0 0 0
Det finns en bra mängd information i CHM-schemat. Jag förväntar mig mest att denna information bara är pedagogisk och de flesta människor kommer inte att fråga direkt i CHM-tabellerna. Men detta är bra information att känna till och kan hjälpa andra.