5M과 1.5G 사이의 행 수를 가진 여러 테이블이 있습니다.
각 테이블에는 BLOB 필드가 있으며 크기는 100 바이트에서 30MB까지 다양하며 '행에서 큰 값 유형'= ON으로 저장됩니다.
테이블은 서로 다른 디스크 @ 서로 다른 LUN @ 매우 빠른 SAN에 각각 3-4 개의 파일이있는 다른 파일 그룹에 저장됩니다.
이 테이블의 크기는 매일 5 ~ 100Gb, 600 ~ 1.5M 행으로 증가합니다.
2 주에서 6 개월까지 의 일정 시간이 지나면 일부 행이 삭제되거나 아카이브 DB로 이동되므로 6 개월이 지난 작업 테이블에는 행이 없습니다.
서버의 현재 구성 :
- SQL Server 엔진은 2008 R2 SP1 Enterprise @ 24 코어, @ 64Gb RAM입니다.
- SQL Server는 추가 시작 플래그와 함께 실행됩니다.
-T 3640; (저장 프로 시저의 각 명령문에 대해 DONE_IN_PROC 메시지를 클라이언트로 보내는 것을 제거합니다. 이는 SET NOCOUNT ON의 세션 설정과 유사하지만 추적 플래그로 설정하면 모든 클라이언트 세션이이 방식으로 처리됩니다)
-T 1118; (tempDB에서 할당을 한 번에 1pg에서 (처음 8 페이지) 한 범위로 전환합니다.)
-T 2301; (의사 결정 지원 조회에 특정한 고급 최적화를 사용합니다.이 옵션은 큰 데이터 세트의 의사 결정 지원 처리에 적용됩니다)
-T 1117; (모든 데이터 파일을 한 번에 증가시킵니다. 그렇지 않으면 차례로 진행됩니다.)
-이자형; (파일 그룹의 각 파일에 할당 된 익스텐트 수를 증가시킵니다.이 옵션은 인덱스 또는 데이터 스캔을 실행하는 사용자 수가 제한된 데이터웨어 하우스 애플리케이션에 유용 할 수 있습니다)
-T 834; SQL Server는 버퍼 풀 ( http://msdn2.microsoft.com/en-us/library/aa366720.aspx) , http://support.microsoft에 할당 된 메모리에 대해 Windows 대형 페이지 할당을 사용합니다 . com / kb / 920093 )
- SQL Server는 큰 페이지 확장명을 사용합니다
- SQL Server는 빠른 파일 초기화 옵션을 사용합니다
- 모든 데이터베이스에 대해 AUTOSHRINK가 꺼져 있습니다.
문제는 - 서버의 가동 시간의 어느 시점부터 (개월 며칠에서) 것을 GHOST CLEANUP
몇 초에서 몇 페이지 (정리 - 프로세스가 거부 강제 정리를 해결하고 단순히 일반적인 작업을 수행 할 수 which is seen thru Extended Events
있다), 적합하지가 있기 때문에, 삭제 된 모든 행을 정리할 수 없습니다
문제는 SQL Server 2005 RTM Enterprise 시대부터 지속됩니다.
내가 문제를 해결하려고 시도한 방법 :
- 테이블의 클러스터 된 인덱스에서 SCAN 작업을 강제로 시도했습니다.
- 테이블의 클러스터 된 인덱스에서 BLOB 열의 모든 내용을 포함하는 SCAN 작업을 강제로 시도했습니다.
- 시스템 sp_clean_db_free_space 및 sp_clean_db_file_free_space
- DB의 모든 파일 및 페이지에 대해 수동으로 dbcc cleanpage (@dbid, @fileid, @page)
- 클러스터형 인덱스 재 구축 및 재구성
- 데이터베이스 재 작성
DBCC FORCEGHOSTCLEANUP
쿼리를 실행할 때 :
select * from sys.dm_db_index_physical_stats(db_id(), object_id('ProblemTable'), 1, 0, 'detailed')
LOB_DATA의 할당 단위 유형에 대해서만 수백만에서 수천만 개의 고스트 레코드가 표시됩니다.
도움이되는 유일한 것 :
- SHUTDOWN 명령으로 서버를 중지하거나 전체 호스트를 다시 시작-GHOST CLEANUP 프로세스를 다시 시작한 후 몇 시간 동안 실행되고 실제로 모든 고스트 레코드를 정리합니다.
- EMPTYFILE 옵션을 사용하는 DBCC SHRINKFILE-한 파일에서 다른 파일 또는 새로 생성 된 파일로 모든 데이터를 이동하면이 파일의 고스트 레코드 만 정리됩니다. 문제는 축소 작업이 실제로 싫어한다는 것입니다. 하나의 파일에 3-4 일이 걸립니다.
문제 는 서버 다운 타임이 시간당 수천에서 수만 달러까지 너무 비싸고 심지어 용납 할 수 없기 때문에 서버 다운 타임없이 GHOST CLEANUP을 강제로 수행 할 수 있는 프로그래밍 방식 (바람직한) 또는 유지 보수 방법이 있습니까?
내 것과 같은 문제가 나타났습니다.
- http://support.microsoft.com/kb/932115
- http://www.sqlservercentral.com/Forums/Topic496244-149-1.aspx
그리고 바로 여기에 있습니다 :