mongodb insert 错误 ERROR: MessagingPort::call() wrong id got:367 expect:366 解决过程

 2016 3 25 更新:

当mongodb 繁忙的时候, 任何含有findN 之类的查询操作, 特别是对没有建索引字段查询, 有概率导致findN超时错误, 然后影响链接, 此后再次使用此链接做查询都会返回 wrong id错误。

2015 11 27 更新:

问题原因

findOne query之类的查询表操作,如果表内数据过大, 会导致查询超时, 一旦超时, 再用此连接做查询就都会报错。
另外发现: findOne 效率上面 应该不如 query 高效, 此结论待进一步验证。

解决办法

在表中加入索引, 延长超时时间, 都有助于消除此错误。

 ------------------------------------------------------------------------------------

2015 11 26 更新:

应该是 findOne 这个函数导致, 当要查询的表数据量比较大, 10W级别把,  用findOne 查询就有可能出现此错误。

 

改用 query 可消除此错误

 

 

-------------------------------------------------------------------------------------

 

这个错误网上介绍比较少, 记录一下

最近工作中遇到mongodb insert 时候报错, 现象:

 

Thu Sep 24 09:19:15.011 ERROR: MessagingPort::call() wrong id got:367 expect:366

  toSend op: 2004

  response msgid:2931523219

  response len:  157

  response op:  1

  remote: xxxxxxxx

Thu Sep 24 09:19:15.011   Assertion failure false src/mongo/util/net/message_port.cpp 246

 

日志catch这个错误:

[2015-09-24 08:43:30,069][ERROR] xxx catch boost error:assertion src/mongo/util/net/message_port.cpp:246  - xxx.cpp:xxx

 

 

一开始以为是程序错误, 排查过程中发现和存入的数据量有关系, 最后确定是表没建立索引导致。 

 

解决方法:  对要插入数据的表建立索引, 加快insert的查询速度。

posted @ 2015-09-25 16:42  luikimfai  Views(638)  Comments(0)    收藏  举报