SQL Azure

Preview: Azure SQL Database Query Store」で、Azure SQL DatabaseでQuery Storeが利用できるようになったことが発表されました。

Query Storeとは

Query Storeは、クエリ履歴とプラン、実行統計情報を自動的に記録します。
この機能を使用することで、クエリプランの変更により発生するパフォーマンス劣化を簡単に特定し、性能問題のトラブルシューティングを簡単にできるようになります。

有効化と使用方法

早速、使用してみましょう(ドキュメントを参照します)。
私用に当たっては、SQL Server 2016 CTP 2.0のSQL Server Management Studioを使用する必要があります。

Azure SQL DatabaseにSSMS 2016 CTP 2.0で接続します。
次に、Query Storeを有効化するために、データベースのプロパティを開いて、有効化をTrueに設定します。

image

Azure SQL Databaseで、Query Storeを有効化するとオブジェクトエクスプローラーに、クエリストアが表示されます。

image

追跡したクエリを開き、クエリIDを指定すると次のように実行された時間と、実行計画が表示されます。

image

SQL Azure

Channel 9で「Azure SQL DB Transactional Replication」が紹介されていました。
この機能は、SQL Server 2016(Version13)とAzure SQL DB(Version13)、およびSQL Server 2012/2014とAzure SQL DB(Version13)のデータベース移行をスムーズに実現します。

image

 

トランザクションレプリケーションによるサブスクライバー機能です。
ダウンタイム無しで、オンプレミスのSQL ServerからクラウドのAzure SQL DBにデータ移行するための機能です。

image

 

今のところ、SQL Server 13シリーズで提供される予定。
ちなみにSQL Server 2016は今年の後半提供予定の模様。

 

image

 

レプリケーションオブジェクトがあり、ここから設定していきます。
パブリケーション種類で、「Transaction publication」を選択。

image

 

これらを設定すると、同期トリガーとしては、SQL Server Agent jobが使用されるみたい。

 

image

 

これまでは大きなデータベースを移行しようと思うと、ダウンタイムがどうしても長くなりがちだったけど、この機能がリリースされると、移行ハードルが多少下がりますね!

SQL Azure

SQL Database Elastic Pool (Preview)に関しての情報は、だいたい以下のところで把握することができます。

今のところ一番詳細情報を公開しているのがIgnite 2015のセッション「Microsoft Azure SQL Database – New ISV Resource Pooling Model Drilldown: The What, Why and How」です。
続いて、料金体系と性能、実際の使用感に関して、われらがムッシュ金麦が書いているSEの雑記「Elastic Pool Preview を触ってみる その 1」です。
あとは、MSDNライブラリで情報公開されているみたいです。

Elastic Database Poolが必要な背景

アプリケーションの性能向上を目的として、複数のデータベースに分割することがあります。コスト最適化のためにデータベースの特性に応じて、それぞれのデータベースのサイズを決定します。
たとえば、マスターデータベースや普段あまり使用されない機能のためのデータベースは性能が低めのデータベースにし、負荷がかかりやすいデータベースは性能が高めのデータベースにします。(まぁ実際には、「SaaSアプリケーションを想定していて、テナント毎にデータベースを持ち、テナントの負荷別にDBの性能を選択する。普段、使用者が少ないテナントのデータベースに唐突にユーザーが集まってアプリケーションの性能が劣化してしまう」というのが想定しなおリオみたい)

しかし、次の図のようにたまに不幸なことが起こります。
各データベースの性能は問題ないのに、低めに設定していたデータベースに何らかの原因で急に負荷が高まると、そこが性能ボトルネックとなりアプリケーション性能に深刻な影響を与えることがあります。

a

 

そこで登場するのが、Elastic Database Poolです。
Elastic Database Poolでは、性能の下限と上限を選択し、突発的な負荷にも対応できるように柔軟な性能を得ることができます。

b

 

Elastic Database Poolの課金

Elastic Database Poolは、複数のデータベースでDTUを共有しようというモデルです。
ですので課金のキーポイントの1つがPoolに割り当てるeDTU(Elastic Database Througut Unit)に応じた課金です。
次に、Poolに格納するデータベース数に応じた課金です。データベースの個数に応じて課金されます。

