私は、現在の問題がどこにあるのかをより正確に特定する方法を理解しようとしています。Mongoタイムアウトのロック率の保存に関する理解
現在、私は、サードパーティベンダーから(問題なし)15分ごとに情報をダウンロードし、cronを経由コレクションを更新しています。 2年のリフレッシュが必要な時があり、この問題を見る時があります。
私はmongo-> collection-> save($ item)を使っています。私はすべての結果のために_idを持っているので、(私が思ったように)ヒットしたのはクイックインサートでした。
文書のサイズはあまり変更されておらず、始めるにはやや小さい(12kb〜)。
Iバッチサードパーティのサーバーには約200の要求ごとにダウンロード、それらをフォーマットし、trueに設定し、安全な挿入で保存使用してモンゴに一度にそれらを1つずつ挿入します。
現在、保存が行われているときは、ロックの割合が20〜30%になります。私はタイムアウト(100秒に設定されている)を打つことになった理由は、これがなぜ起こっているのかを追跡する方法が不思議です。
タイムアウトエラー:MongoCursorTimeoutExceptionオブジェクト - >カーソルがタイムアウト(時間切れ:100000を、時間は左:0:0を、状態:0)
モンゴドライバ:Mongoのネイティブドライバ1.2.6(PHPから.net)
私は現在SSDドライブと16GBのRAMを搭載したMongo 2.2.1を使用しています。ここで
は、挿入が起こっている間、私は従うmongoStat動作の例である:
insert query update delete getmore command flushes mapped vsize res faults locked db idx miss % qr|qw ar|aw netIn netOut conn set repl time
0 0 201 0 215 203 0 156g 313g 1.57g 7 mydb:36.3% 0 0|0 0|0 892k 918k 52 a-cluster PRI 10:04:36
私がやってPHPを使用して、二次設定と(ドキュメントの提案ごとに)それらに面しARBとの主を持っています私の挿入物。
どのようなヘルプも大いにお勧めします。
は
お時間をどうもありがとうございます更新
の各要素にフォーマットするには、これらの項目をバッチ処理時に、必要とされることがございますように私は「MongoDoc」内のすべての項目を保存しますそこに私は、私はそれにそれをチョーキングだ今のように私は(私は安全な書き込みを削除していると私は、タイムアウトの発生を大幅に削減を見てきたと言うだろうからデータを取得し、
$mongoData = $mongoSpec->getData();
try {
foreach($mongoData as $insert) {
$this->collection_instance->save($insert);
$count++;
}
} catch(Exception $e) {
print_r($e->getTrace());
exit;
}
として挿入しますアンルインサートに何か問題があります。)
ありがとうございました。
'MongoCursorTimeoutException'が発生します。だから、それを挿入物に見るべきではない。その例外をスローするステートメントは何ですか? – JohnnyHK
安全な保存メソッドコールを実行するとタイムアウトします。挿入する少数の他のドキュメントのリストを含む新しいドキュメントを挿入しているとき。 – Petrogad
いくつかのコードを含めることができますか?ここに何かがないようです。ところで、あなたは200のバッチで文書を取得していると言います - どうしていますか?ファイルに入っていますか?または別のDB? –