SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

直近開催のイベントはこちら!

EnterpriseZine編集部ではイベントを随時開催しております

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けの講座「EnterpriseZine Academy」や、すべてのITパーソンに向けた「新エバンジェリスト養成講座」などの講座を企画しています。EnterpriseZine編集部ならではの切り口・企画・講師セレクトで、明日を担うIT人材の育成をミッションに展開しております。

お申し込み受付中!

SQL Server 2012 Deep Dive

「待機時間」に向き合うパフォーマンスチューニング

第1回

日本マイクロソフト プレミアフィールドエンジニアリング部の平山です。SQL Server 2012のリリースに向け、一年余りにわたり「あたらしいSQL Server/Denaliの世界」という連載を通じて、これまでは主に新機能の紹介をしてきました。また、製品の販売の開始ともなっていろいろな情報が出そろってきました。そのため、今回からは取り上げる内容の切り口を少し変えようと思います。通り一遍の技術情報を紹介するだけではなく、あまり語られることのないSQL Server 2012のアーキテクチャの詳細や、トラブルシューティングのテクニックといった、深めの情報をわかりやすく解説していきますので、どうぞお楽しみに。

待機時間を把握する

 第1回目となる今回は、これまでとは違うアプローチによるパフォーマンスチューニング手法について紹介します。

 SQL Server2012が登場するまでのパフォーマンスチューニングの入り口は、「クエリの実行プランを確認する」ことや「パフォーマンスログからボトルネックを発見する」といったところが定石である、と言えるのではないでしょうか。

 ご存知の方も多いと思いますがSQL Server 2012からは、拡張イベントが大きく機能拡張されています。この便利なツールを活用することで、新たな視点からパフォーマンスの改善ができるようになりました。

 新たな視点とは、クエリのライフサイクルの中でたびたび発生する「待機状態」です。

 クエリの実行が始まってから完了するまでの間には、ブロックの獲得待ち、タスクを処理するためのスレッド割り当て待ち、タスクに必要なメモリの割り当て待ちなど、さまざまなリソースを獲得するための待機状態が発生します。クエリのパフォーマンスを解析、あるいはチューニングする場合には、どのような種類のリソースをどれだけの期間待機したかを把握することはとても重要です。なぜなら、それらの待機状態を発生させない、または待機時間を短くすることは、次の図のようにクエリの実行時間を短縮することに直接つながるからです。

図1

 SQL Server 2012 よりも前のバージョンでも、待機状態を把握するためのツールが用意されていました。

 ただ、残念なことに従来の情報ではクエリのライフサイクルを解析する際に、どうしても推測が入る余地が残っていて、完全に待機状態を把握することができなかったのです。実際の例を交えてSQL Server 2012より前のツールで判断することのできた情報を紹介します。

 ある種のクエリはメモリ内でデータの並べ替えを行う必要があります(ヒープテーブルにORDER BY句を指定する場合など)。その際に、SQL Serverが使用できるメモリリソースに余裕がないと、必要なサイズのメモリを獲得することができずに、クエリは待機状態になります。そのような場合にはSQL Serverの内部で、クエリは「RESOURCE_SEMAPHORE」というリソースを待機した状態になります。今回は「RESOURCE_SEMAPHORE」の待機状態を例として考えてみましょう。SQL Server 2012より前のリリースでは大きく分けると2つのツールで待機状態を確認することができます。

 最初のツールは、sys.dm_os_wait_stats動的管理ビューです。この動的管理ビューを参照することでSQL Serverインスタンス全体の様々な待機状態を確認することができます。

 つぎのクエリを実行すれば、SQL Serverのインスタンス全体で「RESOURCE_SEMAPHORE」の待機状態が何回発生したか(waiting_tasks_count)、あるいは(すべての処理の待機時間を)合計するとどのくらいの時間になるのか(wait_time_ms)などを出力結果から知ることができます。(注1)

-   クエリ
select * from sys.dm_os_wait_stats where wait_type = 'RESOURCE_SEMAPHORE'
go

-	実行結果
wait_type                 waiting_tasks_count  wait_time_ms max_wait_time_ms signal_wait_time_ms
----------------------------- ------------------------ ---------------- ---------------------- ------------------------- 
RESOURCE_SEMAPHORE                4328        111552                599                 44481
(1 row(s) affected)

 ただ、あくまでSQL Serverインスタンス全体の値が確認できるだけであって(注2)、個々のクエリと関連付けることはできません。そのため、特定のクエリのチューニングを目的として、待機時間を正確に把握するための用途には適していません。

 注1):where句を省略すると、「RESOURCE_SEMAPHORE」以外のリソースの待機状態も確認することができます。出力されるリソース数はバージョンやサービスパックのレベルによって異なり、SQL Server 2012 RTM の場合は、700 種類弱のリソースに関する情報が出力されます。

 注2): SQL Server インスタンスが起動してからクエリが実行された時間までの累積値が出力されます。

次のページ
待機状態をスナップショットで確認

この記事は参考になりましたか?

  • Facebook
  • Twitter
  • Pocket
  • note
SQL Server 2012 Deep Dive連載記事一覧

もっと読む

この記事の著者

平山理(ヒラヤマオサム)

日本マイクロソフト株式会社
プレミアフィールドエンジニアリング
プレミアフィールドエンジニア日本マイクロソフトの Premier Field Engineering 部で、お客様に SQL Server をスムーズにお使いいただくための様々なお手伝いをしています。Sybase (現 SAP) 勤務時代の 5 年間とマイクロソフトでの 12 年間、データベース道を極めるために精進する毎日です。
二人の娘の父親で...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

EnterpriseZine(エンタープライズジン)
https://enterprisezine.jp/article/detail/4068 2012/07/09 00:00

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング