Oracle Grid Infrastructure mencakup Cluster Health Monitor (CHM) yang secara teratur menangkap informasi kinerja terkait OS. Pada versi awal, CHM menggunakan Berkeley DB untuk penyimpanan datanya. Dalam Infrastruktur Grid 12.1.0.2, sekarang diperlukan untuk menggunakan database Oracle untuk penyimpanan data. Database Oracle ini disebut Grid Infrastructure Management Repository (GIMR). Banyak orang sudah mengetahui bahwa GIMR berjalan dengan nama database “-MGMTDB” dan hanya berjalan pada satu node dari cluster GI. Jika node tersebut tersedia, GI akan secara otomatis memulai GIMR pada node yang tersisa.
Paragraf di atas adalah tentang semua informasi latar belakang yang akan saya berikan di GIMR. Jika pembaca ingin tahu lebih banyak, mereka pasti dapat melakukan pencarian web untuk info tentang cara mengelola (pengelolaan kecil apa yang diperlukan dari database ini), dan bagaimana memulai dan menghentikan database dan pendengarnya yang berdedikasi.
Posting blog ini bermaksud untuk mendidik pembaca tentang cara mengakses database GIMR dan mengekstrak informasi yang berarti darinya. Pencarian web lainnya dapat menunjukkan cara menggunakan utilitas baris perintah untuk mengekspor data dari GIMR. Dan ada utilitas grafis, CHMOSG, yang dapat digunakan untuk melihat data CHM di repositori. Tapi hanya untuk bersenang-senang, saya pikir saya akan menunjukkan cara mendapatkan data secara langsung.
Pertama, Anda perlu tahu node mana yang menjalankan database. Pada simpul mana pun, saya dapat mengeluarkan yang berikut:
[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
Di atas menunjukkan database dan pendengar berjalan di host01. Sekarang setelah saya mengetahui node instance, saya dapat masuk ke node tersebut, dan mengatur variabel lingkungan saya untuk terhubung ke instance. Basis data ini kehabisan rumah Infrastruktur Grid, bukan rumah RDBMS. Jadi saya perlu mengatur ORACLE_HOME saya dengan benar. Juga, nama instance dimulai dengan tanda hubung jadi saya perlu membungkus SID dengan tanda kutip ganda.
[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"
Sekarang saya dapat terhubung ke instance dan memverifikasi bahwa saya terhubung ke instance yang tepat.
[oracle@host01 ~]$ sqlplus /nolog
SQL*Plus:Rilis 12.1.0.2.0 Produksi pada Sen 21 Des 15:17:21 2015
Hak Cipta (c) 1982, 2014, Oracle. Semua hak dilindungi undang-undang.
SQL> connect / as sysdbaConnected.SQL> pilih instance_name dari v$instance;
INSTANCE_NAME------------------MGMTDB
Database ini merupakan database multitenant Oracle, yang salah satunya PDB. Saya perlu menentukan nama PDB. Nama PDB akan sama dengan nama cluster. Saya dapat mengingatkan diri saya tentang nama cluster dengan menanyakan V$ACTIVE_SERVICES.
SQL> pilih nama,con_id 2 dari v$active_services;
NAME CON_ID-------------------------------------------------------- -------- ----------kluster_saya 3-MGMTDBXDB 1_mgmtdb 1SYS$LATAR BELAKANG 1SYS$USERS 1
SQL> ubah set sesi container=my_cluster;
Sesi diubah.
Hanya satu layanan yang memiliki id wadah tidak sama dengan 1 (1 adalah CDB) jadi itu pasti PDB yang saya cari. Saya memodifikasi sesi saya untuk menggunakan PDB sebagai wadahnya.
Tugas saya selanjutnya adalah mendapatkan daftar tabel milik CHM.
SQL> pilih table_name dari dba_tables dimana owner='CHM' 2 memesan berdasarkan 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_TBLCHMOS_INTIC_TBLCHMOS_NIC_INT_TBLCHMOS_PROCESS_INT_TBLCHMOS_STATIC_TBLC_HMOS_INTTELCOS_STEMINT_HMOS_INTIC_TBLCHIG_Hanya 10 tabel dalam skema. Tabel pertama dalam daftar menunjukkan beberapa informasi konfigurasi tentang host yang dipantau CHM.
SQL> pilih hostname,NUMPHYCPUS,NUMCPUS,NUMDISKS 2 dari CHM.CHMOS_ACTIVE_CONFIG_INT_TBL;HOSTNAME NUMPHYCPUS NUMCPUS NUMDISKS---------- ---------- ---------- ----------host01 1 2 3host02 1 2 3Saya dapat melihat bahwa CHM sedang mengumpulkan informasi tentang dua node di cluster. Saya dapat melihat jumlah CPU fisik untuk setiap node dan jumlah total core (2). Node ini juga memiliki 3 disk.
Kami juga dapat mempelajari informasi tentang OS.
SQL> pilih hostname,osname,chiptype 2 dari CHM.CHMOS_STATIC_CONFIG_INT_TBL;HOSTNAME OSNAME CHIPTYPE---------- ---------- --------------------host01 Linux Intel( R)host02 Linux Intel(R)Ada banyak informasi dalam tabel ini dan hanya perlu beberapa percobaan dan kesalahan untuk mencari tahu apa yang ada di sana. Misalnya, saya dapat menggunakan kueri ini untuk mendapatkan hitungan proses yang berjalan pada host01 yang dipesan dari waktu ke waktu.
pilih waktu mulai, hitung(*)dari CHM.CHMOS_PROCESS_INT_TBLdi mana hostname='host01'grup berdasarkan waktu mulaipesan berdasarkan waktu mulai;Saya sengaja tidak menyertakan output karena akan terlalu panjang untuk posting blog. Berikut adalah beberapa contoh kueri lainnya yang dapat Anda coba di database GIMR Anda.
Aktivitas I/O disk untuk host tertentu dari waktu ke waktu.
pilih waktu mulai,DISK_BYTESREADPERSEC/1024/1024 sebagai MB_READ_SEC,DISK_BYTESWRITTENPERSEC/1024/1024 sebagai MB_WRITE_SEC,DISK_NUMIOSPERSEC sebagai IO_PER_SECdari CHM.CHMOS_SYSTEM_SAMPLE_INT_TBLdi mana hostname='host01'preorder byBertukar pada host tertentu dari waktu ke waktu.
pilih waktu mulai,swpin,swpoutdari CHM.CHMOS_SYSTEM_SAMPLE_INT_TBLdi mana hostname='host01'pesan berdasarkan waktu mulai;Pernyataan SQL berikutnya akan menghitung histogram aktivitas I/O disk. Saya yakin orang lain dapat membuat versi yang lebih elegan karena pernyataan SQL saya cenderung lebih kasar.
pilih first.num_count sebagai "<=10ms", second.num_count sebagai "<=20ms", third.num_count sebagai "<=50ms", keempat.num_count sebagai "<=100ms", kelima.num_count sebagai "<=500ms", final.num_count sebagai ">500ms"dari(pilih count(*) sebagai num_count dari CHM.CHMOS_DEVICE_INT_TBL di mana devid='sda1' dan latensi antara 0 dan 10) terlebih dahulu,(pilih count(*) sebagai num_count dari CHM .CHMOS_DEVICE_INT_TBL di mana devid='sda1' dan latensi antara 11 dan 20) detik,(pilih count(*) sebagai num_count dari CHM.CHMOS_DEVICE_INT_TBL di mana devid='sda1' dan latensi antara 21 dan 50) ketiga,(pilih count(*) sebagai num_count dari CHM.CHMOS_DEVICE_INT_TBL di mana devid='sda1' dan latency antara 51 dan 100) keempat,(pilih count(*) sebagai num_count dari CHM.CHMOS_DEVICE_INT_TBL di mana devid='sda1' dan latency antara 101 dan 500) kelima,(pilih count(*) sebagai num_count dari CHM.CHMOS_DEVICE_INT_TBL di mana devid='sda1' dan latency> 500) final;<=10ms <=20ms <=50ms <=100ms <=500ms>500ms---------- ---------- ---------- ---------- ---------- ---------- 150693 10 1 0 0 0
Ada banyak informasi dalam skema CHM. Saya berharap sebagian besar informasi ini hanya mendidik dan kebanyakan orang tidak akan menanyakan tabel CHM secara langsung. Tapi ini adalah informasi yang baik untuk diketahui dan dapat membantu orang lain.