우리는 100,000 개가 넘는 레코드가있는 테이블을 가지고 있습니다.이 테이블은 천천히 변화하는 차원으로 동일한 내구성 키 , ValidFrom (화면 캡처에서 TaskDate로 표시) 및 ValidUntil 필드는 특정 날짜의 레코드 유효성을 결정합니다.SQL Server 스레드 - 하나는 모든 작업을 수행하고 다른 MAXDOP - 1 (5..30)은 아무 작업도하지 않음
필터 된 인덱스, 필터링 된 통계, 하드 코드 된 매개 변수, 동적 SQL을 사용하여 문제를 해결하려고 시도한 후 특정 문제에 대한 진전 없음 : 옵티마이 저는 올바른 인덱스를 선택하고 검색을 수행하며 예상 레코드가 상대적으로 가깝습니다. 실제 레코드가 있지만 하나의 CPU 스레드 만이 내용을 읽습니다.
내가 MAXDOP 6를 실행하거나 사용 가능한 모든 CPU에서 실행시키는 경우 문제가되지 않습니다.
그 밖의 어떤 시도를 할 수 있습니까?
먼저 편집 :이 여기에 문제가되지 않습니다 동안
일부 댓글이 포함 된 데이터 크기에 집중되었다. 첨부 된 것은 레코드 카운트 이상을 수행하는 고급 쿼리입니다 (처음에는 게으른 작업자 스레드 상황을 보여주기 위해 사용됨).
읽기 작업시이 지연 작업자 스레드의 직접적인 결과는 정확히 동일한 키 조회입니다. 단 하나의 스레드 만 레코드를 수신 중이며 수행 할 작업이 있습니다.
실행 계획은 여기에서 볼 수있다 : http://pastebin.com/zJwZ56vh
쿼리가 무엇 참조에 대한
계획의 병렬 부분의 스크린 샷? 그 계획 이요? 나는 당신이 이것을 익명화하려고 시도했다는 것을 알았습니다. 아마도 SQL Sentry Plan Explorer를 사용하여 계획과 질문을 포럼에 실제로 업로드하는 것을 고려해보십시오. (익명 계획에 기능이 내장되어 있음) –
22MB의 데이터입니다. 왜 지구상에서 병렬화할까요? 6 개의 스레드가 너무 많습니다. –
@RemusRusanu - '73.4 MB'는 예상 행간 차이와 실제 행 불일치로 인해'* 3.3 '크기가 증가하지만 여전히 10K 페이지 미만입니다. –