SQL Server 샘플 통계 업데이트에서 오름차순 키 열에서 가장 높은 RANGE_HI_KEY가 누락되었습니다.


10

통계 샘플링의 작동 방식과 샘플링 된 통계 업데이트에서 아래 동작이 예상되는지 여부를 이해하려고합니다.

우리는 날짜별로 2 억 개의 행으로 분할 된 큰 테이블을 가지고 있습니다. 파티션 날짜는 이전 영업 날짜이며 오름차순 키입니다. 전날의 데이터 만이 테이블에로드합니다.

데이터로드는 밤새 실행되므로 4 월 8 일 금요일에 7 일에 대한 데이터를로드했습니다.

각 실행 후 통계를 업데이트하지만 a 대신 샘플을 가져옵니다 FULLSCAN.

어쩌면 나는 순진하지만 SQL Server가 정확한 범위 샘플을 얻도록 범위에서 가장 높은 키와 가장 낮은 키를 식별 할 것으로 기대했을 것입니다. 이 기사 에 따르면 :

첫 번째 버킷의 경우 하한은 히스토그램이 생성되는 열의 가장 작은 값입니다.

그러나 마지막 버킷 / 가장 큰 값은 언급하지 않습니다.

8 일 오전에 샘플링 된 통계 업데이트로 인해 샘플이 테이블에서 가장 높은 값 (7 일)을 놓쳤습니다.

여기에 이미지 설명을 입력하십시오

전날의 데이터에 대해 많은 쿼리를 수행 할 때 카디널리티 추정이 부정확하고 여러 쿼리가 시간 초과되었습니다.

SQL Server가 해당 키의 최고 값을 식별하지 못하고이를 최대 값으로 사용해야 RANGE_HI_KEY합니까? 아니면 이것을 사용하지 않고 업데이트의 한계 중 하나 FULLSCAN입니까?

버전 SQL Server 2012 SP2-CU7 OPENQUERYSQL Server와 Oracle 간의 연결된 서버 쿼리에서 숫자를 반올림 한 SP3의 동작 변경으로 인해 현재 업그레이드 할 수 없습니다 .

답변:


11

SQL Server가 해당 키의 최고 값을 식별하지 못하고이를 최대 값으로 사용해야 RANGE_HI_KEY합니까? 아니면 이것을 사용하지 않고 업데이트의 한계 중 하나 FULLSCAN입니까?

현재 샘플링 된 통계 구현의 한계입니다. 그대로, 샘플링 된 통계 콜렉션은 TABLESAMPLE SYSTEM할당 순서 스캔을 사용하고 스캔에서 샘플로 페이지를 선택하는를 사용합니다. 선택한 페이지 만 히스토그램에 영향을줍니다.

스캔은 인덱스 순서가 아닌 할당 순서이므로 첫 페이지와 마지막 페이지를 키 순서로 우선적으로 지정할 수있는 방법이 없습니다.

자세한 내용은 다음 관련 질문을 참조하십시오.

통계를 업데이트 할 때 샘플링은 어떻게 작동합니까?

그리고 나의 기사, 할당 순서 스캔

해결 방법 은 Fabiano Amorim의 오름차순 열 통계를 참조하십시오.


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