私はtempDB
を理解しようとしていますが、以下は私の頭に浮かぶ疑問です。
tempDB
のデータの有効期間はどれくらいですか?クエリがOrder By
を実行していて、それを実行するためにtempDB
を使用しているとします。このクエリが終了した後、他の誰かもtempDB
を利用するクエリを実行します。 2番目のクエリは最初のクエリによって書き込まれたレコードをtempDB
に検索しますか、それとも削除されますか?tempDB
内に作成されたvisibleテーブルはありますか?このクエリが原因で作成された一時テーブルを確認するにはどうすればよいですか?これらの一時テーブルに名前を付けるためにSQLエンジンが従う命名規則はありますか?私はtempDB
に慣れていないので、そのようなばかげた(もしあれば)質問をすることを許してください:-)
tempDBについて学ぶのに役立つ良いリソースを誰かが教えてくれればとても嬉しいです。
一時テーブルは、接続が切断されるまで(または、グローバル一時テーブルの場合は、それを使用する最後の接続が切断されるまで)tempdbに格納されます。また、drop tableステートメントでテーブルを使い終わったら、手動でテーブルをドロップすることもできます(そうすることをお勧めします)。
いいえ、他のユーザーはローカル一時テーブルの場合は一時テーブルを表示できません(グローバル一時テーブルを表示および使用できます)複数のユーザーが同じ一時テーブル名を使用するコマンドを実行できますが、ローカル一時テーブルで重複することはありません。 #testという名前のテーブルを持つことができ、他の10,000人のユーザーも持つことができますが、それぞれに独自の構造とデータがあります。
通常、tempdbで一時テーブルを検索する必要はありません。存在を確認することは可能ですが、tempdbを直接参照したのはそれだけです。一時テーブル名を使用するだけです。以下の存在確認の例
IF OBJECT_ID('TempDB.dbo.#DuplicateAssignments') IS NOT NULL
BEGIN
DROP TABLE #DuplicateAssignments
END
一時テーブルに名前を付けるには、名前の前に#(ローカルテーブルの場合は999.9%の確率で使用するもの)、グローバル一時テーブルの場合は##を付け、残りの名前を付けます。
SQLServerのtempDBデータベースに関する最良の情報源となるMSDNの記事がいくつかあります。
Tempdbシステムデータベースは、SQL Serverのインスタンスに接続しているすべてのユーザーが利用できるグローバルリソースであり、以下を保持するために使用されます。
- グローバルまたはローカルの一時テーブル、一時ストアドプロシージャ、テーブル変数、カーソルなど、明示的に作成される一時ユーザーオブジェクト。
- SQL Serverデータベースエンジンによって作成される内部オブジェクト。たとえば、スプールまたは並べ替えの中間結果を格納するための作業テーブル。
- 行バージョン分離またはスナップショット分離トランザクションを使用して読み取りコミットを使用するデータベース内のデータ変更トランザクションによって生成される行バージョン。
- オンラインインデックス操作、複数のアクティブな結果セット(MARS)、AFTERトリガーなどの機能のデータ変更トランザクションによって生成される行バージョン。
Tempdb内の操作は最小限にログに記録されます。これにより、トランザクションをロールバックできます。 tempdbは、SQL Serverが起動するたびに再作成されるため、システムは常にデータベースのクリーンコピーで起動します。一時テーブルとストアドプロシージャは切断時に自動的に削除され、システムのシャットダウン時にアクティブな接続はありません。したがって、SQLServerのあるセッションから別のセッションに保存されるものはtempdbにはありません。 tempdbではバックアップおよび復元操作は許可されていません。
tempdbとインデックスの作成 、 このブログ投稿 と SQL Server 2005でのtempdbの操作 もあります。
SQLServerシステムデータベースtempdbは、SQL Server2005で多くの変更が加えられました。SQLServer2005には、新しいtempdbの使用法と内部最適化があります。 tempdbアーキテクチャは、SQL Server2000以降ほとんど変更されていません。
tempdbシステムデータベースはユーザーデータベースと非常によく似ています。主な違いは、SQL Serverがシャットダウンした後、tempdbのデータが保持されないことです。
TempDBで作成された一時テーブルは、クエリが完了すると削除されます。
これについてはよくわかりませんが(試してみる必要があります)、理論的には、TempDBで作成されたすべてのテーブルが表示されますが、テーブルを作成したユーザーだけがアクセスできます。