Oracle Grid Infrastructure включва Cluster Health Monitor (CHM), който редовно улавя информация за производителността, свързана с ОС. В ранните версии CHM използва Berkeley DB за своето съхранение на данни. В Grid Infrastructure 12.1.0.2 вече се изисква да се използва база данни на Oracle за хранилището на данни. Тази база данни на Oracle се нарича хранилище за управление на Grid Infrastructure Management (GIMR). Много хора вече са наясно, че GIMR работи с името на базата данни „-MGMTDB“ и работи само на един възел от GI клъстера. Ако този възел стане наличен, GI автоматично ще стартира GIMR на оставащ възел.
Горният параграф е за цялата основна информация, която ще предоставя на GIMR. Ако читателят иска да знае повече, той със сигурност може да направи търсене в мрежата за информация как да управлява (какво малко управление е необходимо на тази база данни) и как да стартира и спре базата данни и нейния специален слушател.
Тази публикация в блога има за цел да образова читателя как да получи достъп до базата данни GIMR и да извлече смислена информация от нея. Повече търсене в мрежата може да покаже как да използвате помощните програми на командния ред за експортиране на данни от GIMR. Има и графична помощна програма, CHMOSG, която може да се използва за преглед на CHM данните в хранилището. Но само за забавление реших да покажа как да стигна директно до данните.
Първо, трябва да знаете на кой възел се изпълнява базата данни. На всеки възел мога да издам следното:
[oracle@host01 bin]$ cd /u01/app/crs12.1.0.2[oracle@host01 bin]$ ./crs_stat -t | grep -i mgmtora.MGMTLSNR ora....nr.type ОНЛАЙН ОНЛАЙН host01 ora.mgmtdb ora....db.type ОНЛАЙН ОНЛАЙН хост01
Горното показва, че базата данни и слушателят работят на host01. Сега, когато познавам възела на екземпляра, мога да вляза в този възел и да настроя променливите на средата си, за да се свържа с инстанцията. Тази база данни изтича от дома на Grid Infrastructure, а не от дома на RDBMS. Така че трябва да настроя правилно моя ORACLE_HOME. Също така името на екземпляра започва с тире, така че трябва да увия SID в двойни кавички.
[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“
Вече мога да се свържа с екземпляра и да проверя, че съм свързан с правилния.
[oracle@host01 ~]$ sqlplus /nolog
SQL*Plus:Издание 12.1.0.2.0 Производство на понеделник 21 декември 15:17:21 2015 г.
Авторски права (c) 1982, 2014, Oracle. Всички права запазени.
SQL> свържете / като sysdbaConnected.SQL> изберете instance_name от v$instance;
INSTANCE_NAME-----------------MGMTDB
Тази база данни е многонаемателна база данни на Oracle, която една PDB. Трябва да определя името на PDB. Името на PDB ще бъде същото като името на клъстера. Мога да си напомня името на клъстера, като потърся V$ACTIVE_SERVICES.
SQL> изберете име,con_id 2 от v$active_services;
NAME CON_ID----------------------------------------------------- --------- ---------моят_клъстер 3-MGMTDBXDB 1_mgmtdb 1SYS$ФОН 1SYS$USERS 1
SQL> alter session set container=my_cluster;
Сесията е променена.
Само една услуга има идентификатор на контейнера, който не е равен на 1 (1 е CDB), така че трябва да е PDB, който търся. Променям сесията си, за да използвам PDB като негов контейнер.
Следващата ми задача е да получа списък с таблици, собственост на CHM.
SQL> изберете table_name от dba_tables, където owner='CHM' 2 подреждане по table_name;
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
Само 10 таблици в схемата. Първата таблица в списъка показва някаква информация за конфигурацията за наблюдаваните от CHM хостове.
SQL> изберете име на хост,NUMPHYCPUS,NUMCPUS,NUMDISKS 2 от CHM.CHMOS_ACTIVE_CONFIG_INT_TBL;
HOSTNAME NUMPHYCPUS NUMCPUS NUMDISKS---------- ---------- ---------- ----------host01 1 2 3host02 1 2 3
Виждам, че CHM събира информация за два възела в клъстера. Виждам броя на физическите процесори за всеки възел и броя на общите ядра (2). Тези възли също имат 3 диска.
Можем също да научим информация за операционната система.
SQL> изберете име на хост, osname, тип чип 2 от CHM.CHMOS_STATIC_CONFIG_INT_TBL;
HOSTNAME OSNAME CHIPTYPE------------------ --------------------host01 Linux Intel( R)host02 Linux Intel(R)
В тези таблици има голямо количество информация и просто са необходими някои опити и грешки, за да разберете какво има там. Например, мога да използвам тази заявка, за да получа броя на процесите, изпълнявани на host01, подредени във времето.
изберете начало, отчитане(*) от CHM.CHMOS_PROCESS_INT_TBLwhere hostname='host01'group по начало начало, ред по начало;
Умишлено не включих изхода, тъй като би бил твърде дълъг за публикация в блог. Ето още няколко примерни заявки, които можете да опитате във вашата база данни GIMR.
Дейност на дисковия вход/изход за конкретен хост във времето.
изберете начален час, DISK_BYTESREADPERSEC/1024/1024 като MB_READ_SEC, DISK_BYTESWRITTENPERSEC/1024/1024 като MB_WRITE_SEC, DISK_NUMIOSPERSEC като IO_PER_SEC от CHM.име_предварителен хост от CHM.CHTSLE от CHM.CHMOSLE;Смяна на конкретен хост с течение на времето.
изберете начало, swpin, swpout от CHM.CHMOS_SYSTEM_SAMPLE_INT_TBL, където hostname='host01'подреждане по начало;Следващият SQL оператор ще изчисли хистограма на дисковата I/O активност. Сигурен съм, че някой друг може да измисли по-елегантна версия, тъй като моите SQL изявления обикновено са по-груба сила.
изберете first.num_count като "<=10ms", second.num_count като "<=20ms", third.num_count като "<=50ms", fourth.num_count като "<=100ms", fifth.num_count като "<=500ms", final.num_count като ">500ms"from(изберете count(*) като num_count от CHM.CHMOS_DEVICE_INT_TBL където devid='sda1' и латентност между 0 и 10) първо, (изберете count(*) като num_count от CHM .CHMOS_DEVICE_INT_TBL където devid='sda1' и латентност между 11 и 20) секунда,(изберете count(*) като брой_брой от CHM.CHMOS_DEVICE_INT_TBL, където devid='sda1' и латентност между 21 и 50) брои трети,(*)избере като num_count от CHM.CHMOS_DEVICE_INT_TBL, където devid='sda1' и латентност между 51 и 100) четвърто, (изберете count(*) като num_count от CHM.CHMOS_DEVICE_INT_TBL, където devid='sda1' и латентност между 100 и 100 101 count(*) като num_count от CHM.CHMOS_DEVICE_INT_TBL, където devid='sda1' и латентност> 500) окончателен;<=10ms <=20ms <=50ms <=100ms <=500ms>500ms---------- ---------- ---------- ---------- ---------- ---------- 150693 10 1 0 0 0
В схемата на CHM има много информация. Очаквам най-вече тази информация да е само образователна и повечето хора няма да търсят директно CHM таблиците. Но това е добра информация, която трябва да знаете и може да помогне на другите.