TEMPDBを配置したディスク領域の容量が枯渇した(ファイル管理トラブル)SQL Serverトラブルシューティング(21)

本連載は、「Microsoft SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は「TEMPDBを配置したディスク領域不足のエラーが発生した場合の対処方法」を解説します。

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

連載バックナンバー

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

トラブル 15(カテゴリー:ファイル管理):TEMPDBを配置したディスク領域の容量が枯渇した

 「Windows Server 2012 R2」上に「SQL Server 2016 RTM」をインストールした環境を想定して解説します。

トラブルの実例:期末に大規模なバッチ処理を実行。当初は順調だが、1時間ほどが経過したらTEMPDBを配置したディスク領域で「領域不足エラーが発生した」と表示され、バッチ処理が止まってしまう(図15-1)。

 SQL Serverを再起動して処理を実行するも、同じトラブルが再現される。

photo 図15-1 大規模クエリがエラーを起こし、終了してしまう

トラブルの原因を探る

 ERRORLOGを確認すると、「領域拡張エラー」が記録されていました。

 今回のケースでは、大量のデータを処理するので、アプリケーション側で一時テーブルに中間結果を保存して処理するようにしています。その結果、TEMPDBのデータファイル容量が拡張されたことに由来するトラブルであることが分かりました。

 拡張処理そのものは通常の内部動作です。しかし今回のケースでは、ディスクの空き領域がなくなるまで拡張を続けざるを得ない大規模な処理だったことで、最終的に致命的なエラーとなってしまいました(図15-2)。

photo 図15-2 現象発生時のERRORLOGの抜粋。TEMPDBのPRIMARYファイルグループで拡張エラーが起きていた

 再起動して再び実行したとしても、このバッチ処理が要求する中間結果の保存容量はエラー終了時と変わりません。何度やってもエラーが発生してしまうのはこのためです。

 根本的な原因としては、TEMPDBのサイズがピーク性能をカバーできる設計になっていないことにあります。月次処理ならば領域に余裕があるとしても、四半期や年次、あるいはビジネスが急成長した場合などで処理の規模が大きくなった場合も想定した設計になっていなければ、今回のようなトラブルが発生する可能性が常につきまといます。これでは不安ですね。

解決方法

 一時的に別のフォルダへTEMPDBのデータファイルを追加し、処理に必要な領域を確保します。追加するファイルサイズは、元データの容量を基にして中間結果の容量を推定し、当初不足していた分を足した総容量以上の値で設定します(図15-3)。

photo 図15-3 TEMPDBのファイルを追加する設定画面。「追加」ボタンで「データベースファイル」欄の行が増えるので、追加するデータファイルのサイズとパスを指定する

 まだ設計段階ならば、見積もり時にシステム管理領域や、8キロバイトのページサイズにぴったり収まらないレコードなども考慮して、ある程度余裕を持ったファイルサイズを確保するようにします。また、ピーク性能時のテストも同等のデータ量で実施し、十分なディスク領域を確保できるよう設計を見直します。

 もう1つは、中間結果を出力するデータ内容を絞り込んで「データ量/サイズを小さくする」方法です。しかし、この方法は「どれを、どのように絞り込むか」について、アプリケーションチームとの調整と対応が必要です。業務観点で絞り込みが容易ならばこの方法を使うのもよいでしょう。

「TEMPDBを配置したディスク領域にエラーが発生した」場合の解決手順

  1. ディスク容量が枯渇してしまう要因となる、大規模処理と一時テーブル利用の有無を確認する
  2. 一時テーブルを使っている場合、業務ロジックからデータの絞り込みができるかを検討する
  3. データの絞り込みができない場合は、空いているディスク上で、またはディスクをサーバに追加した上で空き領域へデータファイルの追加を行う


本トラブルシューティングの対応バージョン: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のメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。