Oracle Grid Infrastructure zahrnuje Cluster Health Monitor (CHM), který pravidelně zachycuje informace o výkonu související s operačním systémem. V dřívějších verzích CHM používá pro úložiště dat Berkeley DB. V Grid Infrastructure 12.1.0.2 je nyní vyžadováno použití databáze Oracle pro úložiště dat. Tato databáze Oracle se nazývá Grid Infrastructure Management Repository (GIMR). Mnoho lidí si již uvědomuje, že GIMR běží s názvem databáze „-MGMTDB“ a běží pouze na jednom uzlu GI clusteru. Pokud bude tento uzel dostupný, GI automaticky spustí GIMR na zbývajícím uzlu.
Výše uvedený odstavec se týká všech základních informací, které poskytnu o GIMR. Pokud se čtenář chce dozvědět více, jistě si může na webu vyhledat informace o tom, jak spravovat (jak málo správy je potřeba u této databáze) a jak spustit a zastavit databázi a její vyhrazený posluchač.
Tento blogový příspěvek má za cíl vzdělávat čtenáře o tom, jak přistupovat k databázi GIMR a získávat z ní smysluplné informace. Více vyhledávání na webu může ukázat, jak používat nástroje příkazového řádku k exportu dat z GIMR. A existuje grafický nástroj CHMOSG, který lze použít k zobrazení dat CHM v úložišti. Ale jen tak pro zábavu jsem si řekl, že ukážu, jak se k datům dostat přímo.
Nejprve musíte vědět, na kterém uzlu databáze běží. Na libovolném uzlu mohu vydat následující:
[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
Výše uvedené ukazuje, že databáze a posluchač běží na host01. Nyní, když znám uzel instance, mohu se k tomuto uzlu přihlásit a nastavit své proměnné prostředí tak, aby se připojily k instanci. Tato databáze vybíhá z domovské sítě Grid Infrastructure, nikoli z domova RDBMS. Potřebuji tedy správně nastavit svůj ORACLE_HOME. Také název instance začíná pomlčkou, takže musím zabalit SID do dvojitých uvozovek.
[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"
Nyní se mohu připojit k instanci a ověřit, že jsem připojen ke správné instanci.
[oracle@host01 ~]$ sqlplus /nolog
SQL*Plus:Vydání 12.1.0.2.0 Výroba v pondělí 21. prosince 15:17:21 2015
Autorská práva (c) 1982, 2014, Oracle. Všechna práva vyhrazena.
SQL> připojit / jako sysdbaConnected.SQL> vybrat název_instance z v$instance;
INSTANCE_NAME-----------------MGMTDB
Tato databáze je Oracle multitenant databáze, která jeden PDB. Potřebuji určit název PDB. Název PDB bude stejný jako název clusteru. Název clusteru si mohu připomenout dotazem na V$ACTIVE_SERVICES.
SQL> vyberte název,con_id 2 z v$active_services;
NAME CON_ID--------------------------------------------- -------- ----------můj_shluk 3-MGMTDBXDB 1_mgmtdb 1SYS$BACKGROUND 1SYS$USERS 1
SQL> alter session set container=my_cluster;
Relace změněna.
Pouze jedna služba nemá ID kontejneru rovno 1 (1 je CDB), takže to musí být PDB, kterou hledám. Upravuji svou relaci tak, aby používala PDB jako svůj kontejner.
Mým dalším úkolem je získat seznam tabulek vlastněných CHM.
SQL> vyberte název_tabulky z dba_tables, kde vlastník='CHM' 2 seřaďte podle názvu_tabulky;
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
Pouze 10 tabulek ve schématu. První tabulka v seznamu ukazuje některé konfigurační informace o hostitelích monitorovaných CHM.
SQL> vyberte název hostitele,NUMPHYCPUS,NUMCPUS,NUMDISKS 2 z CHM.CHMOS_ACTIVE_CONFIG_INT_TBL;
HOSTNAME NUMPHYCPUS NUMCPUS NUMDISKS---------- ---------- ---------- ----------host01 1 2 3host02 1 2 3
Vidím, že CHM shromažďuje informace o dvou uzlech v clusteru. Vidím počet fyzických CPU pro každý uzel a celkový počet jader (2). Tyto uzly mají také 3 disky.
Můžeme se také dozvědět informace o OS.
SQL> vyberte název hostitele, název os, typ čipu 2 z CHM.CHMOS_STATIC_CONFIG_INT_TBL;
HOSTNAME OSNAME CHIPTYPE---------- ---------- ---------------------host01 Linux Intel( R)host02 Linux Intel(R)
V těchto tabulkách je velké množství informací a stačí jen několik pokusů a omylů, abyste zjistili, co tam je. Například mohu tento dotaz použít k získání počtu procesů běžících na hostiteli 01 uspořádaných v průběhu času.
select begintime,count(*)from CHM.CHMOS_PROCESS_INT_TBLwhere hostname='host01'group by begintimeorder by begintime;
Záměrně jsem nezahrnul výstup, protože by byl příliš dlouhý na blogový příspěvek. Zde je několik dalších vzorových dotazů, které můžete vyzkoušet ve své databázi GIMR.
Aktivita I/O disku pro konkrétního hostitele v průběhu času.
vyberte begintime,DISK_BYTESREADPERSEC/1024/1024 jako MB_READ_SEC, DISK_BYTESWRITTENPERSEC/1024/1024 jako MB_WRITE_SEC, DISK_NUMIOSPERSEC jako IO_PER_SECfrom CHM.CHMOS'SYSTEM_SAMPLEstartname;wherehostname10'derBLVýměna na konkrétním hostiteli v průběhu času.
vyberte begintime,swpin,swpoutfrom CHM.CHMOS_SYSTEM_SAMPLE_INT_TBLwhere hostname='host01'uspořádejte podle begintime;Další příkaz SQL vypočítá histogram I/O aktivity disku. Jsem si jistý, že někdo jiný může přijít s elegantnější verzí, protože moje příkazy SQL bývají více hrubou silou.
vyberte first.num_count jako "<=10ms", second.num_count jako "<=20ms", third.num_count jako "<=50ms", four.num_count jako "<=100ms", páté.num_count jako "<=500ms", final.num_count as ">500ms"from(vyberte count(*) jako num_count z CHM.CHMOS_DEVICE_INT_TBL kde devid='sda1' a latence mezi 0 a 10) jako první,(vyberte count(*) jako num_count z CHM .CHMOS_DEVICE_INT_TBL kde devid='sda1' a latence mezi 11 a 20) sekundou,(vyberte počet(*) jako num_count z CHM.CHMOS_DEVICE_INT_TBL kde devid='sda1' a latence mezi 21 a 50) třetí,(vyberte počet(*) jako num_count z CHM.CHMOS_DEVICE_INT_TBL kde devid='sda1' a latence mezi 51 a 100) čtvrtá, (vyberte count(*) jako num_count z CHM.CHMOS_DEVICE_INT_TBL kde devid='sda1' a latence mezi 101 a 500) pátá,(select) count(*) jako num_count z CHM.CHMOS_DEVICE_INT_TBL kde devid='sda1' a latence> 500) final;<=10ms <=20ms <=50ms <=100ms <=500ms>500ms---------- ---------- ----------- ---------- ---------- ---------- 150693 10 1 0 0 0
Ve schématu CHM je velké množství informací. Očekávám většinou, že tyto informace jsou pouze vzdělávací a většina lidí se nebude přímo dotazovat na tabulky CHM. Ale je to dobrá informace, kterou je dobré vědět a může pomoci ostatním.