고스트 정리 설정


10

트랜잭션이 많은 데이터베이스를 실행하고 있습니다 (평균 ~ 175k 트랜잭션 / 분, 시간당 거의 9M 레코드 추가 및 제거)

최근까지만해도 우리는 ~ 7.5 백만 건의 레코드가 추가 및 제거 되었기 때문에 그다지 큰 문제가되지 않았지만 최신 데이터가 증가함에 따라 고스트 정리는 정리를 유지할 수없는 것으로 보입니다. 테이블 / 인덱스에 사용되지 않은 공간.

며칠 전 우리는 16 개의 테이블 (대부분 2 개)에서 53GB의 '사용되지 않은 공간'에 도달하여 5 초에 한 번 실행되고 10 페이지가 넘는 고스트 정리 프로세스를 찾기 시작했습니다.

내 현재 솔루션은 이른 아침에 다음 명령의 세 스레드를 실행하는 것입니다.

DECLARE @2hours datetime = dateadd(hour,2,getutcdate())

WHILE getutcdate() < @2hours
BEGIN
    DBCC FORCEGHOSTCLEANUP ('DBNAME') WITH  NO_INFOMSGS
END

전날 밤부터 잔고를 따라 잡기 위해 (대부분의 삭제 작업이 수행 될 때)

기본 설정을 5 초 및 10 페이지에서 매 초마다 또는 20 페이지 이상으로 변경하도록 할 수있는 방법이 있는지 궁금합니다. 할 수있는 방법이 있습니까? 아니면 여러 정리 프로세스를 계속 진행하여 데이터 또는이를 지원할 수있는 다른 조치가있는 경우

재 인덱싱은 일주일에 한 번 이상 가장 영향을받는 인덱스에서 실행됩니다 (대부분은 격일로)

AlwaysOn 고 가용성 클러스터의 SQL Server 2012 Enterprise SP3_CU8 (내일 CU9로 업그레이드) 및 복제 (별도의 서버에 배포)

답변:


4

기본 설정을 5 초 및 10 페이지에서 매 초마다 또는 20 페이지 이상으로 변경하는 방법이 있는지 궁금합니다.

없습니다. 내가 지금 알지 못하는 Atleast :-)

이를 도울 수있는 다른 조치가 있다면

Paul Randal의 블로그에서 -사람들이 때때로 고려하는 한 가지 방법은 테이블 또는 인덱스 스캔을 수행하여 고스트 정리를 강제로 수행하여 고스트 정리 작업을 위해 삭제 된 모든 레코드를 큐에 넣는 것입니다.

select * from [your_problem_table] with (index = Index_that_has_large_Deletes)

삭제하는 대신 테이블분할하고 이전 파티션을 제거 할 가능성이 있습니까? 참고로 .. SQL Server 2016 이상에서는 개별 파티션도자를 수 있습니다.

또한, 수 (TEST 및 실행) - 비활성화 유령 청소 (추적 플래그 661) 다음 rebuild index WITH ONLINE = ON은 엔터프라이즈 버전을 사용하고 있기 때문에 옵션을 선택합니다.

복제와 함께 AlwaysON (비동기식)을 사용하는 경우 추적 플래그 1448 을 활성화 해야합니다. 비동기 보조 복제본이 변경 수신을 승인하지 않은 경우에도 복제 로그 판독기가 앞으로 이동할 수 있습니다.

Paul White에서 페이지와 전달 된 유령을 분리하는 삭제 를 읽고 테이블에 트리거 또는 LOB 열이 느려지 는지 확인하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.