2013-10-03 2 views
0

정규 및 임시 테이블을 수백만 개의 레코드로 채우고 완료하는 데 몇 시간이 걸리는 절차가 있습니다. 내가 혼자서 달릴 때 문제 없어.SQL 프로파일 러가 '데이터 이동으로 인해 NOLOCK로 스캔'을 발생시킵니다.

그러나 성능을 향상시키고 SQL 프로필러 튜닝 추적을 시도했습니다. 이제 프로시 저는 다음과 같이 매번 폭탄을 투하합니다.

데이터 이동으로 인해 NOLOCK으로 스캔을 계속할 수 없습니다.

SQL 프로파일 러를 끄면 다시 작동합니다. 필자의 시스템은 Dell Precision T5400 Quad Xeon의 SQL R2 64 SP2, 8GB RAM 및 W2k8 Server 64 (최신 sp)의 많은 저장 용량 (3tb)입니다.

+0

또한 서버가 격리됩니다. 다른 DB는 실행 중이 지 않으며 유일한 활동은이 절차입니다. 외부 연결은 없습니다. 단지이 proc입니다. –

+0

SQL 프로파일 러는 타이밍을 현저하게 변경하고 * 어쨌든 *있는 경쟁 조건을 노출 할 수 있습니다. 프로 시저에서 NOLOCK을 사용하면 예외가 예상됩니다. SQL 프로파일 러 대신'sp_trace_xxx' 서버 측 추적을 사용해보십시오. 어쨌든 SQL 프로파일 러를 필요로하는 perf 문제가 거의 없으며 DMV/wait_stats에서 훨씬 우수한 도구가 있습니다. –

+0

절차에서 NOLOCK을 사용하지 않습니다. 그게 당신의 제안을 바꾸나요? –

답변

0

이 쿼리의 솔루션은 쿼리의 복잡성을 줄이는 것이 었습니다. 수백만 개의 레코드를 하나의 큰로드에 삽입했습니다. 좀 더 작은 하중으로 부러졌고이 오류가 사라졌습니다.