SQL Serverインスタンスが内部で利用する一時領域「TEMPDB」とは:SQL Serverトラブルシューティング(20)
本連載は、「Microsoft SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は「TEMPDBの特徴」を解説します。
本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由とともに具体的な対処方法を紹介していきます。
SQL Serverのファイル管理に起因するトラブル
- トラブル 15:TEMPDBを配置したディスク領域が枯渇した
- トラブル 16:TEMPDBを配置したディスク領域が枯渇した(Read Committed Snapshot分離レベル編)
- トラブル 17:TEMPDBを配置したディスク領域が枯渇した(ソートの繰り返し編)
- トラブル 18:トランザクションログの拡張でエラーが発生する
- トラブル 19:もっと危機的なトランザクションログの拡張エラーが発生した
- トラブル 20:「AVAILABILITY_REPLICA」によってトランザクションログを再利用できなくなった
- トラブル 21:「DATABASE_MIRRORING」によってトランザクションログを再利用できなくなった
- →その他のトラブルシューティング
「TEMPDB」とは何か?
前回まで、SQL Serverの起動とアプリケーションからの接続性に関連するトラブル事例を説明してきました。今回は、ファイル管理においてトラブル事例の多い「TEMPDB」を取り上げます。
TEMPDBとは、SQL Serverインスタンスが内部で利用する一時領域のことです。アプリケーションはSQL Serverのインスタンスへ接続した後、「SQLステートメント」を通じてSQL Serverへ処理要求を行います。TEMPDBは、その処理のための一時領域として使われます。
SQL Serverは最初の一時領域として、メモリ内のワークスペース領域を使います。ワークスペース領域はSQL Serverが内部で自動的に上限を定めて確保されます。そして、この「上限値を超えると見込まれる場合」に、SQL Serverはもう1つの一時領域としてディスク内に確保するTEMPDBを使います。まず、高速なメモリ上の一時領域を使い、それが足りなくなったらディスク上の一時領域も使うということです。
一時領域を必要とする処理/機能は以下の通りです(表1)。ユーザーオブジェクトとシステムオブジェクトに分けられます。システムオブジェクトでは、アプリケーションの実装によって裏でSQL Serverが自動的に活用します。
種別 | オブジェクト | オブジェクトの特徴 |
---|---|---|
ユーザーオブジェクト | 一時テーブル | TEMPDB上に作成され、テーブル名の先頭に「#」または「##」が付与されているテーブル。利用が終わると破棄される |
一時ストアドプロシージャ | TEMPDB上に作成され、ストアドプロシージャ名の先頭に「#」または「##」が付与されているストアドプロシージャ。SQL Serverのシャットダウンで破棄される | |
テーブル変数 | クエリを実行し、結果セットを格納しておくために宣言するユーザー定義が可能なデータ型 | |
カーソル | アプリケーションが結果セット内の特定行に対してアクセスするための機能 | |
システムオブジェクト | 作業テーブル | ソートの中間結果などを格納するテーブル |
行バージョン | Oracleと同じ読み取り一貫性を実装しているスナップショット分離レベルを利用した際の更新前イメージ |
TEMPDBはこれらの全ての処理で共通して利用される領域です。しかし、特定の処理がTEMPDBに関わるトラブルを起こすと、業務上は全く関連のない処理にも影響を及ぼしてしまうことがあります。特にTEMPDBはディスク領域が急激に肥大することがあり、それがトラブルを引き起こす例をよく見かけます。
次回から数回にわたって、TEMPDBに関連する具体的なトラブル例と解決方法を紹介します。
筆者紹介
内ヶ島 暢之(うちがしま のぶゆき)
ユニアデックス株式会社所属。Microsoft MVP Data Platform(2011〜 )。OracleやSQL Serverなど商用データベースの重大障害や大型案件の設計構築、プリセールス、社内外の教育、新技術評価を行っていた。2016年4月よりIoTビジネス開発の担当となり、新しい仕事に奮闘中。ストレッチをして柔らかい身体を手に入れるのが当面の目標。
椎名 武史(しいな たけし)
ユニアデックス株式会社所属。入社以来 SQL Serverの評価/設計/構築/教育などに携わりながらも、主にサポート業務に従事。SQL Serverのトラブル対応で社長賞の表彰を受けた経験も持つ。休日は学生時代の仲間と市民駅伝に参加し、銭湯で汗を流してから飲み会へと流れる。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 「SQL Server 2016」に搭載される新たなセキュリティ対策を追う
パブリックプレビューが公開されているマイクロソフトのRDB次期版「SQL Server 2016」。特徴の1つとするセキュリティ対策機能のポイントと目指すところをキーパーソンに聞いた。 - そもそも、リレーショナルデータベースとは何か?
データベースを基礎から勉強し理解を深めていくことは簡単なことではありません。本連載では、データベースに対するハードルを少しでも低くするために、初心者の方に必要なデータベースの基本から、障害対策やチューニングといった実践に即した内容までを幅広く解説していきます。今回は、データベースの役割と、それを管理するソフトウェアであるDBMSの基本機能について解説します。【更新】 - データの登録を行うINSERT文
- 複数の条件を指定してSELECT文を実行する
前回は、SELECT文の初歩の初歩を解説しました。今回は、複数の条件を指定して、目的のデータを取り出す方法を解説します(編集部) - Oracle運用の基本「ログ」を理解しよう
本連載では、Oracle Database運用の鍵となるトラブル対処法について紹介していきます。第1回、第2回では情報収集の要となるログについて見ていきます。ログの出力情報は10gと11gとでは大きく異なる点がありますので、それぞれについても確認しておきましょう。