65Gの1つの本番データベース(およびReportServer dbs)を備えたSQL Serverインスタンスがあります。 tempdbはサーバーが使用されていないときは5.5G(まあ、実際にはもっと大きいですが、5.5Gが使用されています)です。これは異常だと思います。このスペースがいっぱいになり、解放されない原因を診断するにはどうすればよいですか?
Tempdbに一時的でないユーザーテーブルがある可能性があります。これらは自動的にクリーンアップされません(サーバーが再起動されない限り)。あなたはこのようにそれらをチェックすることができます:
USE tempdb;
GO
SELECT * FROM sys.objects WHERE [type] = 'U';
このスペースを解放するには、DROP TABLE
ステートメントを使用して、これらのテーブルを手動で削除する必要があります。最初にまだそれらを使用していないことを確認してください????
別の可能性として、誰かが一時テーブルを作成し、そのセッションがまだアクティブである可能性があります。 Stack Overflowサンプルデータベースを使用して一時テーブルを作成し、セッションを開いたままにしました。
SELECT * INTO #Users FROM dbo.Users;
確認済みのスペース使用量:
4つのtempdbファイルはすべて、約15 MBのスペースを使用しています。
スリープ中のspidを表示するオプションでsp_WhoIsActive
を確認すると、セッションがまだ開いていることがわかります。
EXEC master.dbo.sp_WhoIsActive @show_sleeping_spids = 2;
Tempdbが割り当てられているセッション、または長時間開いている疑わしいセッションを探します。
SSMSでセッション53のウィンドウを閉じてからsp_WhoIsActive
を再チェックすると、クエリが消えます。そして今度はtempdbのスペース使用量をもう一度確認します。
「Space Used」が4つのファイルすべてにドロップされていることがわかります。
このように保持されているスペースを解放するには、次のいずれかを行う必要があります。
login_name
フィールドで人物を追跡し、セッションを終了するように依頼する、またはKILL
コマンドを使用してセッションを強制終了します