首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MongoDb PHP ensureIndex (唯一,dropDubs):错误“不能从commitIfNeeded获得commitNow,因为我们处于本地数据库锁中”?

MongoDb PHP ensureIndex (唯一,dropDubs):错误“不能从commitIfNeeded获得commitNow,因为我们处于本地数据库锁中”?
EN

Stack Overflow用户
提问于 2012-10-10 22:36:47
回答 1查看 976关注 0票数 0

在PHP2.2.0上,我运行以下简单命令:

代码语言:javascript
运行
复制
  $collection->ensureIndex(array(
    'feed_nid' => 1,
    'guid' => 1,
  ), array(
    'unique' => TRUE,
    'dropDups' => TRUE,
  ));

它应该创建一个新的唯一索引,并删除重复索引。但是MongoDb被困在这样一个循环中:

代码语言:javascript
运行
复制
Thu Oct 11 00:31:09 [conn4] ERROR: can't commitNow from commitIfNeeded, as we are in local db lock
Thu Oct 11 00:31:10 [conn4] mongod.exe    ...\src\mongo\util\stacktrace.cpp(161)                           mongo::printStackTrace+0x3e
Thu Oct 11 00:31:10 [conn4] mongod.exe    ...\src\mongo\db\dur.cpp(279)                                    mongo::dur::DurableImpl::_aCommitIsNeeded+0x42a
Thu Oct 11 00:31:10 [conn4] mongod.exe    ...\src\mongo\db\index_update.cpp(401)                           mongo::BackgroundIndexBuildJob::addExistingToIndex+0x4c3
Thu Oct 11 00:31:10 [conn4] mongod.exe    ...\src\mongo\db\index_update.cpp(440)                           mongo::BackgroundIndexBuildJob::go+0xe0
Thu Oct 11 00:31:10 [conn4] mongod.exe    ...\src\mongo\db\index_update.cpp(501)                           mongo::buildAnIndex+0x321
Thu Oct 11 00:31:10 [conn4] mongod.exe    ...\src\mongo\db\pdfile.cpp(1356)                                mongo::insert_makeIndex+0x288
Thu Oct 11 00:31:10 [conn4] mongod.exe    ...\src\mongo\db\pdfile.cpp(1529)                                mongo::DataFileMgr::insert+0xbac
Thu Oct 11 00:31:10 [conn4] mongod.exe    ...\src\mongo\db\pdfile.cpp(1217)                                mongo::DataFileMgr::insertWithObjMod+0x48
Thu Oct 11 00:31:10 [conn4] mongod.exe    ...\src\mongo\db\instance.cpp(761)                               mongo::checkAndInsert+0xb7
Thu Oct 11 00:31:10 [conn4] mongod.exe    ...\src\mongo\db\instance.cpp(821)                               mongo::receivedInsert+0x790
Thu Oct 11 00:31:10 [conn4] mongod.exe    ...\src\mongo\db\instance.cpp(434)                               mongo::assembleResponse+0x5ff
Thu Oct 11 00:31:10 [conn4] mongod.exe    ...\src\mongo\db\db.cpp(192)                                     mongo::MyMessageHandler::process+0xf5
Thu Oct 11 00:31:10 [conn4] mongod.exe    ...\src\mongo\util\net\message_server_port.cpp(86)               mongo::pms::threadRun+0x59a
Thu Oct 11 00:31:10 [conn4] mongod.exe    ...\src\third_party\boost\libs\thread\src\win32\thread.cpp(180)  boost::`anonymous namespace'::thread_start_function+0x21
Thu Oct 11 00:31:10 [conn4] mongod.exe    f:\dd\vctools\crt_bld\self_64_amd64\crt\src\threadex.c(314)      _callthreadstartex+0x17
Thu Oct 11 00:31:10 [conn4] mongod.exe    f:\dd\vctools\crt_bld\self_64_amd64\crt\src\threadex.c(292)      _threadstartex+0x7f
Thu Oct 11 00:31:10 [conn4] kernel32.dll  

这个堆栈被重复了数千次,从未破坏过测试服务器上的“本地db锁”,根本没有通信量。多次尝试重新启动MongoDb,但都没有效果。

有什么帮助吗?

-Additional info-

在带有Apache2.4.2的WAMP上运行,在Windows 7 64位上运行PHP 5.4.3。这是downloads.mongodb.org/win32/mongodb-win32-x86_64-2.2.0.zip的64位MongoDb版本

MongoDb 2.0.7也存在问题.

当我使用像RockMongo这样的工具创建索引(在dropDups中是唯一的)时,一个不同的错误显示:

代码语言:javascript
运行
复制
E11000 duplicate key error index: local.fields_current.flatrow.$feed_nid_1_guid_1_unq dup key: { : 314, : "299435" }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-10 23:19:15

使用“背景:真”似乎就能做到这一点!

代码语言:javascript
运行
复制
  $collection->ensureIndex(array(
    'feed_nid' => 1,
    'guid' => 1,
  ), array(
    'unique' => TRUE,
    'dropDups' => TRUE,
    'background' => TRUE,
  ));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12829513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档