我试图了解如何更好地确定我目前所看到的问题出在哪里。
目前我正在通过 cron 更新集合,每 15 分钟从第三方供应商下载信息(没有问题)。有时我需要进行 2 年的更新,并且当我看到这个问题时。
传入的是大约 300-600k 的结果,我正在使用 mongo->collection->save($item); 我对所有结果都有_id,所以(我认为)也被快速插入。
文档大小变化不大,开始时很小(12kb~)。
我将每个请求以大约 200 的速度批量下载到第 3 方服务器,格式化它们,然后使用 save 将它们一次插入一个到 mongo 中,并将安全插入设置为 true。
现在,当保存发生时,它看起来将我的锁定百分比提高到 20-30% 之间。我想知道如何追查为什么会发生这种情况,因为我相信这是我最终遇到超时(设置为 100 秒)的原因。
超时错误:MongoCursorTimeoutException Object->cursor 超时(超时:100000,剩余时间:0:0,状态:0)
Mongo 驱动程序:Mongo Native Driver 1.2.6(来自 PHP.net)
我目前使用的是带有 SSD 驱动器和 16gb 内存的 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 进行插入。
任何帮助将不胜感激。
非常感谢您的参与
更新
我将所有项目存储在“MongoDoc”中,因为有时需要对每个元素进行格式化,在那里批量处理这些项目时,我将数据取出并插入为
$mongoData = $mongoSpec->getData();
try {
foreach($mongoData as $insert) {
$this->collection_instance->save($insert);
$count++;
}
} catch(Exception $e) {
print_r($e->getTrace());
exit;
}
我会说我已经删除了安全写入,并且我已经看到超时发生的急剧减少,所以现在我将它归结为这一点(除非插入有问题..)
感谢您的时间和想法。