2010-06-26 7 views
1

Я использую SQL Server 2008 на Windows Server 2008. Я нахожу, что временные DB mdf и temp ldf очень большие (около 13G), и это почти одинаковый размер всех других реальных файлов базы данных приложений (MDF + LDF).Ошибка SQL Server temp DB

Мои вопросы,

  1. Что температура БД используется?
  2. Это нормальная ситуация, когда временная БД настолько велика? Если нет, какие-либо способы очистки временной базы данных без влияния на производительность и надежность системы?

спасибо заранее, Джордж

+2

Вы пробовали поиск? –

+0

Я не нашел ответ для пункта 2 после Google. У тебя есть идеи? – George2

ответ

2

Вы можете сжать файлы tempdb mdf/ldf, используя команды shrinkfile, shrinkdatabase DBCC.

use tempdb 
go 

dbcc shrinkfile (tempdev, 'target size in MB') 
go 

dbcc shrinkfile (templog, 'target size in MB') 
go 

Письменный код эффективным образом может избежать роста tempdb. Избегайте использования «курсоров» в коде, которые являются основными убийцами производительности, и чем больше набор данных курсора, тем больше размер tempdb. Избегайте использования временных таблиц, если они не являются необязательными. использование #temptable, ## искуственно для всей области действия, когда это не требуется, снова вызовет проблемы с производительностью.

SQL 2005/2008 имеет CTE, где вы можете запрашивать данные в таблице temp, а область видимости - только одна строка.

;With CTETable as 
(
    SELECT <Columnlist> FROM <TableName> {Joins} WHERE <Condition> GROUP BY <Column List> ORDER BY <COlumn> ASC 
) 

SELECT ColumnList from CTETABLE 
.... 
Statements 

Сфера применения этого CTEtable заканчивается после строки «SELECT ColumnList from CTETABLE». Таким образом, он более эффективен. Написание эффективных запросов также поможет.

+0

Привет Baaju, 1. Я хочу знать, будет ли перезапуск службы SQL Server с панели управления автоматически сжиматься temp db? 2. В вашем заявлении dbcc shrinkfile (tempdev, 'target size in MB'), для чего используется tempdev? – George2

+0

Другой вопрос: влияет ли временная база данных временного сжатия на производительность? – George2

+1

RTFM - это хорошо документировано в документации. Tempdb создается при каждом запуске сервера. Shwrinking tempdb не будет влиять на производительность - слишком малый результат приведет к ошибкам, если их не разрешить расти. Примечание: для лучшей производительности настройте количество файлов для tempdb. – TomTom

1

1: TempDb используется для таких вещей, как-то. Anythin временно. Глупые разработчики, бесполезно использующие инструкцию DISTINCT, попадают в нее. Плюс временные таблицы.

2: Нет. В редких случаях это может быть так, но это необычные случаи краев. Tempdb cleanup .... перезапустить сервер. Tempdb полностью восстанавливается при каждом запуске. Затем начните поиск запросов на tempdb. Для этого потребуется некоторая ручная работа. Проверяйте ненужные предложения DISTINCT.

+0

Hi TomTom! Вы имеете в виду перезапуск службы SQL Server с панели управления, которая сократит временную базу данных? Если да, у вас есть какой-либо документ, подтверждающий этот момент? Я не нашел от Google. – George2

+0

Другой вопрос: влияет ли производительность базы данных temp temp на производительность? – George2

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