SQL Serverインスタンスが内部で利用する一時領域「TEMPDB」とはSQL Serverトラブルシューティング(20)

本連載は、「Microsoft SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は「TEMPDBの特徴」を解説します。

» 2016年10月06日 05時00分 公開
[内ヶ島暢之ユニアデックス株式会社]

連載バックナンバー

 本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由とともに具体的な対処方法を紹介していきます。

「TEMPDB」とは何か?

 前回まで、SQL Serverの起動とアプリケーションからの接続性に関連するトラブル事例を説明してきました。今回は、ファイル管理においてトラブル事例の多い「TEMPDB」を取り上げます。

 TEMPDBとは、SQL Serverインスタンスが内部で利用する一時領域のことです。アプリケーションはSQL Serverのインスタンスへ接続した後、「SQLステートメント」を通じてSQL Serverへ処理要求を行います。TEMPDBは、その処理のための一時領域として使われます。

 SQL Serverは最初の一時領域として、メモリ内のワークスペース領域を使います。ワークスペース領域はSQL Serverが内部で自動的に上限を定めて確保されます。そして、この「上限値を超えると見込まれる場合」に、SQL Serverはもう1つの一時領域としてディスク内に確保するTEMPDBを使います。まず、高速なメモリ上の一時領域を使い、それが足りなくなったらディスク上の一時領域も使うということです。

 一時領域を必要とする処理/機能は以下の通りです(表1)。ユーザーオブジェクトとシステムオブジェクトに分けられます。システムオブジェクトでは、アプリケーションの実装によって裏でSQL Serverが自動的に活用します。

(表1) 一時領域を利用する処理/機能
種別 オブジェクト オブジェクトの特徴
ユーザーオブジェクト 一時テーブル TEMPDB上に作成され、テーブル名の先頭に「#」または「##」が付与されているテーブル。利用が終わると破棄される
一時ストアドプロシージャ TEMPDB上に作成され、ストアドプロシージャ名の先頭に「#」または「##」が付与されているストアドプロシージャ。SQL Serverのシャットダウンで破棄される
テーブル変数 クエリを実行し、結果セットを格納しておくために宣言するユーザー定義が可能なデータ型
カーソル アプリケーションが結果セット内の特定行に対してアクセスするための機能
システムオブジェクト 作業テーブル ソートの中間結果などを格納するテーブル
行バージョン Oracleと同じ読み取り一貫性を実装しているスナップショット分離レベルを利用した際の更新前イメージ

 TEMPDBはこれらの全ての処理で共通して利用される領域です。しかし、特定の処理がTEMPDBに関わるトラブルを起こすと、業務上は全く関連のない処理にも影響を及ぼしてしまうことがあります。特にTEMPDBはディスク領域が急激に肥大することがあり、それがトラブルを引き起こす例をよく見かけます。

 次回から数回にわたって、TEMPDBに関連する具体的なトラブル例と解決方法を紹介します。

本トラブルシューティングの対応バージョン:SQL Server 全バージョン

筆者紹介

内ヶ島 暢之(うちがしま のぶゆき)

ユニアデックス株式会社所属。Microsoft MVP Data Platform(2011〜 )。OracleやSQL Serverなど商用データベースの重大障害や大型案件の設計構築、プリセールス、社内外の教育、新技術評価を行っていた。2016年4月よりIoTビジネス開発の担当となり、新しい仕事に奮闘中。ストレッチをして柔らかい身体を手に入れるのが当面の目標。

椎名 武史(しいな たけし)

ユニアデックス株式会社所属。入社以来 SQL Serverの評価/設計/構築/教育などに携わりながらも、主にサポート業務に従事。SQL Serverのトラブル対応で社長賞の表彰を受けた経験も持つ。休日は学生時代の仲間と市民駅伝に参加し、銭湯で汗を流してから飲み会へと流れる。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。