1

У меня есть приложение, которое обрабатывает много элементов из базы данных SQL. Он отлично работает, а затем, после обработки около 4 миллионов предметов, начинает зависать.

Используя SQL Server Profiler, я проследил проблему до запроса, который переходит с длительности от 1000 до 2000000.

Упрощенная версия запроса выглядит так:

выберите t.field1, t.field2 из таблицы t, где находится t.id (выберите топ 1000 t2.id из таблицы 2 t2, где t2.id> XXXX порядок по t2.id)

Любая идея, почему это может внезапно занять так много времени, чтобы выполнить?

2 ответа2

5

Это школьный пример устаревшей статистики - запрос выполняется хорошо, а затем, без каких-либо очевидных причин, становится очень медленным.

Статистика SQL Server становится неточной, когда используются базы данных и происходит много транзакций.

Устранение неполадок начинается с анализа медленного запроса. Если разница между предполагаемым и фактическим количеством строк в плане выполнения запроса превышает 10%, статистика устарела. Как будет зависеть производительность, зависит от запроса и плана выполнения. Одна и та же устаревшая статистика может по-разному влиять на два разных запроса.

Не существует динамического административного представления, которое может указывать на неточную статистику, и иногда проще обновить статистику и посмотреть, помогает ли это, чем анализировать ситуацию шаг за шагом.

Вы можете найти больше информации о статистике здесь: Статистика

0

Все, что нужно было обновить статистику.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .