DBAtlas · 데이터베이스 운영 아틀라스

TTL 인덱스 생성, 만료 시간 변경, TTL 삭제 모니터링

MongoDB유지보수

명령어

// Automatically delete documents lastSeen + 3600 s later:
db.oturum.createIndex({ lastSeen: 1 }, { expireAfterSeconds: 3600, name: "ttl_lastSeen" })
// Change the expiry without rebuilding the index:
db.runCommand({ collMod: "oturum", index: { name: "ttl_lastSeen", expireAfterSeconds: 7200 } })
// TTL indexes on the collection and their expiry:
db.oturum.getIndexes().filter(i => i.expireAfterSeconds !== undefined)
// TTL monitor statistics (deleted documents, passes):
db.serverStatus().metrics.ttl

하는 일

날짜 필드 기준으로 정해진 시간이 지나면 문서를 자동 삭제하는 TTL 인덱스를 생성하고, 재구축 없이 collMod로 만료 시간을 변경하며, TTL monitor가 삭제한 문서 수를 보여 준다.

사용 시점

애플리케이션에 삭제 작업을 작성하지 않고 세션, 로그, 임시 토큰 같은 기한부 데이터를 정리하고, 커지는 컬렉션이 줄지 않는 이유를 조사하기 위해.

주의

TTL monitor는 기본 60초마다 실행되므로 삭제는 즉시 일어나지 않는다. 필드는 Date 타입(또는 Date 배열)이어야 하며, 문자열 날짜나 필드가 없는 문서는 삭제되지 않는다. 만료 시간을 줄이면 많은 문서가 한 번에 삭제되어 쓰기 부하와 복제 지연이 발생한다. 삭제는 primary에서만 일어나며 oplog에 기록된다.

DBAtlas에서 열기 →

관련 항목