33639


mongodにてスロークエリを出力することに関して質問させてください。  
最近mongodでスロークエリを出力するために,ProfilingLevelを1に引き上げ、system.profileコレクションにスローログを出力するように設定しました。  
このスローログをarbiterでも閲覧したいと考え、  
(1) system.profileに出力  
(2) oplog.rsに(1)のオペレーションログを出力  
(3) arbiterが(2)を同期する

という流れを考えたのですが、(2)のoplog.rsに(1)のオペレーションログがうまく出力されません。  
もしかして、oplog.rsにはsystem系のコレクションに対するオペレーションログは出力されないのでしょうか。(現状(1)に関しては、system.profileにちゃんと出力されるようになっています)

すみませんがご教授のほどよろしくお願い致します。


CC BY-SA 3.0
2017-03-29T01:26:22.973
33624
2017-03-29T13:15:14.987
10222
question
mongodb
oplog.rsにsystem系コレクションのオペレーションログを出力させたい。


> もしかして、oplog.rsにはsystem系のコレクションに対するオペレーションログは出力されないのでしょうか。

_local_ DBの全部と _system.profile_ だけはレプリケーションしないんです。

src/mongo/db/repl/oplog.cppから

[code]

    bool oplogDisabled(OperationContext* txn,
                       ReplicationCoordinator::Mode replicationMode,
                       const NamespaceString& nss) {
        if (replicationMode == ReplicationCoordinator::modeNone)
            return true;
    
        if (nss.db() == "local")
            return true;
    
        if (nss.isSystemDotProfile()) // == "system.profile"
            return true;
    
        if (!txn->writesAreReplicated())
            return true;
    
        fassert(28626, txn->recoveryUnit());
    
        return false;
    }
    
[/code]

なぜならプライマリーのプロファイル結果はセコンダリーのと一致しないべきです。ハードウェア差、ランダムタイミングなどの理由で異なっています

db.setProfilingLevel()を実行したらそのMongoDBノードだけで _system.profile_
を適用する仕組みがあるということです。


CC BY-SA 3.0
2017-03-29T13:15:14.987
33639
2017-03-29T13:15:14.987
113
33624
answer