7

現在見ている問題のどこに問題があるのか​​をよりよく特定する方法を理解しようとしています。

現在、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;
}

安全な書き込みを削除し、タイムアウトの発生が大幅に減少したと言うので、今のところそれまでにチョークで書いています(挿入に問題がない限り..)

あなたの時間と考えをありがとう。

4

1 に答える 1

1

PHP の最大実行制限に達していますか? どのMongoライブラリを使用していますか? 私は FuelPHP の MongoDb ライブラリを使用していましたが、わずか 50 回の挿入で 1 秒近くかかりました (各書き込みが確認済みの fsync 操作であったため)。私の解決策は、特定の間隔でのみ fsync と書き込み確認を行うことでした。これにより、パフォーマンスが大幅に向上し、何も問題がないという合理的な保証が得られました。

詳細:
http://docs.mongodb.org/manual/reference/command/fsync/
http://docs.mongodb.org/manual/core/write-operations/#write-concern

于 2013-03-05T20:27:55.327 に答える