문서 메뉴
문서 홈
/
MongoDB 매뉴얼
/ / /

컴팩트

이 페이지의 내용

  • 정의
  • 구문
  • 명령 필드
  • compact 필수 권한
  • 행동
compact

컬렉션의 모든 데이터와 인덱스를 다시 쓰고 조각 모음합니다. WiredTiger 데이터베이스에서 이 명령은 불필요한 디스크 공간을 운영 체제에 해제합니다.

명령은 다음과 같은 구문을 가집니다:

db.runCommand(
{
compact: <collection name>
}
)

이 명령은 다음 필드를 사용합니다.

참고

MongoDB 4.2부터

MongoDB는 compact 에 대한 MMAPv1 스토리지 엔진과 MMAPv1 특정 옵션 paddingFactor, paddingBytes, preservePadding 를 제거 .

필드
유형
설명
compact
문자열
컬렉션의 이름입니다.
force
플래그

선택 사항. v 부터 시작합니다. ,4 4 지정된 경우compact 복제본 세트 의 프라이머리 에서 실행되도록 합니다. 이전 v4.4, 이 부울 필드는 값이 인 경우 compact 복제본 세트 의 true 프라이머리 에서 를 실행할 있도록 허용하고, 값이 인 경우 프라이머리 에서 실행할 false 때 오류를 반환했는데, 이는 명령이 다른 모든 것을 차단했기 때문입니다. 작업.

v4 부터 시작합니다.4 compact 은 압축 중인 데이터베이스에서 MongoDB CRUD 작업 을 차단하지 않습니다.

comment
어떤

선택 사항. 이 명령에 첨부할 사용자 제공 코멘트입니다. 설정되면 이 설명은 다음 위치에서 이 명령의 레코드와 함께 표시됩니다.

댓글은 유효한 모든 BSON types (문자열, 정수, 객체, 배열 등)이 될 수 있습니다.

경고

compact 작업과 같은 서버 유지 관리를 수행하기 전에 항상 최신 백업을 유지합니다.

인증 을 시행하는 클러스터의 경우 대상 컬렉션에 대해 compact 권한 작업을 가진 사용자로 인증해야 합니다. dbAdmin 역할은 비시스템 컬렉션에 대해 compact 를 실행하는 데 필요한 권한을 제공합니다.

resource 문서 구성에 대한 자세한 내용은 리소스 문서를 참조하세요.

기존 사용자에게 dbAdmin 또는 사용자 지정 역할을 추가하려면 db.grantRolesToUser() 또는 db.updateUser()를 사용합니다. 다음 작업은 admin 데이터베이스의 myCompactUser에 사용자 지정 compact 역할을 부여합니다.

use admin
db.grantRolesToUser("myCompactUser", [ "dbAdmin" | "myCustomCompactRole" ] )

새 사용자에게 dbAdmin 또는 사용자 지정 역할을 추가하려면 사용자를 만들 때 db.createUser() 메서드의 roles 배열에 해당 역할을 지정합니다.

use admin
db.createUser(
{
user: "myCompactUser",
pwd: "myCompactUserPassword",
roles: [
{ role: "dbAdmin", db: "<database>" } | "myCustomCompactRole"
]
}
)

복제본 세트에서 compact을 실행하려면 추가 고려 사항은 복제본 세트를 참조하세요.

compact 작업의 진행률을 확인하려면 mongod 로그 파일을 모니터링하거나 다른 셸 인스턴스에서 db.currentOp() 을(를) 실행합니다.

작업이 db.killOp() 완료되기 전에 메서드를 사용하여 작업을 종료하거나 서버를 다시 시작하는 compact 경우 다음 사항에 유의하세요.

  • 저널링을 활성화한 경우 compact 작업의 상태에 관계없이 데이터는 유효하고 사용 가능한 상태로 유지됩니다. 인덱스를 수동으로 다시 작성해야 할 수도 있습니다.

  • 저널링을 활성화하지 않은 상태에서 작업 중에 mongod 또는 compact 가 종료되는 경우, 데이터의 유효한 상태를 보장할 수 없습니다.

  • 두 경우 모두 컬렉션의 기존 여유 공간 중 상당 부분을 재사용할 수 없게 될 수 있습니다. 이 시나리오에서는 이 여유 공간의 사용을 복원하기 위해 압축을 완료까지 다시 실행해야 합니다.

컬렉션의 저장 공간이 어떻게 변경되는지 확인하려면 압축 전후에 collStats 명령을 실행합니다.

WiredTiger 에서 compact 는 컬렉션의 데이터 및 인덱스에 필요한 저장 공간을 줄이려고 시도하여 불필요한 디스크 공간을 운영 체제에 해제합니다. 이 작업의 효율성은 워크로드에 따라 다르며 디스크 공간이 복구될 수 없습니다. 이 명령은 컬렉션에서 많은 양의 데이터를 제거했지만 이를 대체할 계획이 없는 경우에 유용합니다.

compact WiredTiger 데이터베이스에서 실행하려면 추가 디스크 공간이 필요할 수 있습니다.

복제본 세트에 저장된 컬렉션 및 인덱스에 compact를 사용할 수 있지만 몇 가지 중요한 고려 사항이 있습니다.

  • 프라이머리 노드는 compact 명령을 세컨더리 노드에 복제하지 않습니다.

  • 가능하면 세컨더리 노드에서 compact를 실행해야 합니다. 세컨더리에서 compact를 실행할 수 없는 경우 강제 옵션을 참조하세요.

  • MongoDB 6 부터 시작.0.2 (및 5.0.12):

    • 세컨더리 노드는 compact가 실행되는 동안 복제할 수 있습니다.

    • 읽기가 허용됩니다.

클러스터에서 compact 을(를) 실행하려면

1

세컨더리 노드 중 하나에서 compact를 실행합니다. compact가 완료되면 나머지 세컨더리 각각에 대해 작업을 차례로 반복합니다.

2

현재 프라이머리를 취소하고 투표를 트리거하려면 rs.stepDown() 메서드를 사용하세요. 특정 세컨더리 노드를 지정하려면 노드 우선 순위를 조정하세요.

3

단계를 낮추면 이전 프라이머리 노드가 보조 노드가 됩니다. 이전 프라이머리 노드에서 compact 을(를) 실행합니다.

보조 노드의 차단 동작은 버전에 따라 다릅니다.

버전
행동 차단
4.4
  • 복제는 불가능합니다.

  • 읽기는 허용되지 않습니다.

4.4.17 이후, 5.0.12 및 6.0.2
  • 세컨더리 노드는 compact가 실행되는 동안 복제할 수 있습니다.

  • 읽기가 허용됩니다.

compact 명령이 실행되는 동안 복제본 세트는 SECONDARY 상태로 유지됩니다.

복제본 세트 노드 상태에 대한 자세한 내용은 복제본 세트 노드 상태를 참조하세요.

복제본 세트의 유지 관리 및 가용성에 관한 자세한 내용은 복제본 세트 멤버에 대한 유지 관리 수행을 참조하십시오.

compactmongod 인스턴스에만 적용됩니다. 샤드 환경에서는 유지 관리 작업으로 각 샤드에서 개별적으로 compact 를 실행합니다.

인스턴스에 compact mongos 대해 를 실행할 수 없습니다.

mongodcompact 작업에 이어 모든 인덱스를 병렬로 다시 작성합니다.

← 콜모드