2012-10-10 2 views
0

, 나는이 간단한 명령을 실행 해요 : 새로운 고유 인덱스를 생성하고, 중복을 드롭하도록되어MongoDb PHP ensureIndex (unique, dropDubs) : ERROR "commitIfNeeded에서 commitNow 할 수 없습니다. 로컬 db lock에 있습니다"? PHP와 MongoDB를 2.2.0에

$collection->ensureIndex(array(
    'feed_nid' => 1, 
    'guid' => 1, 
), array(
    'unique' => TRUE, 
    'dropDups' => TRUE, 
)); 

. 그러나 MongoDB를 이렇게 계속 루프에 갇혀있다 :

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를 여러 번 다시 시작하려고했지만 아무 쓸모가 없었습니다.

도움이 ...? - 추가 info-

는 윈도우 7 64 비트에 아파치 2.4.2, PHP 5.4.3과 WAMP에서 실행. 내가 사용

문제는 MongoDB를 2.0.7 존재

...

downloads.mongodb.org/win32/mongodb-win32-x86_64-2.2.0.zip 그리고시에서 64 비트 MongoDB의 버전입니다 RockMongo 같은 도구가 (dropDups 독특한) 인덱스를 생성, 다른 오류가 보여줍니다

E11000 duplicate key error index: local.fields_current.flatrow.$feed_nid_1_guid_1_unq dup key: { : 314, : "299435" } 
+0

이 플랫폼의 정보, 시작 방법 (옵션) 등을 제공 할 수 있습니까? 이것은 Windows 32 비트 빌드가 아닙니다. 그렇습니까? –

+0

Windows 7 64 비트에서 Apache 2.4.2, PHP 5.4.3이 포함 된 WAMP에서 실행됩니다. 그것은 http://downloads.mongodb.org/win32/mongodb-win32-x86_64-2.2.0.zip의 64 비트 MongoDb 버전입니다. – Appmerce

답변

0

사용 '배경 : 사실은'일을 할 것 같다!

$collection->ensureIndex(array(
    'feed_nid' => 1, 
    'guid' => 1, 
), array(
    'unique' => TRUE, 
    'dropDups' => TRUE, 
    'background' => TRUE, 
));