찢어진 페이지 감지 및 체크섬은 언제 SQL Server에 도입되었으며 업그레이드 동작은 무엇입니까?


15

최신 SQL Server에는 페이지 확인을위한 두 가지 옵션이 있습니다. 되는 페이지 감지 찢어진체크섬 . 없음은 물론 옵션의도 없습니다.

저는 믿습니다 체크섬이 SQL Server 2005에서 및 업그레이드 것을 또는 그 이전 페이지는 방법을 확인 유지할 것 이전 버전에서 DB를 복원 소개되었다. 즉, 암시 적 업그레이드가 없었습니다.

관련된 문제는 SQL Server 2000을 사용하여 프로덕션에 들어가고 이후 SQL Server 2008 R2 서버로 이동 한 프로덕션 데이터베이스가 있다는 것입니다. 찢어진 페이지 감지 일 것으로 예상되면 페이지 확인이 없음 으로 설정됩니다 . 이 시간으로 되돌아 가면 DB가 원래 SQL Server 7.0에서 개발 된 다음 SQL Server 2000으로 마이그레이션되었다고 생각되는 것 같습니다. 이는 관찰 된 결과를 설명 할 수 있습니다.

Torn Page DetectionChecksum 이 SQL Server의 기능이 된 시점과 새로운 버전으로 마이그레이션하거나 업그레이드 할 때 어떻게 작동 하는지 궁금했습니다 .

편집 : 답변 중 일부를 요약하면 다음과 같습니다.

찢어진 페이지 감지가 SQL Server에 들어온 날짜에 대해서는 약간의 차이가 있습니다.
링크 1 : http://support.microsoft.com/kb/230785
링크 2 : http://technet.microsoft.com/en-us/library/aa337525(v=sql.90).aspx

첫 번째 링크는 SQL 7.0과 두 번째 SQL2000을 나타냅니다. 필자는 SQL7.0 제안을 신뢰하는 경향이 있으며 링크 2는 SQL7.0에서 기본적으로 해제되어 있고 SQL2000에서 기본적으로 해제되어 있기 때문에 혼란 스러웠습니다.


2
코드가 커밋되었을 때 소개되었습니다.
swasheck

왜 중요한가요? 여기서 해결되는 문제는 무엇입니까?
Marian

@swasheck-귀하의 의견을 이해하지 못합니다.
Paul

1
@Paul은 다시 열 투표
swasheck

1
@Paul 내 대답에서 찢어진 페이지 또는 체크섬 비트를 확인하기 위해 dbcc 페이지 정보를 추가했습니다.
Kin Shah

답변:


15

SQL Server 2000에서 손상된 페이지를 식별하려면 데이터베이스 옵션 TORN_PAGE_DETECTION을 TRUE로 설정해야합니다.

그러나 SQL 2005 이상에서는 새로운 설정 PAGE_VERIFY가 기존 TORN_PAGE_DETECTION을 대체하여 두 가지 다른 유형의 페이지 확인 (TORN_PAGE_DETECTION 및 CHECKSUM) 중에서 선택할 수 있습니다.

이제 어떤 질문을 설정해야합니까-TORN_PAGE_DETECTION 또는 CHECKSUM?

TORN_PAGE_DETECTION-페이지가 디스크에 성공적으로 쓰여지지 않은 시점을 감지 할 수 있도록 페이지에 512 바이트마다 비트를 기록합니다. 캐치는 512 바이트에 저장된 데이터가 실제로 올바른지 아닌지를 알려주지 않으므로 몇 바이트가 잘못 기록되었을 수 있습니다.

CHECKSUM-페이지에 체크섬이 있다고 가정하고 페이지를 쓸 때와 페이지를 읽을 때 페이지의 체크섬을 요약합니다.

SQL Server는 페이지의 비트 패턴을 기반으로 체크섬을 계산하고이를 페이지 헤더에 저장 한 다음 I / O를 발행하여 페이지를 작성합니다. SQL Server는 페이지를 읽을 때 동일한 논리를 사용하여 체크섬을 다시 계산 한 다음 페이지 헤더에서 사용 가능한 값과 비교합니다. 체크섬 값이 일치하면 쓰기-읽기주기 동안 페이지가 손상되지 않은 것으로 가정합니다.

