Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Podróż przez GIMR

Oracle Grid Infrastructure obejmuje Cluster Health Monitor (CHM), który regularnie rejestruje informacje o wydajności związane z systemem operacyjnym. We wczesnych wersjach CHM używa bazy danych Berkeley jako magazynu danych. W Grid Infrastructure 12.1.0.2 wymagane jest teraz używanie bazy danych Oracle do przechowywania danych. Ta baza danych Oracle nosi nazwę Grid Infrastructure Management Repository (GIMR). Wiele osób już wie, że GIMR działa z nazwą bazy danych „-MGMTDB” i działa tylko na jednym węźle klastra GI. Jeśli ten węzeł stanie się dostępny, GI automatycznie uruchomi GIMR na pozostałym węźle.

Powyższy akapit dotyczy wszystkich podstawowych informacji, które zamierzam podać w GIMR. Jeśli czytelnik chce dowiedzieć się więcej, z pewnością może wyszukać w sieci informacje o tym, jak zarządzać (jak mało zarządzania tą bazą danych jest potrzebnych) oraz jak uruchamiać i zatrzymywać bazę danych oraz jej dedykowany odbiornik.

Ten wpis na blogu ma na celu edukowanie czytelnika, jak uzyskać dostęp do bazy danych GIMR i wydobyć z niej znaczące informacje. Więcej wyszukiwania w Internecie może pokazać, jak używać narzędzi wiersza poleceń do eksportowania danych z GIMR. Jest też narzędzie graficzne, CHMOSG, którego można użyć do przeglądania danych CHM w repozytorium. Ale dla zabawy pomyślałem, że pokażę, jak dostać się bezpośrednio do danych.

Najpierw musisz wiedzieć, na którym węźle działa baza danych. Na dowolnym węźle mogę wydać następujące:

