Я намагаюся зрозуміти, як працює вибірка статистичних даних і чи очікується нижченаведена поведінка під час вибірки оновлених статистичних даних.
У нас є велика таблиця, розподілена за датою, на пару мільярдів рядків. Дата розділу є попередньою датою бізнесу, тому вона є висхідним ключем. Ми завантажуємо дані в цю таблицю лише за попередній день.
Навантаження даних працює протягом ночі, тому у п’ятницю 8 квітня ми завантажили дані для 7-го.
Після кожного запуску ми оновлюємо статистику, хоча беремо вибірку, а не а FULLSCAN
.
Можливо, я наївний, але я б очікував, що SQL Server визначить найвищий і найнижчий ключ у діапазоні, щоб переконатися, що він отримав точний зразок діапазону. Відповідно до цієї статті :
Для першого відра нижня межа є найменшим значенням стовпця, на якому генерується гістограма.
Однак він не згадує останнє відро / найбільше значення.
З оновленням вибіркової статистики вранці 8-го року вибірка пропустила найвище значення в таблиці (7-е).
Оскільки ми робимо багато запитів щодо даних за попередній день, це призвело до неточної оцінки кардинальності та вичерпання кількості запитів.
Чи повинен SQL Server не визначати найвище значення для цього ключа і використовувати його як максимальне RANGE_HI_KEY
? Або це лише одна з меж оновлення без використання FULLSCAN
?
Версія SQL Server 2012 SP2-CU7 Наразі ми не можемо оновити через зміну OPENQUERY
поведінки в SP3, яка округляла числа в запиті на зв’язаний сервер між SQL Server та Oracle.