つまり、Elastic Database Poolの料金は次の式で求められます。

227.46円/月/1eDTU × 共有するDTU(eDTU) + 128.52円/月/1DB × DB数

ドキュメントにも書かれていますが、通常のSQL DatabaseのDTUよりも、Elastic Database PooleのeDTUの法が価格単価は高くなっています。(200DTUが17340円で、200eDTUが45492円)

Elastic Database Poolと通常のデータベースを使ったときの料金比較

たまに100DTU近く使うけど、普段は低使用率のデータベースが複数個ある場合をシミュレーションします。

左上が1個のとき、右上が20個のデータベースでは黒線の使用率に収まっている(合計200eDTU)シミュレーション、左下が4個の時。それらをElastic Database PoolとSQL Databaseで料金比較したグラフ。

image

 

100DTUのデータベース1個と、200eDTU(DB1個)
100DTUのデータベース2個と、200eDTU(DB2個)
100DTUのデータベース3個と、200eDTU(DB3個)
100DTUのデータベース4個と、200eDTU(DB4個)
100DTUのデータベース10個と、200eDTU(DB10個)
100DTUのデータベース20個と、200eDTU(DB20個)
の料金をマッピングしたときのグラフです。

image

 

たまに、100DTUにはねるけど、ほとんどは低使用率のDBをたくさんかき集められたら、圧倒的にElastic Database Poolが有利。でも、DB数が少ないときには、個別に作ったほうが有利となる。

なので、SaaS利用が主体とマイクロソフトは考えている(MSDNドキュメントもメニューにSaaS developer Solutionって書いちゃうぐらい)。

Elastic Poolで登場する係数

次の図のようなサービス帯になっている。
現時点のPreviewで提供されているのは、Standardのみ。

image

Poolに格納できるDB数

1つのPoolに格納できるのは、最大100個まで。
でも、次の計算式が優先される。

選択したeDTU / データベース毎の最少DTU

たとえば、eDTUを400にし、データベース毎の最少DTUを20としたら、
400/20=20となり、20個のデータベースまで格納することができることになる。

The pool must have room for the database (cannot already contain the maximum number of databases). http://azure.microsoft.com/ja-jp/documentation/articles/sql-database-elastic-pool-portal/

DB毎の最少DTU

DB毎に設定する最少DTU。
これは格納できるDTU数に影響を与える係数となっている。

ここの設定値の推奨は、データベース毎の平均使用DTUに設定すべき。
設定すると、プール内のすべてのデータベースにDTUが付与される。

DB毎の最大DTU

推奨値は、データベースのピーク使用数を設定すべき。
たとえば、100個のデータベースの内、20%がピークで50DTU使用する場合、DB毎の最大DTUは50DTUを設定すればOK。そして、eDTUは1000にすればOK。

ストレージ

ストレージもElastic Database Poolで共有する。
1eDTUにつき1GB付与される。

ワーカー数とセッション数の制限

次の表のように制限があるので注意。

image

画面構成

プールのeDTU、プールのストレージ使用料

image

最大DTU数、平均DTU、最大DTUを確認することができる。

image

実際に使ってみよう!

われらがムッシュ金麦が書いているSEの雑記「Elastic Pool Preview を触ってみる その 1」で説明されているので、それで十分!

今後の計画

  • BasicとPremiumのサービス帯を準備する予定
  • プール毎に格納できるデータベース数は増やす予定
  • プール毎のストレージとDTU数は増やす予定
  • プールのデータベース作成と取り外しは、T-SQLで実施できるようにする予定
  • V11からV12のPoolに移行できるようにする予定

SQL Azure

Microsoft Azure SQL Data Warehouseは、クラウドで提供されるフルマネージドサービスです。柔軟に、性能とストレージをスケールアップ&スケールダウンさせることができます。

リソースは、ストレージとコンピューティングに分かれており、どちらも必要に応じて日次で増やしたり減らしたりすることができます。

image

image

 

管理画面のサンプル

管理ポータルのUXイメージは次の図。

DWUっという表記があるので、Azure SQL DatabaseのDTUと似たようなイメージで、性能を相対表記する単位を用意し、それでリソース制御する予定。

image

 

DWU(Data Warehouse Unit)

