SQL Azure DBの全テーブルのインデックスを再構築するサンプル


SQL Azureのテーブルはクラスター化インデックスが必須となっている関係で、データ挿入状況によってインデックスが断片化します。

詳しくは、「SE の雑記 SQL Azure のインデックス断片化と再構築について調べてみる」等をご参照下さい。

インデックスの再構築には、ALTER INDEX T-SQLを発行すれば良いのですが、一つ一つのテーブルに実行していくのは大変ですので、一括して発行するT-SQLを書いてみました。

   1: USE DBforTestUse;

   2: GO

   3:  

   4: /*変数宣言*/

   5: DECLARE @schemaname sysname;

   6: DECLARE @tablename sysname;

   7:  

   8: /*カーソル(テーブル一覧)の作成*/

   9: DECLARE tables_cursor CURSOR

  10:    FOR

  11:    SELECT s.name, t.name 

  12:    FROM sys.objects AS t

  13:    JOIN sys.schemas AS s ON s.schema_id = t.schema_id

  14:    WHERE t.type = 'U';

  15:    

  16: OPEN tables_cursor;

  17:  

  18: PRINT N'全テーブルのインデックス再構築を開始します。';

  19:  

  20: FETCH NEXT FROM tables_cursor INTO @schemaname, @tablename;

  21:  

  22: WHILE (@@FETCH_STATUS <> -1)

  23: BEGIN;

  24:    EXECUTE ('ALTER INDEX ALL ON ' + @schemaname + '.' + @tablename + ' REBUILD;');

  25:    FETCH NEXT FROM tables_cursor INTO @schemaname, @tablename;

  26: END;

  27:  

  28: PRINT N'全テーブルのインデックス再構築が終了しました。';

  29: CLOSE tables_cursor;

  30: DEALLOCATE tables_cursor;

  31:  

  32: GO

 

これを、SQL Azure管理ポータルで実行して見た所です。当然正常終了します。

image

パフォーマンスへの影響は?だったのですが、断片化が解消された結果なのかDBの使用容量がずいぶん減りました。(33MB→27MBくらい)

毎回、手作業でT-SQLを発行するのも面倒ですので、前回の記事、「Windows Azure WebRoleを定期的にオフライン/オンラインにするサンプル」で紹介した様な方法等と合わせて、定期的に自動化して実施するのが良いかもしれません。

広告

One thought on “SQL Azure DBの全テーブルのインデックスを再構築するサンプル

  1. requirements. Recognitions pro suggestion like operative, balanced, explanatory as well as moreover exuberance thinkings about this issue to Gloria. adkefkgfdagd

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中