Php 了解Mongo在通过锁定百分比保存时超时
我试图了解如何更好地识别我目前所看到的问题所在 目前,我正在通过cron更新一个集合,每15分钟从第三方供应商下载一次信息(没有问题)。有时我需要进行为期2年的刷新,也就是我看到这个问题的时候 传入的是大约300-600k的结果,我正在使用mongo->collection->save($item);在上,我有所有结果的_id,因此(我认为)快速插入也会被击中 文档大小变化不大,一开始就相当小(12kb~) 我以每请求200次的速度批量下载到第三方服务器,对其进行格式化,然后使用save with safe insert设置为true将其一次插入到mongo中 现在进行保存时,它会将我的锁定百分比提高到20-30%。我想知道如何追踪为什么会发生这种情况,因为我相信这就是我最终遇到超时(设置为100秒)的原因Php 了解Mongo在通过锁定百分比保存时超时,php,mongodb,Php,Mongodb,我试图了解如何更好地识别我目前所看到的问题所在 目前,我正在通过cron更新一个集合,每15分钟从第三方供应商下载一次信息(没有问题)。有时我需要进行为期2年的刷新,也就是我看到这个问题的时候 传入的是大约300-600k的结果,我正在使用mongo->collection->save($item);在上,我有所有结果的_id,因此(我认为)快速插入也会被击中 文档大小变化不大,一开始就相当小(12kb~) 我以每请求200次的速度批量下载到第三方服务器,对其进行格式化,然后使用save wit
- 超时错误:MongoCorSortimeOutException对象->光标超时(超时:100000,剩余时间:0:0,状态:0)
- Mongo驱动程序:Mongo原生驱动程序1.2.6(来自PHP.net)
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
我有一个带有二级设置和一个arb的主界面(根据文档建议),使用PHP进行插入
任何帮助都将不胜感激
非常感谢您抽出时间
更新
我将所有项目存储在一个“MongoDoc”中,因为有时需要对每个元素进行格式化,在对这些项目进行批处理后,我会将数据取出并插入
$mongoData = $mongoSpec->getData();
try {
foreach($mongoData as $insert) {
$this->collection_instance->save($insert);
$count++;
}
} catch(Exception $e) {
print_r($e->getTrace());
exit;
}
我要说的是,我已经删除了安全写入,并且我已经看到超时发生了大幅减少,所以现在我将其归为安全写入(除非插入有问题…)
感谢您的时间和想法。您达到了PHP最大执行限制了吗?您正在使用哪个Mongo库?我使用的是FuelPHP的MongoDb库,只需约50次插入就需要将近1秒的时间(因为每次写入都是经过确认的fsync操作),所以这并不让我感到惊讶。我的解决方案是只在特定的时间间隔使用fsync和write confirm,这样可以提供更好的性能,并合理地保证不会出现任何问题 更多信息:
感谢您的回复;我目前使用的是php.net上的Mongo1.2.6本机驱动程序。我看到的确切错误消息是:游标超时(超时:100000,剩余时间:0:0,状态:0)。不确定上述解决方案是否仍然有效?切换到FuelPHP库是否需要更新其使用的调用的代码而不是Mongo驱动程序?非常感谢。Fuel只是本机驱动程序的包装,因此无需切换。写问题和fsync问题仍然适用。非常好,感谢您提供的信息;我会调查并报告的。谢谢你提供的文档,这样我就明白了;您在关闭安全设置并关闭fsync的60秒间隔的情况下进行写入,然后每x写入一次fsync=true写入?或者,您是在执行少量写入操作后发出命令来执行此操作的。另外,我也不确定如何确定这里的X值。再次感谢你的帮助!为什么您认为全速插入的20-30%的合理锁定与游标超时有关?这个锁的百分比实际上应该更高,因为理论上它应该完全被您的写入占用。我不明白,如果你没有做任何涉及游标的事情,为什么会出现游标超时错误(插入当然不会)。引发此异常的PHP驱动程序代码不清楚,似乎在select()时引发此异常返回0,这可能会导致错误抛出此错误,但我对代码不太熟悉,因此无法确定。
MongoCorsOrtimeOutException
在创建光标100秒后使用光标从上一次查询的结果检索数据时发生。所以你不应该在插页上看到。抛出该异常的语句是什么?它在执行安全保存方法调用时超时;当我在插入一个新文档时,会插入一些其他文档的列表。您能提供一些代码吗?这里好像有点不对劲。顺便问一句,你说你正在批量获得200份文档-你是如何获得它们的-它们是否在一个文件中?还是另一个DB?