Размер TempDB в SQL Server 2005

Мы используем SQL Server 2005. Недавно SQL Server 2005 потерпел крах в нашей производственной среде из-за большого размера базы данных tempdb. 1) что может быть причиной большого размера tempdb? 2) Есть ли способ посмотреть, какие данные есть в базе данных tempdb?

4 ответа

2) Есть ли способ посмотреть, какие данные есть в базе данных tempdb?

Нет, потому что там его не хранят. Tempdb имеет особую обработку, например, удаление при каждом перезапуске сервера.

1) что может быть причиной большого размера tempdb?

Неэффективный SQL, задания по обслуживанию или просто данные под рукой. Очевидно, что для базы данных объемом 800 ГБ, 6000 ГБ может потребоваться больше места в базе данных tempdb, чем для 4-гигабитной оперативной попытки crm. Вы не указываете ЛЮБОЙ размер в абсолютном выражении. Что такое большой? У меня есть базы данных tempdb, жестко запрограммированные на 64-гигабайтных серверах меньшего размера.

Типичные SQL, которые входят в Tempdb:

  • Сортировки, которые не разрешимы как часть запроса (необходимо хранить ключи ГДЕ-ТО)
  • DISCTINCT. Нужно, чтобы все возвращаемые данные в базе данных tempdb находили дубликаты.
  • Определенные стихи возможно во время соединения.
  • Использование Tempdb (временные таблицы). Я просто упоминаю их, потому что я часто хранил в них данные в несколько сотен мегабайт во время загрузки и очистки.

В общем, вы можете найти эти запросы, имея огромную статистику ввода-вывода в журнале запросов, или просто медленно.

Тем не менее, планы технического обслуживания также идут там, но с разумом. В конце концов, ваш "большой", возможно, мой "даже не стоит упоминать крошечный". Это действительно зависит от того, что вы делаете. Используйте инструмент трассировки запросов, чтобы узнать, что занимает много времени.

Физически Tempdb очень специфичен в обращении - сервер sql НЕ пишет в файл, если в этом нет необходимости (то есть, хранит данные в памяти). Запись на диск является признаком текущей памяти. Это отличается от обычного поведения записи в БД. Tempdb, если он перетекает, лучше всего ставить на прилично быстрый SSD... который обычно не будет ТАК дорогим, потому что он все еще будет относительно небольшим.

Используйте запрос здесь, чтобы найти другие запросы для tempdb - в основном, вы ловите рыбу в грязной воде, нужно попробовать что-то, пока вы не найдете виновника.

Использовать tempdb

выберите (размер *8) как FileSizeKB из sys.database_files

Обычный способ вырастить базу данных SQL Server - любая база данных, а не только tempdb - это, чтобы его данные и файлы журнала были установлены на автоматическое увеличение (особенно файлы журнала). SQL Server полностью рад расширять файлы журналов и данных, пока не займет все доступное для них дисковое пространство.

ИМХО, лучшая практика - разрешить ограниченный автоматический рост файлов данных (установить верхнюю границу размера файла) и зафиксировать размер файлов журнала. Возможно, вам придется провести некоторый анализ, чтобы выяснить, насколько большими должны быть файлы журнала. В частности, для tempdb модель восстановления также должна быть простой.

Хорошо, tempdb - это своего рода специальная база данных. Любые временные объекты, которые вы используете в процедурах и т. Д., Создаются здесь. Поэтому, если ваше приложение использует много временных таблиц в запросах, они все будут находиться здесь, но они должны очиститься после сброса соединения (spid).

Другая вещь, которая может вырастить базу данных tempdb, - это задачи обслуживания базы данных, однако они будут оказывать большее влияние на файлы журнала базы данных.

Tempdb также очищается при каждом перезапуске службы SQL. Это в основном отбрасывает базу данных и воссоздает ее. Я согласен с @Nic по поводу того, что оставить tempdb как есть, не пытаться с этим справиться, любые проблемы с пробелом в tempdb, как правило, указывают на еще одну большую проблему где-то еще. Больше места замаскирует проблему, но только так долго. Сколько свободного места у вашего диска, на котором у вас есть tempdb?

Другое дело, если еще нет, попробуйте поместить tempdb на свой собственный диск, и еще один, если это возможно, хранить данные и файлы журналов на своих отдельных дисках.

Так что, если вы не перезапустите ваш SQL Server/Service, ваш диск скоро освободится.

Другие вопросы по тегам