2015-02-27 5 views
0

Мы используем веб-версию 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 нормализуется.

I/O performance chart

Однако мы не имеем ни малейшего понятия, что происходит в TempDB. Мы несколько раз запускали Query Analyzer и сравнивали результаты, но рекомендации по оптимизации индекса были связаны только с другими статистическими данными баз данных и не имели никакого эффекта.

Как бы вы сузили эту проблему? Кто-нибудь еще испытывал такое поведение в прошлом? Вероятно, это проблема с самим новостным запросом или возможно, что нам просто нужно изменить некоторые свойства базы данных TempDB, чтобы улучшить производительность ввода-вывода, например. авторасширения?

+0

Каким образом планы выполнения отличаются с расширением OR и без него? –

ответ

1

Начните с анализа ваших планов выполнения и запускайте свои запросы со статистикой (используйте профилировщик). Проблема не в tempdb, а в ваших запросах. Затем вы увидите, где вы выбираете многие строки, которые временно сохраняются в tempdb. Затем вы можете изменить запросы или добавить отсутствующий индекс.

Смежные вопросы