Уменьшение размера базы данных tempdb в SQL Server

Переводы статьи Переводы статьи
Код статьи: 307487 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

В этой статье приведены различные способы, которые можно использовать для уменьшения размера базы данных tempdb в Microsoft SQL Server. Прежде чем уменьшить размер базы данных tempdb с помощью методов, описанных в этой статье, ознакомьтесь со следующей информацией:
  • Размер базы данных tempdb устанавливается равным последнему заданному значению (то есть размеру по умолчанию или последнему размеру, установленному с помощью команды alter database) после каждого перезапуска. Поэтому, если нет необходимости использовать другие значения или немедленно уменьшить размер, не следует выполнять действия, приведенные в этой статье. Для уменьшения размера базы данных можно подождать следующего перезапуска службы SQL Server. Большие размеры базы данных tempdb не повлияют негативным образом на работоспособность службы SQL Server.
  • В SQL Server 2005 и более поздних версиях уменьшение размера tempdb ничем не отличается от уменьшения базы данных пользователя, кроме того, что для размера базы данных tempdb устанавливается заданное значение после каждого перезапуска экземпляра SQL Server.
  • Команду shrink можно безопасно выполнить в базе данных tempdb во время ее работы. Однако могут возникнуть другие ошибки, например блокирование, взаимоблокировка и др., из-за которых команда shrink не будет выполнена. Поэтому, чтобы команда shrink была выполнена правильно наверняка, мы советуем запускать ее, когда сервер работает в однопользовательском режиме или после прекращения всех действий с базой данных tempdb.

Сведения о базе данных tempdb

База данных tempdb является временной рабочей областью. Сервер SQL Server использует базу данных tempdb для выполнения многих задач. Вот некоторые из них:
  • хранение временных таблиц, созданных явным образом;
  • хранение рабочих таблиц, содержащих результаты, созданные в процессе обработки запросов и сортировки;
  • хранение материализованных статических курсоров;
  • хранение записей о версиях при использовании уровней изоляции моментальных снимков или уровней изоляции моментальных снимков зафиксированного чтения.
Сервер SQL Server записывает в журнал транзакций базы данных tempdb сведения, необходимые только для отката транзакции, но недостаточные для воспроизведения транзакций в процессе восстановления базы данных. Это позволяет повысить производительность выражений INSERT в базе данных tempdb. Кроме того, сведения для воспроизведения каких-либо транзакций не требуется записывать в журнал, поскольку база данных tempdb создается заново каждый раз после перезапуска сервера SQL Server. Таким образом, в ней нет транзакций для наката или отката. При запуске сервера SQL Server база данных tempdb создается заново с помощью копии базы данных model, а ее размер устанавливается равным последнему заданному значению. Заданный размер является последним значением размера, установленным явным образом при выполнении операций, изменяющих размер файла, таких как ALTER DATABASE с параметром MODIFY FILE или выражение DBCC SHRINKFILE.

По умолчанию база данных tempdb настроена на автоматическое увеличение размера по мере необходимости. Таким образом, со временем размер этой базы данных может превысить желаемый. Простой перезапуск сервера SQL Server устанавливает размер базы данных равным последнему заданному значению.

В SQL Server 2005 и более поздних версиях можно использовать любой из следующих способов изменения размера базы данных tempdb:

Свернуть эту таблицуРазвернуть эту таблицу
СпособНеобходима ли перезагрузка?Дополнительные сведения
ALTER DATABASEДаПолный контроль размера файлов базы данных tempdb по умолчанию (tempdev и templog).
DBCC SHRINKDATABASEНетРаботает на уровне базы данных.
DBCC SHRINKFILEНетПозволяет уменьшить размер отдельных файлов.
SQL Server Management StudioНетСпособ уменьшения размера файлов базы данных через графический пользовательский интерфейс.

Примечание. Средство SQL Server Management Studio в SQL Server 2005 не показывает правильный размер файлов базы данных tempdb после выполнения операции уменьшения размера. Значение параметра "Выделенное в данный момент место" всегда берется из динамического административного представления sys.master_files и не обновляется после выполнения операции по сжатию размера для базы данных tempdb. Чтобы узнать правильный размер файлов базы данных tempdb после сжатия, в SQL Server Management Studio выполните следующий оператор:

use tempdb

select (size*8) as FileSizeKB from sys.database_files
Здесь рассказывается о первых трех методах.

Примечание. Для установок SQL Server 2000 вместо SQL Server Management Studio необходимо использовать анализатор запросов. Кроме того, для использования команд DBCC базу данных необходимо перевести в однопользовательский режим.

Следующие три способа можно использовать для уменьшения размера базы данных tempdb до значения ниже заданного:

Способ 1. С помощью команд Transact-SQL

Способ 2. С помощью команды DBCC SHRINKDATABASE

Способ 3. С помощью команды DBCC SHRINKFILE

Ошибки 2501 и 8909 при выполнении операций сжатия

Если база данных tempdb используется и предпринимается попытка уменьшить ее размер с помощью команды DBCC SHRINKDATABASE или DBCC SHRINKFILE, могут появиться сообщения, подобные приведенным ниже (в зависимости от используемой версии SQL Server).

SQL Server 2005 и более поздние версии

Server: Msg 8909, Level 16, State 1, Line 1 Table error: Object ID 0, index ID -1, partition ID 0, alloc unit ID 0 (type Unknown), page ID (6:8040) contains an incorrect page ID in its page header. The PageId in the page header = (0:0).

SQL Server 2000

Server: Msg 2501, Level 16, State 1, Line 1 Could not find table named '1525580473'. Check sysobjects.
Server: Msg 8909, Level 16, State 1, Line 0 Table Corrupt: Object ID 1, index ID 0, page ID %S_PGID. The PageId in the page header = %S_PGID.
Примечания
  • Эти ошибки не означают наличие реальных повреждений в базе данных tempdb. Тем не менее, имейте в виду, что могут быть другие причины ошибок физического повреждения данных, таких как ошибка 8909, включая проблемы с подсистемой ввода-вывода. Поэтому, если ошибка происходит не в процессе выполнения операции уменьшения размера, необходимо дополнительно исследовать проблему.
  • В SQL Server 2005 и более поздних версиях при выполнении операции уменьшения размера может отображаться сообщение об ошибке 8909, однако это не говорит о наличии ошибок такой операции.
  • В SQL Server 2000 и более ранних версиях эти ошибки вызовут сбой операций уменьшения размера. Поэтому для уменьшения размера базы данных tempdb необходимо будет перезапустить SQL Server, чтобы повторно создать базу данных tempdb. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:
    277848 При выполнении команды DBCC DBREINDEX в SQL Server отображается сообщение об ошибке "Table Corrupt Object ID 0, index ID 0, page ID"


Ссылки

Свойства

Код статьи: 307487 - Последний отзыв: 24 июня 2014 г. - Revision: 7.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 64-bit Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 R2 Datacenter
  • Microsoft SQL Server 2008 R2 Developer
  • Microsoft SQL Server 2008 R2 Enterprise
  • Microsoft SQL Server 2008 R2 Parallel Data Warehouse
  • Microsoft SQL Server 2008 R2 Standard
  • Microsoft SQL Server 2008 R2 Web
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Web
  • Microsoft SQL Server 2008 Workgroup
  • Microsoft SQL Server 2012 Developer
  • Microsoft SQL Server 2012 Enterprise
  • Microsoft SQL Server 2012 Parallel Data Warehouse
  • Microsoft SQL Server 2012 Standard
  • Microsoft SQL Server 2012 Web
Ключевые слова: 
kbsqlsetup kbhowtomaster KB307487

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com