[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

Powyższe pokazuje, że baza danych i słuchacz są uruchomione na hoście01. Teraz, gdy znam węzeł instancji, mogę się do niego wpisać i ustawić zmienne środowiskowe tak, aby łączyły się z instancją. Ta baza danych wyczerpuje się z domu Grid Infrastructure, a nie z domu RDBMS. Więc muszę poprawnie ustawić ORACLE_HOME. Ponadto nazwa instancji zaczyna się od myślnika, więc muszę umieścić identyfikator SID w podwójnych cudzysłowach.

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

Mogę teraz połączyć się z instancją i sprawdzić, czy mam połączenie z właściwą.

[oracle@host01 ~]$ sqlplus /nolog
SQL*Plus:wydanie 12.1.0.2.0 Produkcja w poniedziałek 21 grudnia 15:17:21 2015
Prawa autorskie (c) 1982, 2014, Oracle. Wszelkie prawa zastrzeżone.
SQL> connect / as sysdbaConnected.SQL> wybierz nazwa_instancji z v$instance;
INSTANCE_NAME-----------------MGMTDB

Ta baza danych jest wielodostępną bazą danych Oracle, która jest jednym PDB. Muszę określić nazwę PDB. Nazwa PDB będzie taka sama jak nazwa klastra. Mogę przypomnieć sobie nazwę klastra, wysyłając zapytanie do V$ACTIVE_SERVICES.

SQL> wybierz nazwę,con_id 2 z v$active_services;
NAME CON_ID------------------------------------------------- -------- ----------mój_klaster 3-MGMTDBXDB 1_mgmtdb 1SYS$BACKGROUND 1SYS$USERS 1
SQL> alter session set container=mój_klaster;
Sesja zmieniona.

Tylko jedna usługa ma identyfikator kontenera nie równy 1 (1 to CDB), więc musi to być plik PDB, którego szukam. Modyfikuję moją sesję tak, aby używała pliku PDB jako kontenera.

Moim kolejnym zadaniem jest uzyskanie listy tabel należących do CHM.

SQL> wybierz nazwa_tabeli z dba_tables, gdzie właściciel='CHM' 2 zamów według nazwy_tabeli;
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_SYSTIC_TBLCHMOS_DIVICE_INT_TBLCHMOS_FILESYSTEM_INT_TBLCHMOS_NIC_INT_TBLCHMOS_PROCESS_INT_TBLCHMOS_SYSTIC_TBLCHMOS_SYSTIC_TBLCHMOS_INT_BLCHMOS_STATIC_TBLCHMOS_INTE 

Tylko 10 tabel w schemacie. Pierwsza tabela na liście zawiera informacje o konfiguracji monitorowanych hostów przez CHM.

SQL> wybierz nazwę hosta,NUMPHYCPUS,NUMCPUS,NUMDISKS 2 z CHM.CHMOS_ACTIVE_CONFIG_INT_TBL;
NAZWA HOSTA NUMPHYCPUS NUMCPUS NUMDISKS---------- ---------- ---------- ----------host01 1 2 3host02 1 2 3

Widzę, że CHM zbiera informacje o dwóch węzłach w klastrze. Widzę liczbę fizycznych procesorów dla każdego węzła i całkowitą liczbę rdzeni (2). Te węzły mają również 3 dyski.

Możemy również uzyskać informacje o systemie operacyjnym.

SQL> wybierz nazwę hosta, nazwę os, typ układu 2 z CHM.CHMOS_STATIC_CONFIG_INT_TBL;
NAZWA HOSTA NAZWA OBSŁUGI TYP CHIP----------- ---------- --------------------host01 Linux Intel( R)host02 Linux Intel(R)

W tych tabelach jest dużo informacji i wystarczy kilka prób i błędów, aby dowiedzieć się, co tam jest. Na przykład mogę użyć tego zapytania, aby uzyskać liczbę procesów uruchomionych na hoście01 uporządkowanych w czasie.

wybierz czas rozpoczęcia,count(*)z CHM.CHMOS_PROCESS_INT_TBLgdzie hostname='host01'grupuj według czasu rozpoczęcia, kolejność według czasu rozpoczęcia;

Celowo nie uwzględniłem danych wyjściowych, ponieważ byłby zbyt długi na wpis na blogu. Oto kilka dodatkowych przykładowych zapytań, które możesz wypróbować w swojej bazie danych GIMR.

Aktywność we/wy dysku dla określonego hosta w czasie.

wybierz czas rozpoczęcia,DISK_BYTESREADPERSEC/1024/1024 jako MB_READ_SEC,DISK_BYTESWRITTENPERSEC/1024/1024 jako MB_WRITE_SEC,DISK_NUMIOSPERSEC jako IO_PER_SEC z CHM.CHMOS_SYSTEM_SAMPLE_INT_TBLwhere hostname='host01'zamówienie przed rozpoczęciem 

Zamiana określonego hosta w czasie.

wybierz czas rozpoczęcia,swpin,swpoutz CHM.CHMOS_SYSTEM_SAMPLE_INT_TBLwhere hostname='host01'kolejność według czasu rozpoczęcia;

Następna instrukcja SQL obliczy histogram aktywności we/wy dysku. Jestem pewien, że ktoś inny może wymyślić bardziej elegancką wersję, ponieważ moje instrukcje SQL są bardziej brutalne.

wybierz first.num_count jako „<=10ms”, second.num_count jako „<=20ms”, third.num_count jako „<=50ms”, four.num_count jako „<=100ms”, five.num_count jako „<=500ms", final.num_count as ">500ms"from(wybierz count(*) jako num_count z CHM.CHMOS_DEVICE_INT_TBL gdzie devid='sda1' i opóźnienie od 0 do 10) najpierw,(wybierz count(*) jako num_count z CHM .CHMOS_DEVICE_INT_TBL gdzie devid='sda1' i opóźnienie między 11 a 20) sekund,(wybierz count(*) jako num_count z CHM.CHMOS_DEVICE_INT_TBL gdzie devid='sda1' i opóźnienie między 21 a 50) trzeci,(wybierz count(*) jako num_count z CHM.CHMOS_DEVICE_INT_TBL gdzie devid='sda1' i opóźnienie między 51 a 100) czwarty (wybierz count(*) jako num_count z CHM.CHMOS_DEVICE_INT_TBL gdzie devid='sda1' i opóźnienie między 101 a 500) piąty,(wybierz count(*) jako num_count z CHM.CHMOS_DEVICE_INT_TBL gdzie devid='sda1' i latency> 500) final;
<=10ms <=20ms <=50ms <=100ms <=500ms>500ms---------- ---------- ---------- ---------- ---------- ---------- 150693 10 1 0 0 0

W schemacie CHM znajduje się duża ilość informacji. Spodziewam się głównie, że te informacje są tylko edukacyjne i większość ludzi nie będzie bezpośrednio odpytywać tabel CHM. Ale jest to dobra informacja, która może pomóc innym.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zrozumienie Javy Oracle na Macu

  2. R12.2 Podsumowanie cyklu aktualizacji online

  3. Korzystanie z usług heterogenicznych Oracle® z dwoma źródłami danych ODBC

  4. Uzyskaj nazwę miesiąca od daty w Oracle

  5. Oracle uzyskuje wartość sumy kontrolnej dla porcji danych zdefiniowanej przez klauzulę select