sql >> Databáze >  >> RDS >> Oracle

Výlet přes GIMR

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'derBL 

Vý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.


  1. Jak vrátit RefCursor z funkce Oracle?

  2. Velké úložiště .patch_storage

  3. Jak funguje funkce REGEXP_INSTR() v MySQL

  4. Jak nastavit hodnotu pole složené proměnné pomocí dynamického SQL