本連載は、「Microsoft SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は「TEMPDBを配置したディスク領域不足のエラーが発生した場合の対処方法」を解説します。
本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由とともに具体的な対処方法を紹介していきます。
「Windows Server 2012 R2」上に「SQL Server 2016 RTM」をインストールした環境を想定して解説します。
ERRORLOGを確認すると、「領域拡張エラー」が記録されていました。
今回のケースでは、大量のデータを処理するので、アプリケーション側で一時テーブルに中間結果を保存して処理するようにしています。その結果、TEMPDBのデータファイル容量が拡張されたことに由来するトラブルであることが分かりました。
拡張処理そのものは通常の内部動作です。しかし今回のケースでは、ディスクの空き領域がなくなるまで拡張を続けざるを得ない大規模な処理だったことで、最終的に致命的なエラーとなってしまいました(図15-2)。
再起動して再び実行したとしても、このバッチ処理が要求する中間結果の保存容量はエラー終了時と変わりません。何度やってもエラーが発生してしまうのはこのためです。
根本的な原因としては、TEMPDBのサイズがピーク性能をカバーできる設計になっていないことにあります。月次処理ならば領域に余裕があるとしても、四半期や年次、あるいはビジネスが急成長した場合などで処理の規模が大きくなった場合も想定した設計になっていなければ、今回のようなトラブルが発生する可能性が常につきまといます。これでは不安ですね。
一時的に別のフォルダへTEMPDBのデータファイルを追加し、処理に必要な領域を確保します。追加するファイルサイズは、元データの容量を基にして中間結果の容量を推定し、当初不足していた分を足した総容量以上の値で設定します(図15-3)。
まだ設計段階ならば、見積もり時にシステム管理領域や、8キロバイトのページサイズにぴったり収まらないレコードなども考慮して、ある程度余裕を持ったファイルサイズを確保するようにします。また、ピーク性能時のテストも同等のデータ量で実施し、十分なディスク領域を確保できるよう設計を見直します。
もう1つは、中間結果を出力するデータ内容を絞り込んで「データ量/サイズを小さくする」方法です。しかし、この方法は「どれを、どのように絞り込むか」について、アプリケーションチームとの調整と対応が必要です。業務観点で絞り込みが容易ならばこの方法を使うのもよいでしょう。
ユニアデックス株式会社所属。Microsoft MVP Data Platform(2011〜 )。OracleやSQL Serverなど商用データベースの重大障害や大型案件の設計構築、プリセールス、社内外の教育、新技術評価を行っていた。2016年4月よりIoTビジネス開発の担当となり、新しい仕事に奮闘中。ストレッチをして柔らかい身体を手に入れるのが当面の目標。
ユニアデックス株式会社所属。入社以来 SQL Serverの評価/設計/構築/教育などに携わりながらも、主にサポート業務に従事。SQL Serverのトラブル対応で社長賞の表彰を受けた経験も持つ。休日は学生時代の仲間と市民駅伝に参加し、銭湯で汗を流してから飲み会へと流れる。
Copyright © ITmedia, Inc. All Rights Reserved.