Tôi đang cố gắng hiểu cách thức lấy mẫu Thống kê hoạt động và liệu hành vi dự kiến dưới đây có được cập nhật hay không.
Chúng tôi có một bảng lớn được phân chia theo ngày với một vài tỷ hàng. Ngày phân vùng là ngày làm việc trước đó và do đó là một khóa tăng dần. Chúng tôi chỉ tải dữ liệu vào bảng này cho ngày trước.
Tải dữ liệu chạy qua đêm, vì vậy vào Thứ Sáu ngày 8 tháng 4, chúng tôi đã tải dữ liệu cho ngày 7.
Sau mỗi lần chạy, chúng tôi cập nhật số liệu thống kê, mặc dù lấy một mẫu, thay vì a FULLSCAN
.
Có thể tôi đang ngây thơ, nhưng tôi đã mong đợi SQL Server xác định khóa cao nhất và khóa thấp nhất trong phạm vi để đảm bảo nó có một mẫu phạm vi chính xác. Theo bài viết này :
Đối với nhóm đầu tiên, ranh giới dưới là giá trị nhỏ nhất của cột mà biểu đồ được tạo.
Tuy nhiên, nó không đề cập đến xô cuối cùng / giá trị lớn nhất.
Với bản cập nhật Thống kê được lấy mẫu vào sáng ngày 8, mẫu đã bỏ lỡ giá trị cao nhất trong bảng (thứ 7).
Vì chúng tôi thực hiện rất nhiều truy vấn trên dữ liệu từ ngày trước, điều này dẫn đến việc ước tính số lượng thẻ không chính xác và một số truy vấn hết thời gian.
SQL Server có nên không xác định giá trị cao nhất cho khóa đó và sử dụng giá trị tối đa đó RANGE_HI_KEY
không? Hay đây chỉ là một trong những giới hạn của cập nhật mà không sử dụng FULLSCAN
?
Phiên bản SQL Server 2012 SP2-CU7. Hiện tại chúng tôi không thể nâng cấp do thay đổi OPENQUERY
hành vi trong SP3 đang làm tròn số trong truy vấn máy chủ được liên kết giữa SQL Server và Oracle.