web-dev-qa-db-ja.com

運用環境でTempdbを圧縮するためのベストプラクティス

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
24
Mcol

Tempdbの通常の使用状況を予防的に監視し、それに応じてサイズを設定することをお勧めします。 TempdbがそのようなサイズとそのPROD envに成長した1回限りのケースである場合、毎週のメンテナンス中にSQL Serverサービスを再起動します。その後Tempdbは構成されたサイズに戻ります。

Tempdbが使用されていない限り、ファイルの圧縮は問題ありません。それ以外の場合は、ブロッキングとデッドロックが原因で、パフォーマンスの観点から既存のトランザクションが影響を受ける可能性があります。

プロシージャキャッシュ、バッファキャッシュなどをクリーニングすると、再作成されない限り、データベースのパフォーマンス自体に悪影響を及ぼします。 PRODではこれを行いません。

お役に立てば幸いです。

11
dattatraynale