Проблема с временной базой данных SQL Server - PullRequest
1 голос
/ 26 июня 2010

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

Мои вопросы,

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

спасибо заранее, George

Ответы [ 2 ]

2 голосов
/ 26 июня 2010

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

use tempdb
go

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

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

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

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

;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». Таким образом, это более эффективно. Написание эффективных запросов также поможет.

1 голос
/ 26 июня 2010

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

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

...