2012年1月20日金曜日

SQL Server における既存テーブルへの項目追加処理時間

実運用が始まった後でテーブルに項目追加とかはできるだけ避けたいところですが、のっぴきならない事情があったりして追加せざるを得ない事は多々あるかと思います。その際、どれくらい処理に時間がかかるかというのを事前に計測できれば、利用者に「このぐらいの間重くなるからー」とか「何時まで使えないですー」というアナウンスもできるのですが、実際にどれくらいの処理時間がかかるかを計測するのはかなり難しいところだとも思います。今回は、ある程度のデータ件数を持つテーブルに対して項目を追加し、どの程度の処理時間がかかるかを計測してみました。

実際に計測に用いた環境は次の通りです。

  • サーバー機スペック:CPU Xeon 2.80 GHz  Memory 2GB  HDD RAID5 SCSI
  • Windows 2003 Server SP2
  • SQL Server 2005 SP3
  • 対象テーブルのレコード件数:約 260 万件

MSDN Blog でベストプラクティスが紹介されていますのでこちらも参考にしてください。(1)(2)

まずは最も早いと言われている「NULL 許可なカラムの追加」です。

AddColumn1

クライアント統計の「サーバー応答の待機時間」を見てもらうと 77 ( ミリ秒 ) となっています。言われている通り、スキーマの変更だけに留まる場合はデータ件数の影響を受けないようです。

続いては計算列を追加してみます。今回追加する計算列は「同一レコードのある項目より算出する結果」が設定されるようにしています。具体的に言うと、レコード登録日時から年・月・日を設定するものです。

AddColumn2

実行結果を見ると、先ほどの NULL 許可カラム追加時と殆ど差がありません。数値的には下がっていますが、これは誤差の範疇だと思います。

もう一つ比較するために、NULL 許可で初期値が特定の値、というケースも行ってみました。

AddColumn3

若干処理時間が増えていますが、これも殆ど気にならないレベルです。

このような結果になりましたので、現地環境で恐る恐るカラム追加する際の参考にでもなれば、と思います。

0 件のコメント:

コメントを投稿