SQL Server TEMP DB Issue
-
30-09-2019 - |
質問
Windows Server 2008でSQL Server 2008を使用しています。TEMPDBMDFとTEMP LDFは非常に大きく(約13G)、他のすべての実際のアプリケーションデータベースファイル(MDF+LDF)のほぼ同じサイズです。
私の質問、
- どの温度DBが使用されますか?
- 温度DBがとても大きいのは通常の状況ですか?そうでない場合、システムのパフォーマンスと信頼性に影響を与えることなく、温度DBをクリーンアップする方法はありますか?
事前に感謝します、ジョージ
解決
ShrinkFileのShrinkDatabase DBCCコマンドを使用して、TEMPDB MDF/LDFファイルを縮小できます。
use tempdb
go
dbcc shrinkfile (tempdev, 'target size in MB')
go
dbcc shrinkfile (templog, 'target size in MB')
go
コードを効率的に書くことで、TEMPDBの成長を回避できます。パフォーマンスの主要な殺人者であり、カーソルのデータセットが大きいほど、TEMPDBのサイズが大きいほど、コードで「カーソル」を使用しないようにします。ネガサリーではない場合は、温度テーブルの使用は避けてください。 #Temptableを使用すると、##必要でない場合に視界全体に誘惑可能になり、パフォーマンスの問題が発生します。
SQL 2005/2008にはCTESがあり、そのため、TEMPテーブルのデータをクエリすることができ、その後のスコープはその後1行になります。
;With CTETable as
(
SELECT <Columnlist> FROM <TableName> {Joins} WHERE <Condition> GROUP BY <Column List> ORDER BY <COlumn> ASC
)
SELECT ColumnList from CTETABLE
....
Statements
そのctetableの範囲は、「cteTableからの列リストを選択」した後に期限切れになります。これにより、より効果的です。効果的なクエリを書くことも役立ちます。
他のヒント
1:TEMPDBは、ソートのようなものに使用されます。一時的なもの。不必要に明確な声明を使用して愚かな開発者がそれを襲っています。プラス一時テーブル。
2:いいえ。これにはまれなケースがありますが、これらは異常なエッジケースです。 tempdbクリーンアップ....サーバーを再起動します。 TEMPDBは、すべてのスタートで完全に再生されます。次に、TempDBにアクセスするクエリの探しを開始します。これには、いくつかの手動作業が必要です。不必要に使用される明確な条項があることを確認してください。