Мы используем веб-версию SQL Server 2008 на сервере Windows 2012 R2 (32 ГБ ОЗУ) для хранения данных для веб-приложения на основе ASP.NET. Существует несколько дабасов с таблицами новостей и различными представлениями, которые мы регулярно запрашиваем (SqlDataReader
, Linq-to-SQL) с различными условиями присоединения и фильтрами. Сами запросы длиннее и зависят от домена, поэтому я пропущу пример.SQL Server: TempDB большое количество записей
До сих пор все работало нормально.
Теперь нам пришлось изменить такой запрос и расширить его с помощью простого состояния OR
. В результате число чтений и записей в TempDB
резко возросло. Резко означает 1000 записей более 100 МБ в минуту, что приводит к суммарному размеру файла tempdb в настоящее время 1,5 ГБ.
Если мы удалим оператор фильтра OR
из исходного запроса, то файл ввода-вывода TempDB
нормализуется.
Однако мы не имеем ни малейшего понятия, что происходит в TempDB
. Мы несколько раз запускали Query Analyzer и сравнивали результаты, но рекомендации по оптимизации индекса были связаны только с другими статистическими данными баз данных и не имели никакого эффекта.
Как бы вы сузили эту проблему? Кто-нибудь еще испытывал такое поведение в прошлом? Вероятно, это проблема с самим новостным запросом или возможно, что нам просто нужно изменить некоторые свойства базы данных TempDB
, чтобы улучшить производительность ввода-вывода, например. авторасширения?
Каким образом планы выполнения отличаются с расширением OR и без него? –