SQL Server の自動拡張(autogrow) を調査した

Database,SQLServer

概要

  • AWS のRDS にて、SQL Server エンジンを利用しています。SQL Server の機能である自動拡張(autogrow) について調査した結果を備忘録として、記載します。
  • きっかけは、RDS のストレージサイズを拡張する機会があり、SQL Server への影響を確認する目的となります。
  • こちらのQiita ドキュメントによれば、SQL Server では、自動拡張(autogrow) がデフォルトで有効になっており、自動拡張によってサービスのダウンタイムが発生する可能性があると記載されていました。
  • また、Microsoft のドキュメントには、以下の記載がありました。SQL Server は、DBがDBファイルの自動拡張を行う際にDBファイルをロックします。この際に、拡張サイズが大きいと拡張の処理が終わるまで時間がかかり、その間にクエリに応答できず、タイムアウトなどのエラーが表示されると理解しました。

使用可能なログ領域よりも多くのログ領域を必要とするトランザクションを実行し、そのデータベースのトランザクション ログの自動拡張オプションをオンにした場合、トランザクションの完了にかかる時間には、トランザクション ログが構成された量で増加するまでの時間が含まれます。 増加の増分が大きい場合、または時間がかかる原因となる他の要因がある場合は、タイムアウト エラーが原因でトランザクションを開くクエリが失敗する可能性があります。 同じ種類の問題は、データベースのデータ部分の自動拡張によって発生する可能性があります。

 

自動拡張(autogrow)のパラメータを確認する

  • 自動拡張(autogrow)のパラメータを確認するには、SQL Server Management Studioを使用して、データベースのプロパティを開きます。「ファイル」を選択し、データベース ファイル(F)の「自動拡張/最大サイズ」の設定値を確認します。
  • デフォルトは、「10%単位で無制限」となります。この場合、データベースのサイズによって増加するサイズが異なります。もし拡張サイズが大きければ、前述のクエリに応答できない事態を招く可能性があります。
  • パフォーマンスの低下を回避するため、このパラメータを増加率ではなく、増加のサイズ(MB)で指定します。(例:100MB単位で無制限)

 

自動拡張(autogrow)の履歴を確認する

  • 自動拡張(autogrow)の履歴を確認するには、SQL Server Management Studioを使用して、データベースを右クリック、「レポート」→「標準レポート」→「ディスク使用量」を選択します。
  • 「データ/ログ ファイルの自動拡張/自動圧縮イベント」を展開し、自動拡張に関する履歴が確認できます。前述の「自動拡張/最大サイズ」に設定した値でサイズ拡張が行われていることを確認します。

 

  • これでRDS のストレージサイズを拡張した際に、SQL Server 側もデータベースの自動拡張が行われ、パフォーマンス低下も小さくできそうです。使用の環境によって設定値は異なりますので、ご注意ください。

 

参考資料

Database,SQLServer

Posted by takaaki