체크섬 계산 비용은 각 페이지 읽기 및 쓰기에서 발생하므로 CPU 오버 헤드가 증가하여 워크로드 처리량에 영향을 줄 수 있습니다. 명심해야 할 또 다른 사항은 체크섬이 페이지의 특정 비트 패턴에 대해 고유하지 않다는 것입니다. 두 페이지가 동일한 체크섬 값에 매핑 될 수 있습니다. 따라서 페이지 손상이 감지되지 않을 수있는 원격 가능성이 있습니다.

참조 : SQL2005의 체크섬

질문에 구체적으로 답변하려면 :

Checksum이 SQL2005에 도입되었으며 이전 버전에서 DB를 업그레이드하거나 복원하면 이전 페이지 확인 방법이 유지된다고 생각합니다. 즉, 암시 적 업그레이드가 없었습니다.

예 CHECKSUM은 SQL Server 2005에 도입되었으며 DEFAULT 입니다. 2000에서 2005로 업그레이드 할 때 CHECKSUM을 사용하도록 데이터베이스 옵션 페이지 확인을 명시 적으로 변경해야합니다.

sql 2005에서 이미 생성 된 데이터베이스를 sql 2005를 실행하는 다른 서버로 복원하는 경우 설정할 필요가 없습니다. 페이지 확인 옵션을 설정 한 내용으로 유지됩니다.

찢어진 페이지 감지가 왔을 때 연구에 성공하지 못했습니다

보낸 사람 : http://support.microsoft.com/kb/230785

7.0 이전의 SQL Server 버전

7.0 이전의 SQL Server 버전은 로그 패리티 또는 조각난 비트 감지 기능을 제공하지 않았습니다. 실제로 해당 버전은 로그 레코드가 2KB 로그 페이지를 채울 때까지 동일한 로그 페이지를 여러 번 쓸 수 있습니다. 성공적으로 커밋 된 트랜잭션이 노출 될 수 있습니다. 장애가 발생한 동안 로그 페이지를 다시 쓰면 커밋 된 트랜잭션이있는 섹터가 제대로 다시 쓰지 않을 수 있습니다.

따라서 TORN_PAGE_DETECTION은 SQL Server 7.0부터 사용되었습니다. 그럼에도 불구하고 기본값은 활성화되지 않은 것입니다 (동일한 링크) .

참고 SQL Server 7.0에서는 찢어진 페이지 감지 기능이 기본적으로 사용되지 않습니다. 시스템에서 탐지를 활성화하는 방법 은 sp_dboption 을 참조하십시오 .

따라서 데이터베이스가 7.0 인스턴스에 대해 개발 된 후 업그레이드 된 경우 NONE의 기존 PAGE VERIFY 옵션을 사용하여 업그레이드했을 것입니다 (@ThomasStringer가 그의 답변에서 언급 한 바와 같이).


편집 : 2013 년 9 월 24 일 답변을 개선하려면 :

SQLSkills의 SQL Server 내부 메모를 참조하면 페이지 덤프를 사용하여 찢어진 비트 감지-TORN_PAGE_DETECTION 또는 CHECKSUM의 활성화 여부를 확인할 수 있습니다.

use database_name -- change here for your database !!
checkpoint
go 
dbcc traceon (3604)   -- send output to screen
go
dbcc page (dbaalert, 1,1,0)
dbcc traceoff (3604)  -- turn off the trace flag
go

m_tornBits : 데이터베이스에 어떤 페이지 보호가 설정되어 있는지에 따라 페이지 체크섬 또는 찢어진 페이지 보호 비트로 대체 된 비트가 유지됩니다.

참고 : 이전 SQL Server 버전을 실행하고 있지 않습니다. 아래는 SQL Server 2000 이상 에서 확인되었습니다 . 7.0 또는 6.5가 돌아 다니고 있다면 확인할 수도 있습니다 :-)

여기에 이미지 설명을 입력하십시오


@ Kin aye SQL2000에서도 주변에 있다는 것을 알고 처음 도입되었을 때 알고 싶습니다. "이전 버전으로 이동"이라는 문구에 의해 TPD가 SQL2000에 도입되었다고 가정하고 SQL7에서 SQL2000으로의 이동은 SQL2005 이전의 버전간에 이동하는 것으로 가정합니다. 이러한 마이그레이션 중에 TPD가 설정되어 있는지 알고 싶습니다. 나는 그것이 그런 것을 확인할 수는 없었지만 완전히 기대하지는 않았다.
Paul

