데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

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
1850 프로파일러를 이용한 중첩된 프로시저 디버깅 jevida(강성욱) 2016.10.07 1542
1849 SAN 스토리지 성능 모니터 - SAN 스토리지를 사용하는 경우 성능 카운터를 어떻게 모니터링 할까? jevida(강성욱) 2016.10.07 1720
1848 저장된 Plan Cache 확인 및 활용 jevida(강성욱) 2016.10.07 4497
1847 Xp_fixeddrives 세부 정보 확인하기 jevida(강성욱) 2016.10.07 1715
1846 강제 매개변수화로 인한 성능 저하 사례 jevida(강성욱) 2016.10.07 1537
1845 파라메터 스니핑과 데이터 스큐 jevida(강성욱) 2016.10.07 1528
1844 DBCC CHECKDB 버그 및 해결 방법 jevida(강성욱) 2016.10.07 1536
1843 NOLOCK HINT 이해 jevida(강성욱) 2016.10.07 7700
1842 인증으로부터 분리된 사용자 방지 jevida(강성욱) 2016.10.07 2103
1841 비관리자 계정으로 쿼리 계획 보기 jevida(강성욱) 2016.10.07 1241
1840 SSMS 폴링 간격 구성 jevida(강성욱) 2016.10.07 1770
1839 Deadlock 감지하여 알림하기 jevida(강성욱) 2016.10.07 1766
» Suspect_pages 테이블 이해 및 관리 jevida(강성욱) 2016.10.07 1370
1837 SSRS SocketException jevida(강성욱) 2016.10.07 1469
1836 파티션 분할 시 I/O 최소화 하기 jevida(강성욱) 2016.10.07 1854
1835 대량 BCP 작업 시 발생하는 오류 (665, 1450, 33) jevida(강성욱) 2016.10.07 1643
1834 기본 추적(default tace) 활성화 및 로그 확인 jevida(강성욱) 2016.10.07 1388
1833 SQL Server ALTER TABLE syntax diagrams jevida(강성욱) 2016.10.07 1157
1832 SQL Server Performance Counter Guidance jevida(강성욱) 2016.09.30 2467
1831 SQL Server CREATE TABLE syntax diagrams jevida(강성욱) 2016.09.30 1421





XE Login

테스트 팝업
Close