TEMPDBを配置したディスク領域の容量が枯渇した(ファイル管理トラブル):SQL Serverトラブルシューティング(21)
本連載は、「Microsoft SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は「TEMPDBを配置したディスク領域不足のエラーが発生した場合の対処方法」を解説します。
本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由とともに具体的な対処方法を紹介していきます。
トラブル 15(カテゴリー:ファイル管理):TEMPDBを配置したディスク領域の容量が枯渇した
「Windows Server 2012 R2」上に「SQL Server 2016 RTM」をインストールした環境を想定して解説します。
トラブルの原因を探る
ERRORLOGを確認すると、「領域拡張エラー」が記録されていました。
今回のケースでは、大量のデータを処理するので、アプリケーション側で一時テーブルに中間結果を保存して処理するようにしています。その結果、TEMPDBのデータファイル容量が拡張されたことに由来するトラブルであることが分かりました。
拡張処理そのものは通常の内部動作です。しかし今回のケースでは、ディスクの空き領域がなくなるまで拡張を続けざるを得ない大規模な処理だったことで、最終的に致命的なエラーとなってしまいました(図15-2)。
再起動して再び実行したとしても、このバッチ処理が要求する中間結果の保存容量はエラー終了時と変わりません。何度やってもエラーが発生してしまうのはこのためです。
根本的な原因としては、TEMPDBのサイズがピーク性能をカバーできる設計になっていないことにあります。月次処理ならば領域に余裕があるとしても、四半期や年次、あるいはビジネスが急成長した場合などで処理の規模が大きくなった場合も想定した設計になっていなければ、今回のようなトラブルが発生する可能性が常につきまといます。これでは不安ですね。
解決方法
一時的に別のフォルダへTEMPDBのデータファイルを追加し、処理に必要な領域を確保します。追加するファイルサイズは、元データの容量を基にして中間結果の容量を推定し、当初不足していた分を足した総容量以上の値で設定します(図15-3)。
まだ設計段階ならば、見積もり時にシステム管理領域や、8キロバイトのページサイズにぴったり収まらないレコードなども考慮して、ある程度余裕を持ったファイルサイズを確保するようにします。また、ピーク性能時のテストも同等のデータ量で実施し、十分なディスク領域を確保できるよう設計を見直します。
もう1つは、中間結果を出力するデータ内容を絞り込んで「データ量/サイズを小さくする」方法です。しかし、この方法は「どれを、どのように絞り込むか」について、アプリケーションチームとの調整と対応が必要です。業務観点で絞り込みが容易ならばこの方法を使うのもよいでしょう。
「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とでは大きく異なる点がありますので、それぞれについても確認しておきましょう。