통계 샘플링의 작동 방식과 샘플링 된 통계 업데이트에서 아래 동작이 예상되는지 여부를 이해하려고합니다.
우리는 날짜별로 2 억 개의 행으로 분할 된 큰 테이블을 가지고 있습니다. 파티션 날짜는 이전 영업 날짜이며 오름차순 키입니다. 전날의 데이터 만이 테이블에로드합니다.
데이터로드는 밤새 실행되므로 4 월 8 일 금요일에 7 일에 대한 데이터를로드했습니다.
각 실행 후 통계를 업데이트하지만 a 대신 샘플을 가져옵니다 FULLSCAN
.
어쩌면 나는 순진하지만 SQL Server가 정확한 범위 샘플을 얻도록 범위에서 가장 높은 키와 가장 낮은 키를 식별 할 것으로 기대했을 것입니다. 이 기사 에 따르면 :
첫 번째 버킷의 경우 하한은 히스토그램이 생성되는 열의 가장 작은 값입니다.
그러나 마지막 버킷 / 가장 큰 값은 언급하지 않습니다.
8 일 오전에 샘플링 된 통계 업데이트로 인해 샘플이 테이블에서 가장 높은 값 (7 일)을 놓쳤습니다.
전날의 데이터에 대해 많은 쿼리를 수행 할 때 카디널리티 추정이 부정확하고 여러 쿼리가 시간 초과되었습니다.
SQL Server가 해당 키의 최고 값을 식별하지 못하고이를 최대 값으로 사용해야 RANGE_HI_KEY
합니까? 아니면 이것을 사용하지 않고 업데이트의 한계 중 하나 FULLSCAN
입니까?
버전 SQL Server 2012 SP2-CU7 OPENQUERY
SQL Server와 Oracle 간의 연결된 서버 쿼리에서 숫자를 반올림 한 SP3의 동작 변경으로 인해 현재 업그레이드 할 수 없습니다 .