[DB] SQL Server(MS-SQL) 운영 - DBCC 명령어 정리

🧰 [DB] SQL Server(MS-SQL) 운영 - DBCC 명령어 정리

 

🛠️ DBCC란 무엇인가요?

DBCC(Database Console Commands)는 데이터베이스의 상태를 점검하고, 유지보수하며, 관리 작업을 수행하는 데 사용되는 매우 강력한 명령어 세트입니다.

 

DBCC는 크게 네 가지 카테고리로 나뉩니다.

  • 유지관리(Maintenance): 인덱스 재구성, 파일 크기 조정 등.
  • 유효성 검사(Validation): 데이터베이스의 물리적/논리적 무결성 확인.
  • 정보 제공(Informational): 성능 통계 및 설정값 확인.
  • 기타(Miscellaneous): 추적 플래그 설정 등 특수 작업.

 

DBCC 명령어 실행을 통해 무결성 / 로그 스페이스 / 실행 중인 트랜잭션 / Shink 를 통한 로그 정리 등을 가능합니다.


🏆 IT 운영팀 필수 DBCC 명령어 Top 10

1. DBCC CHECKDB (무결성 점검)

가장 중요한 명령어입니다. DB 내 모든 개체의 논리적, 물리적 무결성을 검사합니다.

  • 언제 쓰나요? 정기 점검 시, 혹은 DB 복원 후 데이터에 이상이 없는지 확인할 때.
  • 명령어: DBCC CHECKDB ('DB이름');

2. DBCC SQLPERF(LOGSPACE) (로그 공간 모니터링)

모든 데이터베이스의 트랜잭션 로그 파일 크기와 사용률을 한눈에 보여줍니다.

  • 언제 쓰나요? LDF 파일이 가득 차서 서비스가 멈추는 것을 방지하기 위한 모니터링 용도.
  • 명령어: DBCC SQLPERF(LOGSPACE);

3. DBCC OPENTRAN (활성 트랜잭션 확인)

특정 DB에서 가장 오래된 활성 트랜잭션을 찾아줍니다.

  • 언제 쓰나요? 로그 파일이 줄어들지 않거나, 특정 세션이 락(Lock)을 잡고 해제하지 않을 때 원인을 찾기 위해 사용합니다.
  • 명령어: DBCC OPENTRAN ('DB이름');

4. DBCC SHRINKFILE (로그 파일 크기 줄이기)

비대해진 로그 파일(.ldf)의 물리적 크기를 줄여 디스크 공간을 확보합니다.

⚠️ 주의: 데이터 파일(.mdf)을 줄이는 것은 성능 저하(단편화)를 유발하므로 권장하지 않으며, 로그 파일 위주로 사용하세요.

  • 명령어: DBCC SHRINKFILE (로그파일명, 목표용량MB);

5. DBCC INPUTBUFFER (실행 쿼리 확인)

특정 세션(SPID)이 현재 실행 중인 쿼리가 무엇인지 확인합니다.

  • 언제 쓰나요? CPU 점유율이 높은 프로세스가 정확히 어떤 쿼리를 돌리는지 잡고 싶을 때.
  • 명령어: DBCC INPUTBUFFER (SPID번호);

6. DBCC FREEPROCCACHE (실행 계획 캐시 삭제)

SQL Server가 저장하고 있는 쿼리 실행 계획 캐시를 강제로 비웁니다.

  • 언제 쓰나요? 특정 쿼리가 잘못된 실행 계획을 잡고 성능이 급락했을 때 긴급 조치로 사용합니다. (전체 서버 성능에 일시적 부하를 줄 수 있으니 주의!)
  • 명령어: DBCC FREEPROCCACHE;

7. DBCC USEROPTIONS (세션 설정 확인)

현재 연결된 세션의 설정(격리 수준, 날짜 형식 등)을 확인합니다.

  • 언제 쓰나요? 애플리케이션 연결 설정이 의도한 대로(예: Read Committed) 되어있는지 확인할 때.
  • 명령어: DBCC USEROPTIONS;

8. DBCC SHOW_STATISTICS (통계 정보 상세 확인)

인덱스나 테이블의 통계 정보가 얼마나 최신인지, 데이터 분포는 어떤지 상세히 보여줍니다.

  • 언제 쓰나요? 인덱스는 있는데 쿼리가 느릴 때, 통계 정보가 꼬였는지 확인하기 위해 사용합니다.
  • 명령어: DBCC SHOW_STATISTICS ('테이블명', '인덱스명');

9. DBCC CLEANTABLE (삭제된 데이터 공간 반환)

가변 길이 컬럼(varchar, text 등)에서 데이터를 대량 삭제한 후, 즉시 공간을 반환하게 합니다.

  • 언제 쓰나요? 대규모 데이터 삭제(Delete) 후 디스크 공간이 즉시 확보되지 않을 때 강제로 실행합니다.
  • 명령어: DBCC CLEANTABLE ('DB이름', '테이블명');

10. DBCC DROPCLEANBUFFERS (메모리 버퍼 비우기)

메모리에 캐시된 데이터 페이지를 모두 삭제합니다.

  • 언제 쓰나요? 튜닝 작업 시, 메모리 효과를 배제한 "최악의 성능(Cold Start)"을 테스트하고 싶을 때 사용합니다. (운영 서버에서는 절대 금물!)
  • 명령어: DBCC DROPCLEANBUFFERS;

💡 운영팀을 위한 Tip

  • 자동화: DBCC CHECKDB는 가급적 사용자가 적은 새벽 시간에 유지관리 계획(Maintenance Plan)으로 자동화해 두는 것이 좋습니다.
  • DMV와의 병행: 최근 MS는 DBCC 대신 sys.dm_exec_input_buffer 같은 DMV(동적 관리 뷰) 사용을 권장하고 있습니다. DBCC가 손에 익으셨다면 서서히 DMV도 함께 공부해보시는 걸 추천드려요.
  • DMV 동적 관리뷰에 대해서도 정리하도록 하겠습니다.

DBCC 명령어 요약

목적 명령어
로그 상태 DBCC SQLPERF
가장 오래된 활성 트랜잭션 검사 DBCC OPENTRAN
무결성 검사 DBCC CHECKDB
파일 줄이기 DBCC SHRINKFILE
캐시 초기화 DBCC FREEPROCCACHE