내 편집 주석에 포함 있다고 생각하기 때문에 @ 폴 내가 그들을 삭제
swasheck

@Kin 나는 SQL2008R2에서 DBCC 코드를 시험해 보았고 1711843878의 m_tornbits 값을 얻었습니다. 그래서 부울이 아니라 측정입니다.
Paul

@Paul 체크섬 또는 페이지 페이지가 켜져 있음을 의미합니다. 2005 년부터는 체석에만 가야합니다. 7.0 테스트를 위해 거짓말을하고 있는지 궁금하십니까?
Kin Shah

6

BOL참조를 살펴보십시오 .

사용자 또는 시스템 데이터베이스가 SQL Server 2005 이상 버전으로 업그레이드되면 PAGE_VERIFY 값 (NONE 또는 TORN_PAGE_DETECTION)이 유지됩니다. CHECKSUM을 사용하는 것이 좋습니다.

이것은 SQL Server 2005 이전에는 TORN_PAGE_DETECTION존재하지 않는 옵션을 나타냅니다 CHECKSUM.

그리고 두 번째 요점에 대답하십시오.

... 이전 버전에서 DB를 업그레이드하거나 복원하면 이전 페이지 확인 방법이 유지됩니다.

네 맞습니다. CHECKSUM페이지 확인 방법 을 사용하려면 데이터베이스를 명시 적으로 설정해야합니다 .


참조 @Thomas에 감사하지만 SQL Server에서 TORN PAGE DETECTION을 처음 사용할 때 응답하지 않습니다.
Paul

2
@Paul 이렇게하면 SQL Server 2005 이전에 찢어진 페이지 감지가 존재했음을 알 수 있습니다. 페이지 확인에 사용 된 SQL Server 버전을 찾고 있습니까? 역사 수업 외에도, 당신이 무엇을 얻고 자하는지 잘 모르겠습니다. 정확히 어떤 문제를 해결하려고합니까?
Thomas Stringer

나는 그것이 언제 생겨 났는지, 그리고 이주하는 동안 어떻게 행동했는지 알고 싶었다. 우리의 아주 오래된 DB 중 일부가 현대 (ish, SQL2008R2) 서버 중 일부에서 설정을 갖게 된 방법을 이해하고 싶습니다.
Paul

데이터베이스에 TORN_PAGE_DETECTION이 있으면 SQL Server 2005 이전 버전에서 업그레이드되고 해당 페이지 확인 옵션이 계속 유지 될 수 있습니다.
토마스 스트링거

TPD가 활성화되어 있지 않아 당황스러운 부분이었습니다. 다른 답변은 현재이 문제에 대한 해결책을 제공했습니다 (SQL7.0에는 TPD가 있었지만 기본적으로 활성화되지 않았으며 원래 개발 된 버전이었습니다)
Paul

3

최신 SQL Server에는 페이지 확인을위한 두 가지 옵션이 있습니다.

TORN_PAGE_DETECTION, CHECKSUM 및 NONE의 세 가지가 있습니다.

CHECKSUM이 SQL Server 2005에 도입되었다고 생각합니다

에서 인용 "버퍼 관리"라는 제목의 MSDN 기사 : 조각난 페이지 검색은 SQL 서버 2000 체크섬에 도입 된이 SQL Server 2005에서 도입되었다.

이 기사에서 언급 한 다른 것들의 개요는 페이지 확인 메커니즘이 데이터베이스 작성시 지정된다는 것입니다. 따라서 누가 무엇을 설정하고 무엇을 설정했는지에 따라 데이터베이스를 만들 었는지에 따라 모델 데이터베이스를 구성하여 제어 할 수도 있습니다. 또한 설정을 변경하면 페이지가 다음에 쓰여질 때만 전체 데이터베이스에 영향을 미치지 않습니다. 또한 Paul Randal에 따르면 페이지를 메모리로 읽고 변경 한 다음 디스크에 다시 쓸 때만 수행됩니다. 그 정보는 여기에 있습니다 .

SQL Server 7.0을 사용하여 개발되었지만 SQL Server 2008 R2 서버로 옮겼지만 SQL Server 2000을 사용하여 프로덕션에 들어간 프로덕션 데이터베이스가 있습니다. TORN PAGE DETECTION 일 것으로 예상했지만 Page Verify가 NONE으로 설정되어 있습니다.

데이터베이스 인스턴스에 대한 권한이있는 사람은 해당 값을 수정할 수 있습니다. MSDN에 명시된 업그레이드를 통해 지속될 수 있습니다 .

