Лучшая практика для сокращения Tempdb в производственной среде

24

Что лучше всего использовать при сжатии Временных БД в SQL Server 2008?

Это рискованно использовать следующее?

use tempdb
GO

DBCC FREEPROCCACHE -- clean cache
DBCC DROPCLEANBUFFERS -- clean buffers
DBCC FREESYSTEMCACHE ('ALL') -- clean system cache
DBCC FREESESSIONCACHE -- clean session cache
DBCC SHRINKDATABASE(tempdb, 10); -- shrink tempdb
dbcc shrinkfile ('tempdev') -- shrink db file
dbcc shrinkfile ('templog') -- shrink log file
GO

-- report the new file sizes
SELECT name, size
FROM sys.master_files
WHERE database_id = DB_ID(N'tempdb');
GO
Mcol
источник
Лучшей практикой является выяснение того, что заставляет его расти, и решение этой проблемы. Если вы уменьшите его, он просто должен снова вырасти, и на это потребуется время и IO
Nick.McDermaid
Да, я знаю. Но когда мне нужно, потому что уже поздно быть активным :) Это лучшее решение?
Извините, я не могу вам помочь.
Nick.McDermaid

Ответы:

11

Рекомендуется активно отслеживать обычное использование Tempdb и соответственно устанавливать размер. Если это единственный случай, когда Tempdb вырос до такого размера и его среда PROD, я бы перезапустил службы SQL Server во время еженедельного обслуживания. Там после Tempdb вернется к своему настроенному размеру.

Сжатие файла хорошо, пока Tempdb не используется, иначе на существующие транзакции может повлиять с точки зрения производительности из-за блокировок и взаимоблокировок.

Очистка кеша процедур, буферных кешей и т. Д. Будет негативно влиять на производительность самой базы данных, пока они не будут воссозданы. Я бы не стал делать это на PROD.

Надеюсь, это поможет!


источник
Спасибо за вклад Godd. Достаточно ли проверить с помощью sp_who процессы в базе данных tempdb?
1
Я не думаю, что это надежный способ выяснить, используется ли временная база данных. Я думаю, что это просто появилось бы, только если кто-то создает временную таблицу непосредственно в SSMS напрямую. Но если то же самое делается в результате операции запроса из-за разлива памяти и т. Д., То это не будет отображаться в sp_who2. Этот вопрос на самом деле будет отдельной веткой. Пожалуйста, создайте это как отдельное обсуждение. Если предыдущий ответ помог вам, отметьте это как ответ. Это поможет другим в подобной ситуации.