sql >> データベース >  >> RDS >> Oracle

GIMRの旅

    Oracle Grid Infrastructureには、OS関連のパフォーマンス情報を定期的にキャプチャするCluster Health Monitor(CHM)が含まれています。初期のバージョンでは、CHMはデータストアにBerkeleyDBを使用していました。 Grid Infrastructure 12.1.0.2では、データストアにOracleデータベースを使用する必要があります。このOracleデータベースは、グリッドインフラストラクチャ管理リポジトリ(GIMR)と呼ばれます。多くの人は、GIMRがデータベース名「-MGMTDB」で実行され、GIクラスターの1つのノードでのみ実行されることをすでに知っています。そのノードが使用可能になると、GIは残りのノードでGIMRを自動的に開始します。

    上記の段落は、私がGIMRで提供しようとしているすべての背景情報に関するものです。読者がもっと知りたい場合は、管理方法(このデータベースに必要な管理がほとんどない)、およびデータベースとその専用リスナーを開始および停止する方法に関する情報をWeb検索で確認できます。

    このブログ投稿は、GIMRデータベースにアクセスし、そこから意味のある情報を抽出する方法について読者を教育することを目的としています。より多くのWeb検索で、コマンドラインユーティリティを使用してGIMRからデータをエクスポートする方法を示すことができます。また、リポジトリ内のCHMデータを表示するために使用できるグラフィカルユーティリティCHMOSGがあります。しかし、楽しみのために、データに直接アクセスする方法を示したいと思いました。

    まず、データベースが実行されているノードを知る必要があります。どのノードでも、次を発行できます:

     [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 

    上記は、データベースとリスナーがhost01で実行されていることを示しています。インスタンスのノードがわかったので、そのノードにサインオンし、インスタンスに接続するように環境変数を設定できます。このデータベースは、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 2015年12月21日(月)15:17:21に本番環境
    著作権(c)1982、2014、Oracle。無断転載を禁じます。
     SQL> connect / as sysdbaConnected.SQL> v$instanceからinstance_nameを選択します;
     INSTANCE_NAME ----------------- MGMTDB 

    このデータベースは、1つのPDBであるOracleマルチテナントデータベースです。 PDB名を確認する必要があります。 PDB名はクラスター名と同じになります。 V $ ACTIVE_SERVICESにクエリを実行すると、クラスター名を思い出すことができます。

     SQL> select name、con_id 2 from v $ active_services; 
     NAME CON_ID --------------------------------------------- -------- ----------  my_cluster  3-MGMTDBXDB 1_mgmtdb 1SYS $ BACKGROUND 1SYS $ USERS 1 
     SQL> alter session set container = my_cluster ; 
    セッションが変更されました。

    コンテナIDが1(1はCDB)でないサービスは1つだけなので、探しているPDBである必要があります。 PDBをコンテナとして使用するようにセッションを変更します。

    次のタスクは、CHMが所有するテーブルのリストを取得することです。

     SQL> select table_name from dba_tables where owner ='CHM' 2 order by 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_ 

    スキーマ内のテーブルは10個だけです。リストの最初の表は、CHMで監視されているホストに関するいくつかの構成情報を示しています。

     SQL> CHM.CHMOS_ACTIVE_CONFIG_INT_TBLからhostname、NUMPHYCPUS、NUMCPUS、NUMDISKS2を選択します;
     HOSTNAME NUMPHYCPUS NUMCPUS NUMDISKS ---------- ---------- ---------- ---------- host01 1 2 3host02 1 2 3 

    CHMがクラスター内の2つのノードに関する情報を収集していることがわかります。各ノードの物理CPUの数と、コアの総数(2)を確認できます。これらのノードにも3つのディスクがあります。

    OSに関する情報も学ぶことができます。

     SQL> CHM.CHMOS_STATIC_CONFIG_INT_TBLからhostname、osname、chiptype2を選択します;
     HOSTNAME OSNAME CHIPTYPE ---------- ---------- -------------------- host01 Linux Intel( R)host02 Linux Intel(R)

    これらの表にはかなりの量の情報があり、そこに何があるかを理解するには試行錯誤が必要です。たとえば、このクエリを使用して、host01で実行されているプロセスの数を時間の経過とともに並べ替えることができます。

     select begintime、count(*)from CHM.CHMOS_PROCESS_INT_TBL where hostname ='host01' group by begintimeorder by begintime; 

    ブログ投稿には長すぎるため、意図的に出力を含めませんでした。 GIMRデータベースで試すことができるクエリの例をさらにいくつか示します。

    時間の経過に伴う特定のホストのディスクI/Oアクティビティ。

     select begintime、DISK_BYTESREADPERSEC / 1024/1024 as MB_READ_SEC、DISK_BYTESWRITTENPERSEC / 1024/1024 as MB_WRITE_SEC、DISK_NUMIOSPERSEC as IO_PER_SECfrom CHM.CHMOS_SYSTEM_SAMPLE_INT_TBLwhere hostname ='host01' order by begintime; 

    時間の経過とともに特定のホストを交換します。

     select begintime、swpin、swpoutfrom CHM.CHMOS_SYSTEM_SAMPLE_INT_TBLwhere hostname ='host01' order by begintime; 

    次の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 as "> 500ms" from(select count(*)as num_count from CHM.CHMOS_DEVICE_INT_TBL where devid ='sda1' and layout between 0 and 10)first、(select count(*)as num_count from CHM .CHMOS_DEVICE_INT_TBL where devid ='sda1'およびレイテンシー11〜20)秒、(select count(*)as num_count from CHM.CHMOS_DEVICE_INT_TBL where devid ='sda1' andレイテンシー21〜50)3番目、(select count(*) as num_count from CHM.CHMOS_DEVICE_INT_TBL where devid ='sda1' and layout between 51 and 100)4番目、(select count(*)as num_count from CHM.CHMOS_DEVICE_INT_TBL where devid ='sda1' and layout between 101 and 500)5番目、(select count(*)as num_count from CHM.CHMOS_DEVICE_INT_TBL where devid ='sda1' and layout> 500)final; 
     <=10ms <=20ms <=50ms <=100ms <=500ms> 500ms ---------- ---------- ---------- ---------- ---------- ---------- 150693 10 1 0 0 0 

    CHMスキーマにはかなりの量の情報があります。ほとんどの場合、この情報は単なる教育的なものであり、ほとんどの人がCHMテーブルに直接クエリを実行することはないと思います。しかし、これは知っておくとよい情報であり、他の人に役立つ可能性があります。


    1. BatchUpdateException:バッチは終了しません

    2. クエリよりも多くの値を返すプロシージャ内のカーソル

    3. Rubygemmysql2のインストールに失敗する

    4. vagrantvirtualboxマシンからホストPostgreSQLに接続する方法