INSERT에서 WITH TABLOCK을 사용할 때의 이점


15

경우에 따라 INSERT INTO <tablename> (WITH TABLOCK)최소한의 로깅으로 인해 작업 수행 속도가 빨라집니다. 이러한 상황에는 BULK_LOGGED복구 모델에 데이터베이스가 포함됩니다 .

사용하는 다른 잠재적 인 성능 이점이 있습니까 WITH TABLOCKINSERT데이터베이스 (때 빈 테이블에 tempdb를이 )가 사용하는 SIMPLE복구 모델은?

SQL Server 2012 Standard Edition에서 작업하고 있습니다.

내 유스 케이스는을 사용하여 저장 프로 시저 내에서 임시 테이블을 생성 한 다음 즉시 채우는 것 INSERT...SELECT입니다. 그런 종류의 tempdb 남용 을 피하려고 노력 하지만 때로는 필요할 수도 있습니다.

필요한 사례를 작성하려고합니다 TABLOCK. 그것은 아무것도 다치게하지 않는 것처럼 보이며 이점이있을 수 있습니다. 코드베이스 전체에 추가 할 수있는 충분한 이점이 있는지 알아 내려고 노력 중입니다. 테이블에 쓰려는 다른 프로세스가 없다고 확신합니다.

일반적으로 클러스터 된 PK를 사용하여 새로 만든 로컬 임시 테이블에 삽입하지만 때로는 힙을 사용합니다.

답변:


17

나는 몇 가지 이점을 알고 있지만 대부분 상황에 따라 다릅니다.

  1. 를 사용 TABLOCK하면 동시성이 줄어들지 만 대상 테이블에서 즉시 테이블 잠금을 수행합니다. 하나의 세션 만 테이블에 삽입된다는 것을 보장 할 수 있으면 불필요한 행 또는 페이지 잠금을 피하고 잠금 에스컬레이션 을 방지 할 수 있습니다. 결국, 너무 많은 데이터를 삽입하는 경우 어쨌든 잠금 에스컬레이션이 발생하는 이유는 무엇입니까?
  2. TABLOCK모든 페이지 없이 빈 페이지 압축 힙에 삽입하는 경우 페이지 압축 대신 행 압축이 적용됩니다 .

새로 삽입 된 행은 페이지 압축됩니다.

  • 페이지 압축을 사용하여 새 행이 기존 페이지로 이동하는 경우

  • TABLOCK을 사용하여 BULK INSERT를 통해 새 행을 삽입 한 경우

  • 새 행이 INSERT INTO ... (TABLOCK) SELECT FROM을 통해 삽입 된 경우

그렇지 않으면 행이 행 압축됩니다.

  1. SQL Server 2016에서 , CCI (Clustered Columnstore Indices)로컬 임시 테이블에TABLOCK 병렬 삽입 하려면 힌트가 필요합니다 . 많은 제한 사항이 있으며 그 중 일부는 문서화되어 있지 않습니다. 이 생길 수없는 열 삽입은 통해 수행 할 수없는 등IDENTITYOUTPUT

참조 데이터로드 성능 가이드

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