SQL Azure Team Blog

Understanding the Procedure Cache on SQL Azure – SQL Azure Team Blog – Site Home – MSDN Blogsを簡単に翻訳したエントリーです。

SQL ServerとSQL Azureはクエリのパフォーマンス改善に利用する為のプロシージャキャッシュを持っています。このエントリでは、SQL Azure上のプロシージャキャッシュの動きについて説明します。

SQL Azureには、実行計画とバッファデータの保存に使用するためのメモリプールがあります。このメモリプールは、データベースの所有者に関係無く、物理マシン上の全てのデータベースで使用されます。プールは、マシン上の全てのデータベースにまたがる為、自分のDBの実行計画が一つも保存されていない場合があります。実行計画やバッファデータがプール上で使用できる割合は、システムの状態に応じて動的に変わります。メモリプールの中で、実行計画の保存に使用されている部分は、プロシージャキャッシュと呼ばれます。

SQL AzureでSQL文を実行したとき、リレーショナルエンジンは最初に、同じSQL文に実行計画が存在するかどうかを確認します。SQL Azureは実行計画がある場合は再利用し、SQL文を再コンパイルするオーバーヘッドを減らします。もし実行計画が存在しない場合は、SQL azureはクエリの実行計画を生成します。

SQL Azureとプロシージャキャッシュのレプリカ

 

SQL Azure上で動作するデータベースのインスタンスはレプリカと呼ばれます。同時に、起動している1つのデータベースには、3つのレプリカが存在します。一つ目のレプリカは、プライマリレプリカと見なされます。全ての読み書きをするクエリはプライマリレプリカに発行されます。他の二つのレプリカはセカンダリと見なされます。プライマリレプリカに書き込まれたデータは、セカンダリレプリカに書き込まれます。もしプライマリレプリカが落ちた場合、ロードバランサーが起動し、セカンダリレプリカをプライマリレプリカへ昇格させます、
それぞれのレプリカは、別々のラックに分かれた異なる物理マシン上に配置されます。プロシージャキャッシュは、各サーバごとにあるので、プライマリレプリカが落ちてセカンダリレプリカがプライマリレプリカに昇格したときには、プロシージャキャッシュには、そのデータベース用の実行計画はありません。

 

プロシージャキャッシュの統計情報

 

SQL Azureはキャッシュ上に全ての実行計画のパフォーマンス統計情報を保持しています。動的管理ビュー(DMV)であるsys.dm_exec_query_statsを使用して自分のデータベースに発行された統計情報を見ることができます。

SELECT *
FROM sys.dm_exec_query_stats

sys.dm_exec_query_statsを使用してI/Oパフォーマンスが悪いクエリを見つける方法について、別のエントリで説明しています。

sys.dm_exec_query_statsは、SQL Azureデータベースのプライマリレプリカの統計情報のみを表示します。もしセカンダリレプリカがプライマリレプリカに昇格したら、sys.dm_exec_query_statsの結果は、すごく変わります。キャッシュ上にクエリは無く、実行回数は少なくなります。

 

プロシージャキャッシュから実行計画を削除する

 

実行計画は、メモリに保存できる限りは、プロシージャキャッシュに記録されます。Memory Pressureが発生した場合、SQL Azureは、プロシージャキャッシュから削除する実行計画を決定するためにコストベースを使用します。

SQL Azureは計画の所有者に関係無くキャッシュから実行計画を削除します。サーバ上に存在する全てのデータベースの、全ての実行計画が横断的に、削除のために評価されます。プロシージャキャッシュ上の実行計画は、個々のデータベースでは無く、物理マシーンの利益の為に最適化されます。

SQL Azureは現在のところDBCC FREEPROCCACHE (Transact-SQL)をサポートしていません。その為、手動でキャッシュから実行計画を削除することはできません。しかし、クエリ(ALTER TABLE や ALTER VIEW) でテーブルやビューの参照関係を変更すると、キャッシュから実行計画は削除されます。

まとめ

 

SQL AzureはSQL Serverの上に構築されているので、多くの点で、プロシージャキャッシュはSQL Serverと同じように動作します。しかし、幾つかの違いがあり、それらを理解しておいて方が良いと思います

SQL Azure Team Blog

Improving Your I/O Performance – SQL Azure Team Blog – Site Home – MSDN Blogsを簡単に翻訳したエントリーです。

SQL ServerのI/Oパフォーマンスを改善する場合、通常はストレージを調整し、RAIDを構成し、tempdbのファイル数を増やしたりします。しかし、SQL Azureのようにファイルストレージを変更できない場合、I/Oパフォーマンスをどのように改善したら良いのでしょうか、クエリを改善しI/Oを減らすことに集中することになります。I/O数の高いクエリを探し、I/Oパフォーマンスを改善する方法を説明します。

 

I/Oの使用が高いクエリを探す

 

次のTransact-SQLは、遅いクエリを25個取得します。