사용자 또는 시스템 데이터베이스를 SQL Server 2005 이상 버전으로 업그레이드하면 PAGE_VERIFY 값 (NONE 또는 TORN_PAGE_DETECTION)이 유지됩니다.

누군가가 구성을 잘못 이해하고 문제를 해결하기 위해 어둠 속에서 촬영했기 때문에 나중에 수정되었을 수도 있습니다.

TORN PAGE DETECTION이 페이지 확인 기능이 된 시점이 궁금합니다.

위에서 설명한 SQL Server 2000

최신 버전으로 마이그레이션하거나 업그레이드 할 때 작동 방식

위에서 설명한대로 업그레이드 중에 이전 설정이 유지됩니다.

이제 사람들이 제공하는 다른 링크는 찢어진 페이지 감지가 가능할 때 SQL Server 7.0이 제공된다는 사실을 지적하고 싶습니다. 이 기사에서 언급 한 바와 같이 Microsoft 문서가 모든 상황에서 진실로 유지되어서는 안된다는 것이 여러 번 입증되었습니다. 그들이 틀린 곳이 많이 있습니다. 그렇다면 어떤 대답이 수용 가능한지 어떻게 알 수 있습니까? 우리는 모두 Microsoft의 답변을 뒷받침 할 수있는 문서를 제공했습니다.

또한 찢어진 페이지 감지는 SQL Server 2012부터 감가 상각 목록에 있으므로 데이터베이스에서 시작하도록 설정된 방법과 관련이 있습니다. 내가 CHECKSUM 이외의 것으로 설정된 것을 보았을 때 나는 즉시 그것을 바꾸고 더 중요한 다른 작업으로 넘어갑니다. 잘못된 구성을 어떻게 배치했는지에 대해서는 걱정하지 않고 구성을 수정 한 다음 변경 권한이있는 사용자에게 구성 항목을 다른 것으로 변경해서는 안되는 이유를 알려야합니다. 그냥 내 $ 0.02


TPD가 기본적으로 ON으로 설정된 2000 년이라고 생각합니다. 다른 많은 새로운 SQL Server 기능과 마찬가지로 기본적으로 사용하지 않도록 설정 / 해제하고 DBA가 강제로 설정합니다. 어쨌든, 사용 중단 경고로 인해 +1이 발생했습니다.
swasheck

좋은 지적입니다, 당신은 당신이 말하는 것을 백업하는 것처럼 보이는 좋은 링크를 가지고 있습니다. 그러나 다른 사람이 제공 한 링크 ( support.microsoft.com/kb/230785 )가 그것을 대체한다고 생각합니다. 버퍼 관리 섹션이 다른 링크가 완전히 잘못한 것보다 절반이 잘못되었다고 생각할 가능성이 큽니다. 그게 말이 되더라도, 내가 잘 나 자신을 잘 퍼 뜨리고 있는지 확실하지 않습니다!
Paul

그것은 라이센싱과 같은 것들 중 하나입니다. MS가 그것에 대해 언급 한 것은 아무것도 없습니다.

0

@Thomas Stringer와 @Kin은 모두 SQL Server 2005에 도입되었으며 모든 버전의 SQL Server에서 작동한다고 생각합니다. CHECKSUM이 SQL Server 2008에 도입되었지만 TempDB의 경우

http://blogs.msdn.com/b/sqlserverstorageengine/archive/2008/03/23/checksum-and-tempdb.aspx


감사합니다 @DaniSQL, 그러나 아직 아무도 그 질문에 완전히 대답하지 않았습니다. 즉, TORN PAGE DETECTION이 도입 된시기와 업그레이드 / 마이그레이션 중에 어떻게 작동 했습니까?
Paul

나는 역사가들에게 다음을 알아낼 것이다.-) 업그레이드 / 마이그레이션에 관해서는 각 데이터베이스에서 페이지 확인 옵션을 수동으로 CHECKSUM으로 변경하지 않으면 아무 일도 일어나지 않을 것이다. 그럼에도 불구하고 이미 존재하는 페이지에는 체크섬이 없습니다. blogs.msdn.com/b/sqlserverstorageengine/archive/2006/06/29/…
DaniSQL

@DaniSQL 덕분에 SQL2005 이상으로의 마이그레이션을 이해하는 방법입니다. 이전 버전
Paul
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.