現在見ている問題のどこに問題があるのかをよりよく特定する方法を理解しようとしています。
現在、cron を介してコレクションを更新し、15 分ごとに (問題なく) サードパーティ ベンダーから情報をダウンロードしています。2 年間の更新を行う必要がある場合があり、そのときにこの問題が発生します。
入ってくるのは約 300 ~ 600k の結果で、すべて mongo->collection->save($item); を使用しています。on 私はすべての結果の _id を持っているので、それも (私が思っていた) クイック挿入のためにヒットしています。
ドキュメントのサイズはあまり変わっておらず、そもそもかなり小さいです (12kb ~)。
サードパーティのサーバーへのリクエストごとに約 200 のダウンロードをバッチ処理し、フォーマットしてから、save with safe insert を true に設定して一度に 1 つずつ mongo に挿入します。
現在、保存が行われているとき、私のロック率は 20 ~ 30% に上昇しているように見えます。これがタイムアウト(100秒に設定されている)に達する理由だと思うので、なぜこれが起こっているのかを追跡する方法を考えています。
タイムアウト エラー: MongoCursorTimeoutException Object->cursor timed out (タイムアウト: 100000、残り時間: 0:0、ステータス: 0)
Mongo ドライバー: Mongo ネイティブ ドライバー 1.2.6 (PHP.net から)
私は現在、SSD ドライブと 16 GB の 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;
}
安全な書き込みを削除し、タイムアウトの発生が大幅に減少したと言うので、今のところそれまでにチョークで書いています(挿入に問題がない限り..)
あなたの時間と考えをありがとう。