SELECT TOP 25
    q.[text],
    (total_logical_reads/execution_count) AS avg_logical_reads, 
    (total_logical_writes/execution_count) AS avg_logical_writes, 
    (total_physical_reads/execution_count) AS avg_phys_reads, 
     Execution_count
FROM sys.dm_exec_query_stats   
    cross apply sys.dm_exec_sql_text(plan_handle) AS q 
ORDER BY
 (total_logical_reads + total_logical_writes) DESC

クエリの実行結果は次のようになります。

 

最も大量にデータを読み込むクエリ

 

データを読み込むクエリでI/Oga大量に発生するもので、あなたが使用すべきでない代表例が下のクエリです。

SELECT * FROM [Table]

このクエリは、[Table]から全ての列と全ての行を読み込みます。これは、次のようにして改善することができます。

  • where句を使用して、クエリの使用目的に応じた必要な行のみを読み込むようにします。
  • テーブルから必要な列のみを取得するように、明確に列名を指定するようにします。

カバードインデックスを作成する

 

カバードインデックスを使用することでI/Oを減らせます。

カバードインデックスとは、where句とselect使用としているカラムを、非クラスタインデックスに含んでいるインデックスです。

複数テーブルを結合している場合に威力を発揮します。

 

まとめ

 

I/Oを改善するには、クエリのパフォーマンスを向上させることに集中させます。SQL Serverのクエリの最適化に関するMSDNに掲載されているテックニックを参考にできます。

ストレージ部分はマイクロソフトが最適化をしていますので、ユーザはクエリの改善に集中することになります。

SQL Azure Team Blog

Getting Started With Project Houston: Part 1 – SQL Azure Team Blog – Site Home – MSDN Blogsを簡単に翻訳したエントリーです。

マイクロソフトのプロジェクトコードネームHoustonは、SQL Azureのライトなデータベース管理ツールです。Houstonは、クエリの作成・実行、データベーススキーマのデザイン・編集、テーブルデータの編集のような基本的なデータベースの管理タスクを行うことができます。
現在、Houstonは最初のコミュニティテクノロジー・プレビュー(CTP)です。このエントリでは、HoustonのCTO版の紹介とスクリーンショットをお見せします。Houstonの利用方法をお見せします。

HoustonはwebベースのSilverlightアプリケーションです。つまり、インターネット接続ができる様々な場所から、Silverlightをサポートしている様々なブラウザ(ブラウザ一覧)でアクセスし使用することができます。Houstonはインストールをするソフトウェアではありませんが、Silverlihtはインストールするソフトウェアです。まだインストールしていない場合は、初めてHoustonにアクセスしたときにインストールをする為のダイアログが表示されます。

https://manage.sqlazurelabs.com/にアクセスすることでHoustonの利用を始めることができます。SQL Azureラボは、CTP版のプロジェクトや先進的なものを配置します。リリース後には、URLが変わります。

 

ログインをする

 

現在のCTP版では、ログインする時にSQL azure Server、データベース、管理者ID、パスワードを入力する必要があります。

2860.clip_image001_34323C9F

HoustonはSilverlightアプリケーションなので、あなたのPC上のローカルクライアントで動作します。WEBアプリケーションでは無いが、Windows Azureにホストされたwebサービスと通信をします。

 

スタートページ

 

ログインすると、中央にスタートページが表示されます。スタートページには、アクセスするデータベースを選択する為の情報が表示され、ぐるぐる回転します。Houstonは、一つのブラウザで一つのデータベースを管理することができます。もし二つ以上のデータベースを管理したいときには、ブラウザのタブを使用し、もう一つHoustonにアクセスします。

0827.clip_image0016_69D75C2C

 

矢印をクリックすると箱が回転します。回転するとき「oh」、「ah」と言っているのを確認してください。

 

4578.clip_image002_113E02CA

 

ヒントページでは、Houstonの機能を確認するためのHoustonのビデオへのリンクが記載されています。

 

2746.clip_image003_5ADCB4ED

 

ナビゲーション

 

アプリケーションの上の方はツールバーです。ツールバーは、メインタブの表示内容に合わせて変化します。

 

8712.clip_image005_6681D652

 

データベースツールバーは下のような内容です。

 

8228.clip_image006_299D2EB3

 

ツールバーは下のように変化します。

 

3441.clip_image007_0DABF9BB

 

メインタブの操作内容に関係無く、アプリケーションの左上のデータベースリンクをクリックすることで、いつでもデータベースツールバーに戻ることができます。
Houstonは、他のタブに移動しても元のタブでの変更を維持しています。テーブルを変更し、保存せず別のタブを開いても変更は失われません。アプリケーションは、タブ内に鉛筆アイコンが表示されている場合、テーブル/タブを保存する必要があることを示しています。

2451.clip_image008_0F9948C4

アプリケーションを終了させようとすると、変更を保存する必要があることを示す警告が表示されます。保存しなければ、操作が失われます。

 

3441.clip_image009_29F93BDB

 

