Большой запрос увеличивает TempDB

У меня есть огромный запрос на моем сервере SQL 2005. Это нужно запускать один раз в день, но когда этот запрос запускается, временная база данных увеличивается с 2 ГБ до 48 ГБ. Как лучше всего оптимизировать или найти причину, по которой tempdb растет, когда этот запрос добавляет/обновляет 80 000 записей с (~ 120 столбцами) в одной таблице?

Что мне делать с этим запросом, чтобы база данных tempdb не росла так сильно?

Любые предложения будут оценены.

ПРИМЕЧАНИЕ. В этом запросе нет ни шаблонов, ни табличных переменных, ни CTE. просто куча

INSERT INTO ... with MULTITABLE JOINS with SUBQueries...

person THEn    schedule 03.12.2009    source источник


Ответы (2)


Не видя точного кода, вам трудно помочь. Но запрос, похоже, нуждается в оптимизации.

Конечно, вы можете просто изменить размер временной базы данных на 48 ГБ, по крайней мере, таким образом ей не придется тратить время на рост, когда эта штука работает.

person HLGEM    schedule 03.12.2009
comment
Этот запрос написан кем-то другим. Оказывается, я не должен быть таким ленивым. Я посмотрел на запрос, и его действительно нужно было оптимизировать. Я создал только 3 запроса из 39. - person THEn; 04.12.2009

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

Глядя на обновление вашего вопроса, кажется вероятным, что ваши подзапросы используют стратегию temptable, которая переполняет вашу TempDB. Попробуйте избавиться от этих подзапросов и/или уменьшить объем данных, с которыми вы работаете, в одном выполнении запроса, это поможет уменьшить рост вашей TempDB.

person Romain    schedule 03.12.2009