DWUは、データのスキャンとデータのロード、テーブル複製の組み合わせで性能測定されている。1B行をスキャンすると、100DWUで297秒、1600DWUで19秒っとほぼ数字通りスケールはする模様。

image

 

一時停止機能(Pause)

一時停止機能が用意されている。

データウェアハウスなので、格納するデータは当然膨大となる。使用しない時には削除しておきたいところだけど、削除すると再格納に時間がかかりすぎて無駄。
そこで、一時停止機能。

この機能を使用すると、データの再ロードや再格納が不要でデータを保管しておける。
一時停止中は、クラウドストレージは最少コストで済む。

PowerShell/Rest API経由で自動処理できるようになっているので、スケジュール処理することが可能。

 

料金体系

気になる料金体系は、性能種別でストレージ単価も変動する仕組みを採用している。

image

 

SQL Serverとの互換性

SQL Serverとの互換性はばっちりで、ユーザー定義関数やストアドプロシージャ、テーブルパーティショニング、照合順序、カラムストア(インデックスなど)技術にも対応している。

image

 

Polybase/T-SQL経由で非構造型データのクエリ発行

リレーショナルデータベースでもHadoopでも、T-SQLクエリを発行可能。
Polybaseは、マイクロソフトのMPP(Massively Parallel Processing)製品を統合するテクノロジーで、HadoopとSQL Server間をクエリで総合に連携させることができます。

image

 

T-SQLのクエリサンプル

まず、データを取得するときの認証情報として、証明書を作成します。

image

 

データソースを指定します。

image

 

image

まとめ

いろんなシステムと連携させましょう!

image

 

参考情報

AzureVM

この手順で、VNCまたは、WindowsのRDPで、Linux Azure仮想マシンにリモートデスクトップ接続できるようになります。

AzureギャラリーのCentOS 7.1を使用します。
おそらく他のRedHatベースのLinuxディストリビューション(たとえば、Oracle Linuxなど)でも恐らく動作すると思います。
image

手順

  1. Linux 仮想マシンにログインします。
  2. GNOME Desktopをコマンドでインストールします。
    sudo yum groupinstall "GNOME Desktop" "Graphical Administration Tools"
  3. TigerVNCをインストールします。

    sudo yum install tigervnc-server xorg-x11-fonts-Type1
  4. vncserver.serviceファイルをコピーします。

    sudo cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service
  5. viで、「/etc/systemd/system/vncserver@:1.service」を編集します。そのファイルの「<USER>」タグをLinuxユーザー名に置き換えます。

    # Clean any existing files in /tmp/.X11-unix environment
    ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
    ExecStart=/sbin/runuser -l  -c "/usr/bin/vncserver %i"
    PIDFile=/home//.vnc/%H%i.pid
    ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
  6. もし、Firewallが動作していたら、ポートを開けます。

    firewall-cmd --permanent --zone=public --add-port=5901/tcp 
    firewall-cmd --permanent --zone=public --add-port=3389/tcp 
    firewall-cmd –reload
  7. コマンドを使用して、XRDPをインストールします。

    sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm 
    sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm 
    sudo yum install xrdp 
    sudo chcon -t bin_t /usr/sbin/xrdp* 
    sudo systemctl start xrdp.service 
    sudo systemctl enable xrdp.service 
    sudo systemctl start xrdp-sesman.service
  8. VNCServerを起動します。

    vncserver

    VNCのパスワードを入力します。

  9. VNCServerとXRDPが起動していることを、「netstat -ant」で確認します。

    image
  10. Linux仮想マシン用のRDPとVNCのエンドポイントを追加します。

    特定のリモートサブネットからのみ接続できるようにACLを使用してもOKです。

    Azure管理ポータルでLinux仮想マシンにアクセスし、エンドポイントをクリックします。RDPとVNC用のエンドポイント、3389と5901を追加します(RDPはランダムポートでOKですが、VNCは同じポートにしないといけません)。

    imageimage

  11. VNC Viewerを使用して、接続テストをします。

    image
  12. 次に、Remote Desktop Connectionを試します。

    SNAGHTML2dc85768

    image

元ネタ

MSDN Blog:Remote Desktop to your Linux Azure Virtual Machine