Houstonは、CTP版です。その為、まだプロダクトにはバグがあったり、上のダイアログのようにスペルミスがあります。私は、上のダイアログの件をMicrosoft Connectにすでに報告している。

Feedbackやバグ報告

プロジェクトHoustonは通常のMicrosoftサポートサービスのサポートを受けることはできません。コミュニティベースのサポートは、SQL Azure Labs Support Forumに質問を投稿することができます。プロダクトチームが回答します。

 

バグの登録の仕方

  1. フィードバック | Microsoft Connectに移動する。
  2. すでにフィードバックが報告されていないか検索し確認してください。
  3. まだ報告されていない場合は、ページの一番下に移動し、オレンジの「Submit Feedback」をクリックしてください。
  4. 「Select Feedback」上の、「SQL Server Suggestion Form」をクリックします。
  5. バグフォームで、「Category」=Tools(Houston)を選択します。
  6. 質問を入力します。
  7. マイクロソフトに送信するため「Submit」をクリックします。

フィードバックの仕方

  1. フィードバック | Microsoft Connectに移動する。
  2. すでに問題が報告されていないか検索し確認してください。
  3. まだ報告されていない場合は、ページの一番下に移動し、オレンジの「Submit Feedback」をクリックしてください。
  4. 「Select Feedback」上の、「SQL Server Bug Form」をクリックします。
  5. バグフォームで、「Version」=Houston build CTP 1 – 10.50.9610.34を選択します。
  6. バグフォームで、「Category」=Tools(Houston)を選択します。
  7. 質問を入力します。
  8. マイクロソフトに送信するため「Submit」をクリックします。

まとめ

 

Houston Blogを始めます。

SQL Azure Team Blog

このホワイトペーパでは、SQL Azureで提供されている動的管理ビュー(DMV)のガイドラインについて記載されています。動的管理ビューを使用して、トラブルシューティングする方法が説明されています。

 

Download details: Troubleshooting and Optimizing Queries with SQL Azure

SQL Azure Team Blog

Adding Users to Your SQL Azure Database – SQL Azure Team Blog – Site Home – MSDN Blogsを簡単に翻訳し紹介したエントリーです。

SQL Azure Portalを使用して、SQL Azureサーバを作成したとき、同時にユーザ名とパスワードを作成します。サーバ上の全データベースにアクセスすることができる管理者アカウントです。しかし、サーバ上の全て、もしくは一部のDBに他の人にも、フル権限または一部権限で、アクセスして欲しいと思うことがあります。このエントリーでは、SQL Azureデータベースに対してユーザアカウントを追加する方法を紹介します。

今のところ、SQL Azure Portalで、管理者アカウントを追加することはできません。追加するにはTransact-SQLを使用する必要があります。SQL Server Management Studio 2008 R2を使用してSQL AzureにTransact-SQLを実行します。SQL Server Management Studio 2008 R2はSQL Azureデータベースのユーザとログインを一覧で表示しますが、ユーザとログイン作成のGUIは提供されていません。

一覧には、ユーザーとログインが表示されている。

vs04

 

プロパティ的なメニューが表示されない。GUIでの操作方法を今のところ提供されていない。

vs05

 

ログインを作成する

 

ログインは、パスワードとログイン(ID)ペアになっており、全てのデータベースに同じパスワードでアクセスすることができます。ログインを作成するTransact-SQLは次のようなものです。

CREATE LOGIN readonlylogin WITH password='1231!#ASDF!a';

CREATE LOGINコマンドを実行するには、SQL Azureのマスターデータベースに(SQL Azure Portalで作成した)管理者アカウントで接続しなければなりません。

 

ユーザを作成する

 

ユーザは、データベスに対して作成し、ログインと紐付けます。ユーザを作成するデータベースに対して接続しなければなりません。多くの場合、マスターデータベース以外に接続することになります。ユーザを作成するTransact-SQLは次の用になります。

CREATE USER readonlyuser FROM LOGIN readonlylogin;

 

ユーザ権限

 

ユーザを作成した直後は、データベースに接続する権限はありません。アクセスする為の権限を付与する必要があります。次のTransact-SQLは、ユーザ「readonlyuser」に対して、データベース読み取り権限をdb_datareaderロールを使用して付与します。

EXEC sp_addrolemember 'db_datareader', 'readonlyuser';

 

ユーザとログインを削除する

 

幸い、SQL Server Management Studio 2008 R2はユーザとログインを削除することができます。オブジェクトエクスプローラーのツリーからセキュリティーノードを見つけます。ユーザまたはログインで右クリックをし、削除を選択します。

vs06

 

補足情報

 

SQL AzureはUSE文を使用することができません。これは、一つのスクリプトで、ログインとユーザを作成することができないことを意味しています。CREATE LOGIN と CREATE USERを実行するにはぞれぞれデータベースに接続詞直さなければなりません。

詳細は、Managing Databases and Logins in SQL Azureを確認してください。