twitter で [クラスター化 / 非クラスター化 双方のインデックスを持つテーブルで、非クラスター化インデックスの再構築をする場合、そのテーブル自体へのアクセスってブロックされますか?] というナイスな質問をパスして頂いたのですが、最初きちんと理解していなかっため、うまく答えることができませんでした…。
# というか最初、間違ったこと伝えていました…。
ということでいちから調べてみたいと思います。
SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿
twitter で [クラスター化 / 非クラスター化 双方のインデックスを持つテーブルで、非クラスター化インデックスの再構築をする場合、そのテーブル自体へのアクセスってブロックされますか?] というナイスな質問をパスして頂いたのですが、最初きちんと理解していなかっため、うまく答えることができませんでした…。
# というか最初、間違ったこと伝えていました…。
ということでいちから調べてみたいと思います。
以前、SQL Azure のスケジューラー数と並列クエリについて という投稿をしました。
スケジューラー系で SQL Azure の NUMA ノード数がどうなっているのかが気になったので調べてみました。
先ほど Enzo SQL Baseline を使用した SQL Server / SQL Azure のベースライン作成 を投稿したのですが、タイトルにベースラインと書いている割にはベースラインにあまり触れていないことに気づきました (汗)
ということで追加投稿でベースラインの比較についてまとめてみたいと思います。
twitter でパスを受けたので軽くまとめてみたいと思います。
codeplex に SQL Server and SQL Azure Performance Testing: Enzo SQL Baseline というツールが公開されています。 ![]()
今回の投稿ではこのツールの使い方を軽く見てみたいと思います。
ヘルプに関してはオンラインヘルプで提供されています。
Online Help
ちなみに私は英語が全然だめなので英語を読まずに感覚だけて使っていますので予めご了承ください。
# 英語のツールを使うときは [考えるな、感じろ!] をモットーに検証をしています。
SQL Azure のユーザー データベースは 3 重化され、耐障害性が確保されています。
詳しくは蒼の王座さんのブログに書かれていますのでこちらをご参照。
蒼の王座 >> TechEDNAセッション:SQL Azureパフォーマンスの考察とトラブルシューティングまとめ
こちらの記事の中に以下の一文がありました。
コミット時に複製するので、複製できなければコミットできない
コミット時に何か待ち事象が発生していないかな~ということが気になり調べてみました。
SQL Azure のデータベースのファイル構成を想像してみる の派生で、今回はユーザーデータベースではなく tempdb について想像してみたいと思います。
前回に引き続き今回も想像です。
想像してみると書いていますように、取得できた情報から 「こういう感じかな~」 と思ったことを書いています。
あらかじめご了承ください。
SQL Server のデータベースの基本構成は以下のようになります。
# パーティショニングテーブルは除く ![]()
データベースは
で構成され、データは
で構成されます。
ファイルグループは複数のデータファイルで構成することもできますので、 ![]()
ということも可能になります。
本日は SQL Azure ではこの構成がどのようになっているかを想像してみたいと思います。
SQL Azure はこの手のファイル構成を意識しないでよい (任意の構成に変更できない) のですが、気になったので調べてみました。
SQL Azure のテーブルはクラスター化インデックスが必須となっています。
そのためヒープ構造のテーブルは作成ができず、B-Tree 構造のテーブルとなります。
インデックスが必須ということはデータの挿入状況によってはインデックスの断片化が発生するはずです。
今回の投稿ではそのあたりを見ていきたいと思います。
SQL Server は内部で SQL Server 独自のスケジューラーとして SQLOS (または User Mode Scheduler) が起動しています。
通常、SQLOS のスケジューラーは各コアに対して起動しており、4 コア CPU の場合は以下のようになります。
# sys.dm_os_schedulers から取得可能です。
![]()
VISIBLE ONLINE となっているのがユーザーセッションで使用可能なスケジューラーとなり、この環境では 0 ~ 3 までの 4 個のスケジューラーを使用することが可能です。
# (DAC) となっているのは専用管理者接続用なので数に含めていません。
スケジューラーが複数あるということは複数コアが SQL Server に割り当てられているので、複雑な処理のクエリを実行する際に複数の CPU を使用した並列クエリ (Pararell Query) が使用できるようになります。
![]()
裏ワザで特殊なスタートアップオプションを使うと物理コア数以上のスケジューラーを起動することができたりもします。
# 下の画像は 1 コアの CPU の環境で 16 個のスケジューラーを起動した例になります。
![]()
SQL Server からは有効な CPU として認識しているので、1 CPU 環境でも並列クエリが実行できたりします。
![]()
![]()
このあたりが SQL Azure ではどのようになっているかを確認してみようというのが今回のお話です。
Read the rest of this entry »
以前、Spotlight on SQL Server で SQL Azure に接続 という投稿をしました。
Spotlight On SQL Server は SQL Server の状態をグラフィカルに監視できるソフトになります。
オンプレミスの SQL Server の場合は以下のような情報を監視できます。
SQL Azure の監視もできるのですが、オンプレミスと異なり OS の観点では確認することはできません。
また、SQL Azure の情報はパフォーマンスモニタ系の DMV が提供されていないため、かなり限定されたものになっています。 ![]()
Playback 機能もついているので、過去の情報を確認することも可能です。
# データコレクションより細かな情報を確認できると思います。
この Spotlight on SQL Server を使ってどのような情報が確認できるのかまとめてみたいと思います。