Suspect_pages 테이블 이해 및 관리

 

  • Version : SQL Server 2005, 2008, 2008R2, 2012

 

Suspect_pages 테이블은 SQL Server 2005부터 도입되었으며 msdb 데이터베이스에 위치한다. 주의대상이 발생하였을 때 대상 페이지에 대한 정보를 유지 관리하는데 사용되며 복원이 필요한지 여부를 결정하는데 사용 된다.

 

 

SQL Server 데이터베이스 엔진에서 데이터 페이지를 읽으려고 할 때 다음 오류 중 하나가 발생하면 페이지가 "주의대상"으로 간주 된다.

  • 디스크 오류(특정 하드웨어 오류)와 같이 운영체제에서 실행되는 CRC(순환 중복 검사)로 인해 발생하는 823 오류
  • 조각난 페이지(논리적 오류)와 같은 824 오류

 

데이터베이스 엔진에서 다음과 같이 정상적인 처리 중에 발생하는 모든 주의대상 페이지는 suspect_pages 테이블에 기록된다.

  • 쿼리에서 페이지를 읽어야 하는 경우
  • DBCC CHECKDB 작업이 수행중인 경우
  • 백업 작업이 수행중인 경우

 

복원작업, DBCC 복구 작업, 데이터베이스 삭제 작업 동안 필요한 경우 suspect_gapes 테이블이 업데이트 된다. suspect_pages 테이블은 824 오류가 발생하여 실패한 페이지당 하나의 행을 포함하며 최대 1000행까지 보관된다.

오류 설명

Event_type 값

운영체제 CRC 오류로 인해 발생하는 823 오류 또는 잘못된 체크섬이나 조각난 페이지 이외의 824 오류(예 : 잘못된 페이지 ID)

1

잘못된 체크섬

2

조각난 페이지

3

복원됨(페이지가 잘못된 것으로 표시된 후 복원됨)

4

복구됨(DBCC가 페이지를 복구함)

5

DBCC에 의해 할당 취소됨

7

 

 

다음 동작을 수행하면 suspect_pages 테이블에서 행이 자동으로 삭제 된다.

  • ALTER DATABASE REMOVE FILE
  • DROP DATABASE
  • DBCC CHECKDB REPAIR_ALLOW_DATA_LOSS는 suspect_pages 테이블을 업데이트하여 할당 취소되었거나 복구된 각 페이지를 표시한다.
  • RESTORE도 이 목록을 업데이트 한다. 전체, 파일 또는 페이지 복원을 수행하면 페이지 항목이 복원된 것으로 표시된다.

 

 

[suspect_pages 테이블의 일부 행을 삭제]

'Select restored, repaired, or deallocated pages.'

DELETE FROM msdb..suspect_pages

WHERE (event_type = 4 OR event_type = 5 OR event_type = 7);

GO

 

[suspect_pages 테이블에서 잘못된 페이지 검색]

'Select nonspecific 824, bad checksum, and torn page errors.'

SELECT * FROM msdb..suspect_pages

WHERE (event_type = 1 OR event_type = 2 OR event_type = 3);

GO

 

 

DBA는 데이터를 관리 해야 하는 의무와 책임이 있기에 이 테이블이 꽉 차지 않도록 수동으로 지우거나 따로 관리 테이블에 백업하는 방식을 고민해야 한다. Suspect_pages 테이블에 추가되는 행이 갑자기 증가하는 경우 I/O 하위 시스템에 문제가 있는지 조사해 보도록 하자.

 

[참고자료]

 

 

 


강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 38701
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 20797
1854 SQL Server 가상화 팁 jevida(강성욱) 2016.10.08 2091
1853 Net Framework 4.0과 SQL Server 2008 설치 오류 jevida(강성욱) 2016.10.08 1906
1852 SQL Server 인덱스 튜닝 접근 jevida(강성욱) 2016.10.07 3556
1851 Sys.dm_os_performance_counter 해석하기 jevida(강성욱) 2016.10.07 2583
1850 프로파일러를 이용한 중첩된 프로시저 디버깅 jevida(강성욱) 2016.10.07 1655
1849 SAN 스토리지 성능 모니터 - SAN 스토리지를 사용하는 경우 성능 카운터를 어떻게 모니터링 할까? jevida(강성욱) 2016.10.07 1849
1848 저장된 Plan Cache 확인 및 활용 jevida(강성욱) 2016.10.07 4822
1847 Xp_fixeddrives 세부 정보 확인하기 jevida(강성욱) 2016.10.07 2014
1846 강제 매개변수화로 인한 성능 저하 사례 jevida(강성욱) 2016.10.07 1654
1845 파라메터 스니핑과 데이터 스큐 jevida(강성욱) 2016.10.07 1581
1844 DBCC CHECKDB 버그 및 해결 방법 jevida(강성욱) 2016.10.07 1621
1843 NOLOCK HINT 이해 jevida(강성욱) 2016.10.07 7995
1842 인증으로부터 분리된 사용자 방지 jevida(강성욱) 2016.10.07 3195
1841 비관리자 계정으로 쿼리 계획 보기 jevida(강성욱) 2016.10.07 1293
1840 SSMS 폴링 간격 구성 jevida(강성욱) 2016.10.07 1852
1839 Deadlock 감지하여 알림하기 jevida(강성욱) 2016.10.07 1903
» Suspect_pages 테이블 이해 및 관리 jevida(강성욱) 2016.10.07 1444
1837 SSRS SocketException jevida(강성욱) 2016.10.07 1532
1836 파티션 분할 시 I/O 최소화 하기 jevida(강성욱) 2016.10.07 1940
1835 대량 BCP 작업 시 발생하는 오류 (665, 1450, 33) jevida(강성욱) 2016.10.07 1770





XE Login