2015年8月29日土曜日

Azure SQL Databaseが爆速に?!

仕出し弁当450円。いつもはヘルシー弁当だけど気合い入れてみた。


■要約■

遅くて使い物にならなかったAzure SQL Databaseの監査機能をonにしたら、何故か実用的なスピードで動くようになりました。

■前提■

本業?で、10年モノのSAStrutsアプリのサービス化、なんてのを担当してました(過去形)。「オンプレミスをAzureへ」というありがちな作業でしたが、Azureには仮想マシンなどの他にほぼ無料で使えるWeb AppsというWebアプリデプロイ環境があって、.warを投げ込めばtomcatなどでデプロイしてくれます。20MB限定で無料でSQL Serverを使えるので、ちょっとしたサービスなら無料で動かすことができます。

が、無料データベースは9月12日で終了することが決まっています。

ということで、有料のAzure SQL Databaseを使います。一番安いインスタンスなら月500円程度で使えるので、まぁお得。でもオンプレミスからAzureへ大量のデータをエキスポートするには恐ろしく時間かかりますので、そのときだけ少し高めのS2などのインスタンスにしておいて、完了後にシボるのがコツですw

■で、本題■

前記アプリをAzure SQL Databaseと接続して動かしてみたのですが、すっっっさまじく遅い。トランザクションでツマるならまだしも、何回かfetchするとツマって数十秒〜数分戻って来なくなります。何しろ、ログアウトしてEventなどを残すだけで4分26秒もかかってしまいました。「こりゃアプリの動作を見直ししないと、使い物にならないなぁ」と思い、何はともあれログを取ってみることにしました。

Azure SQL Databaseでログを残すには、「監査」機能をonにして、接続先を
<サーバ名>.database.windows.net
から
<サーバ名>.database.secure.windows.net
へ変更する必要があります。

そうしたら…アプリがサクサク動くようになってしまいました。

トラブルを解消しようとログを取ったら現象が出なくなる、というのはよくあることですけども…。

ぼったくり店のように一歩歩くごとにお金をむしりとるAzureさんのこと、何か落とし穴がないか調べてみたのですが、「監査機能は無料で使えます」という記事しかありませんでした。万一の為にそのページの魚拓を残して、パフォーマンス向上については保留としました。パフォーマンス向上は喜ばしいことなのですが、安いと思って飛びつくと値上がりするのはMS世の常なので、注視していきたいと思います。はい。

なお、監査機能をonにすると同時に、デフォルトではログがすべてストレージに残る設定になります。ストレージは有料なので、ご注意を。

この記事は2015年8月28日時点での調査結果であって、マイクロソフト社の公式の見解ではありません。またこの記事は倉橋浩一個人の見解であり、勤務先とは何ら関係ありません。この記事の記載などから予期せぬ結果が生じたとしても私は一切関知いたしませんので、予めご了承ください。Azureのご利用は計画的に、ね♡

■余談■

上に書いた通りならオンプレミスからAzureへの移行もあっという間なのですが、問題はオンプレミスがMS SQL Server 2005で動いていたこと。AzureはSQL Server 2014相当なので、そのままでは移行できません。

まず、オンプレミスの2014に載せ替えます。大まかな手順としては、

  1. SQL Server Management Studio 2014をインストールする
  2. Azureストレージを用意しておく。すでにあれば、それを流用して問題ないです。
  3. 旧DBに接続し、タスクメニューからデータ層アプリケーションへのエクスポートを選ぶ。エクスポート先としてはAzureのストレージを選びます。
  4. Wizardを進んでいくと山のようにエラーが出ますので、一つずつツブして行きます。例えば、ストアドプロシジャなどで[db名].[スキーマ名].[テーブル名]と書いているところがあれば[スキーマ名].[テーブル名]に書き換える、テーブルには必ずclustered indexが必要、など。
  5. めでたくデータ層アプリケーションが作成できて、それがそのままAzureのストレージにアップロードできたなら、あなたはラッキーです。
  6. できなかったあなたは、ここで旧DBをdetachします。で、MSSQLディレクトリの下にあるデータベースファイルをSQL Server 2014の動いているマシンにコピーし、SQL Server 2014でこれをatachします。
  7. データ層アプリケーションをAzureのストレージにアップロードする。
  8. Azureでデータベースをストレージからインポートすれば、できあがりです。
例によってさくっと書いてますが、「detachしてコピーしてatach」ってのは数日間試行錯誤を重ねた後、ググりにググってググった末に出てきたブログ記事で、「まさかーw」と半笑いで試したら本当に出来てしまって、大笑いです。

上記の6番はオフィシャルな手法ではないと思いますので、この記事を信じるかどうかはあなた次第、at your own riskでお願いします。この記事の結果何らかの損害等が生じたとしてもそれは著者の関知するところではありません。

ああmySQL, postgreSQLの世界に戻りたい。

0 件のコメント:

コメントを投稿