2015-01-19 2 views
3

약 50 억 db의 쿼리를 사용하여 데이터베이스 덤프를 실행하려고하면 진행률 표시 줄 시간이이 덤프가 적당한 시간 (100 + 일). 또한 0 %에서 끝난 것처럼 보인 후에도 쿼리가 멈추었습니다. 약 22 시간 후에 그 라인은 metadata.json 라인이되었습니다.Mongodump의 속도를 올리는 방법, 마무리하지 않는 덤프

덤프 라인은 다음과 같습니다

mongodump -h myHost -d myDatabase -c mycollection --query "{'cr' : {\$gte: new Date(1388534400000)}, \$or: [ { 'tln': { \$lte: 0., \$gte: -100.}, 'tlt': { \$lte: 100, \$gte: 0} }, { 'pln': { \$lte: 0., \$gte: -100.}, 'plt': { \$lte: 100, \$gte: 0} } ] }" 

그리고 출력의 마지막 몇 줄은 (. 나는 아직 이미지를 게시 할 수 없습니다로 입력) 된

[timestamp] Collection File Writing Progress: 10214400/5066505869 0% (objects) 
[timestamp] Collection File Writing Progress: 10225100/5066505869 0% (objects) 
[timestamp] 10228391 objects 
[timestamp] Metadata for database.collection to dump/database/collection.metadata.json 

어떤 생각이 성능을 개선하는 데 도움 또는 왜 이렇게 오래 걸릴지에 대한 생각은 없습니까?

+1

이 쿼리를 mongo 셸에 작성하고 explain()을 사용하여 쿼리 계획이 무엇인지 확인하십시오. 쿼리 자체가 느리다는 것일 수도 있습니다. – marcinn

+0

explain()의 출력 외에 어떤 버전의 MongoDB 당신이 사용하고 있습니까? 50 억 개의 소스 문서에서 예상되는 출력 결과의 수는 얼마입니까? 'metadata.json'을 참조하는 것이 일반적으로 지정된 콜렉션에 대해 덤프가 완료 될 때 방출되는 마지막 라인으로 ~ 천만 개의 객체가 실제로 전체 결과 세트가 될지 여부는 불분명합니다. – Stennie

+0

안녕하세요. 그럼 .explain()도 실행하는 데 오랜 시간 (몇 시간 이상)을 소요하고 있습니다. 평소입니까? x 좌표와 y 좌표가 둘 다 범위 내에있는 경우에만 .explain()을 위치 필터로 단순화하려고 시도했지만 여전히 시간이 걸립니다. 계속 실행 및 업데이트됩니다. – Wes

답변

2

방금이 문제에 직면했으며 mongodump은 기본적으로 매우 똑똑하지 않습니다. 그것은 _id 색인을 통과하고 있으며, 많은 수의 임의 디스크 액세스를 의미합니다. 나를 위해, 여러 컬렉션을 덤핑, mongodump 단순히 커서 시간 초과로 인해 충돌했다.

문제는 여기에 설명되어 있습니다. https://jira.mongodb.org/browse/TOOLS-845. 그러나 실제로는 "Works as Designed"에서 큰 해상도 부분을 제공하지 않습니다. 색인에 대해 다소 재미있는 부분이있을 수는 있지만 내 경우에는 열악한 작은 Mac Mini에서 디스크 접근량이 심각하게 힘들었던 것 같습니다.

하나의 솔루션? 쓰기를 종료 한 다음 데이터를 순차적으로 전달하는 --forceTableScan을 사용하십시오. _id 필드를 사용하는 경우 _id 색인을 사용하는 것보다 빠를 수도 있습니다 (나).

문서는 다소 비싸지 만 정상적인 mongodump 동작은 마치 스냅 샷을 사용하여 _id 색인을 통과 한 다음 쿼리로 필터링하는 것처럼 읽습니다. 바꾸어 말하면, 쿼리를 완료하기 위해 데이터 순서 (즉, 무작위로)가 아닌 _id 순서로 50 억 레코드를 모두 통과 할 수 있습니다. 따라서 실제 색인에서 읽고 직접 작성하는 도구를 만드는 것이 더 나을 것입니다.

제게는 --forceTableScan이면 충분합니다. 실제로는 (a) 실제로 성공적으로 완료되었으며 (b) 크기가 더 빠르거나 빠릅니다.

관련 문제