임시 테이블로 데이터를로드 할 때 최소한의 로깅 가져 오기


10

Data Loading Performance Guide를 읽은 후에도 최소한의 로깅을 얻기 위해 TABLOCK 테이블 힌트를 빈 임시 테이블에 추가하고 클러스터 된 인덱스로 정의해야하는지 확실하지 않습니다.

분명히 temp 테이블은 SIMPLE 복구 모드에서 작동하는 TempDB에서 만들어 지므로 최소한의 로깅을위한 완벽한 후보라고 생각했을 것입니다. 그러나 확인을위한 구절을 찾을 수는 없습니다.

임시 테이블은 최소한의 로깅 후보이며, 그렇다면 영구 테이블에 권장되는대로 TABLOCK 힌트를 추가 할 가치가 있습니까?

답변:


18

TABLOCK최소한의 로깅을 얻기 위해 클러스터 된 인덱스로 정의 된 빈 임시 테이블에 테이블 힌트 를 추가해야하는지 확실하지 않습니다 .

아니요. 로컬 임시 테이블 ( #temp)은 작성 세션 전용 이므로 테이블 잠금 힌트가 필요하지 않습니다. 에서 생성 된 전역 임시 테이블 ( ##temp) 또는 일반 테이블 ( dbo.temp) 에는 테이블 잠금 힌트가 필요 tempdb합니다. 여러 테이블 에서 액세스 할 수 있기 때문입니다.

전체 최소 로깅 최적화가 적용되지 않더라도 생성 된 테이블은 정보 tempdb를 로깅 할 필요가없는 것과 같은 다른 최적화의 혜택을받습니다 REDO. 문서화되지 않은 행을 사용하여 행 또는 페이지가 기록되고 있는지 테스트 할 수 있습니다 sys.fn_dblog. 일반 로깅은와 같은 행 로그 레코드를 제공 LOP_INSERT_ROWS합니다.


SQL Server 2016에서 쿼리로 TABLOCK병렬 실행하려면 로컬 임시 테이블 을 추가 해야합니다 INSERT...SELECT. Microsoft 기술 자료 문서를 참조하십시오.

INSERT를 실행할 때 성능이 저하됩니다. SQL Server 2016에서 SELECT 작업

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