컴팩트
정의
compact
컬렉션의 모든 데이터와 인덱스를 다시 쓰고 조각 모음합니다. WiredTiger 데이터베이스에서 이 명령은 필요하지 않은 디스크 공간을 운영 체제에 해제합니다.
호환성
이 명령은 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
중요
이 명령은 M0, M2 및 M5 클러스터에서 지원되지 않습니다. 자세한 내용은 지원되지 않는 명령을 참조하세요.
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
명령은 다음과 같은 구문을 가집니다:
db.runCommand( { compact: <collection name> } )
명령 필드
이 명령은 다음 필드를 사용합니다.
필드 | 유형 | 설명 |
---|---|---|
| 문자열 | 컬렉션의 이름입니다. |
| flag | 선택 사항. 지정된 경우 복제본 세트의 프라이머리에서 |
| any | 선택 사항. 이 명령에 첨부할 사용자 제공 코멘트입니다. 설정되면 이 설명은 다음 위치에서 이 명령의 레코드와 함께 표시됩니다.
댓글은 유효한 모든 BSON types (문자열, 정수, 객체, 배열 등)이 될 수 있습니다. |
compact
필수 권한
인증을 시행하는 클러스터의 경우 대상 컬렉션에서 compact
권한 작업을 가진 사용자로 인증해야 합니다. dbAdmin
역할은 시스템 외 컬렉션에 대해 compact
를 실행하는 데 필요한 권한을 제공합니다.
시스템 컬렉션의 경우 다음을 수행해야 합니다.
시스템 컬렉션에 대한
compact
조치를 부여하는 사용자 지정 역할을 만듭니다.해당 역할을 신규 또는 기존 사용자에게 부여합니다.
해당 사용자로 인증하여
compact
명령을 수행합니다.
예를 들어 다음 작업은 지정된 데이터베이스 및 컬렉션에 대해 compact
작업을 부여하는 사용자 지정 역할을 만듭니다.
use admin db.createRole( { role: "myCustomCompactRole", privileges: [ { resource: { "db" : "<database>" , "collection" : "<collection>" }, actions: [ "compact" ] } ], roles: [] } )
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
작업의 진행률을 확인하려면 mongod
로그 파일을 모니터링하거나 다른 셸 인스턴스에서 db.currentOp()
을(를) 실행합니다.
작업 종료
db.killOp()
메서드를 사용하여 compact
를 종료하거나 작업이 완료되기 전에 서버를 다시 시작하면 compact
가 종료되고 운영 체제에 디스크 공간을 반환하려는 시도가 실패할 수 있습니다.
디스크 공간
컬렉션의 저장 공간이 어떻게 변경되는지 확인하려면 압축 전후에 collStats
명령을 실행합니다.
WiredTiger에서, compact
은(는) 컬렉션의 데이터 및 인덱스에 필요한 저장 공간을 줄이려고 시도하여 불필요한 디스크 공간을 운영 체제에 해제합니다. 이 작업의 효율성은 작업 부하에 따라 다르며 디스크 공간이 복구될 수 없습니다. 이 명령은 컬렉션에서 많은 양의 데이터를 제거했지만 이를 대체할 계획이 없는 경우에 유용합니다.
compact
WiredTiger 데이터베이스에서 실행하려면 추가 디스크 공간이 필요할 수 있습니다.
복제본 세트
복제본 세트에 저장된 컬렉션 및 인덱스에 compact
를 사용할 수 있지만 몇 가지 중요한 고려 사항이 있습니다.
프라이머리 노드는
compact
명령을 세컨더리 노드에 복제하지 않습니다.가능하면 세컨더리 노드에서
compact
를 실행해야 합니다. 세컨더리에서compact
를 실행할 수 없는 경우 강제 옵션을 참조하세요.MongoDB 6.1.0 (및 6.0.2 및 5.0.12)에서 시작:
세컨더리 노드는
compact
가 실행되는 동안 복제할 수 있습니다.읽기가 허용됩니다.
클러스터에서 compact
을(를) 실행하려면
프라이머리 노드를 다시 할당합니다.
현재 프라이머리를 취소하고 투표를 트리거하려면 rs.stepDown()
메서드를 사용하세요. 특정 세컨더리 노드를 지정하려면 노드 우선 순위를 조정하세요.
세컨더리 노드에 대한 버전별 고려 사항
세컨더리 노드는
compact
가 실행되는 동안 복제할 수 있습니다.읽기가 허용됩니다.
compact
명령이 실행되는 동안에는 복제본 세트가 SECONDARY
상태로 유지됩니다.
복제본 세트 노드 상태에 대한 자세한 내용은 복제본 세트 노드 상태를 참조하세요.
복제본 세트의 유지 관리 및 가용성에 관한 자세한 내용은 자체 관리형 복제본 세트 멤버에 대한 유지 관리 수행을 참조하세요.
샤딩된 클러스터
compact
mongod
인스턴스에만 적용됩니다. 샤드한 환경에서는 유지 관리 작업으로 각 샤드에서 개별적으로 compact
를 실행합니다.
mongos
에 대해서는 compact
를 발행할 수 없습니다.
색인 구축
mongod
는 compact
작업 후에 모든 인덱스를 병렬로 다시 작성합니다.
예시
다음 작업은 movies
컬렉션에서 compact
명령을 실행합니다.
db.runCommand( { compact: "movies" } )
compact
를 실행하면 다음과 유사한 출력이 반환됩니다.
{ bytesFreed: 27859, ok: 1 }