17
実機で試す SQL Server の現状取得 SQLTO 小澤 真之 (@Masayuki_Ozawa) http://engineermemo.wordpress.com

COD2012 T2/T3 : 実機で試す SQL Server の現状取得

Embed Size (px)

Citation preview

Page 1: COD2012 T2/T3 : 実機で試す SQL Server の現状取得

実機で試す SQL Server の現状取得

SQLTO 小澤 真之 (@Masayuki_Ozawa) http://engineermemo.wordpress.com

Page 2: COD2012 T2/T3 : 実機で試す SQL Server の現状取得

• SQLTO という SQL Server のコミュニティの運営スタッフをしています。 – 2012/8/4 (土) に次回の勉強会を予定しています。

• SE の雑記というブログ で (http://engineermemo.wordpress.com)で SQL Server を中心とした Microsoft 製品の検証結果を誤字脱字を交えながら、つらつらと投稿していますので興味のある方がいらっしゃいましたらご覧いただけると幸いです

• SNS のアカウント – Twitter : @Masayuki_Ozawa – Facebook :masayuki.ozawa

• なぜスピーカー名が“ムッシュ 小澤”になっているか気になった方がいらっしゃいましたらこちらを参照ください (気づいたらこのスピーカー名になっていたのですが面白そうだからそのままにしました)

– http://togetter.com/li/169645 – プライバシー保護のため画像を一部モザイク化してお送りしています。

自己紹介

2012/6/9 Community Open Day 2012 2

名付け親 スピーカー名を 提出の容疑者

Page 3: COD2012 T2/T3 : 実機で試す SQL Server の現状取得

本日のハンズオン

• 配布物の確認

– ハンズオンマニュアル (1 部) があるかをご確認ください

• 本日は 3 種類のハンズオンを用意しています。

– ハンズオン 3 は時間が余った方向けのオプションとして用意しました

– ハンズオン 1 / 2 を今回のセッションの範囲としています

• 本ハンズオンは SQL Server のメモリの使用状況やインデックスの利用状況の取得についての足掛かりとなる情報を取得するためのセッションとなっています。 取得した情報を基にしたパフォーマンスチューニングには触れていませんのでご了承ください。

2012/6/9 Community Open Day 2012 3

Page 4: COD2012 T2/T3 : 実機で試す SQL Server の現状取得

ハンズオンの内容について (10 分)

ハンズオン 1 : メモリ情報の取得 (15 分)

ハンズオン 2 : インデックス使用状況の確認 (15 分)

まとめ / 質疑応答 (10 分)

本日の Agenda

2012/6/9 Community Open Day 2012 4

Page 5: COD2012 T2/T3 : 実機で試す SQL Server の現状取得

2012/6/9 Community Open Day 2012 5

ハンズオンの内容について

Page 6: COD2012 T2/T3 : 実機で試す SQL Server の現状取得

ハンズオン 1

• ハンズオンの内容 – データを SELECT / INSERT / UPDATE するとディスクからメモリ (データキャッシュ) にデータがロキャッシュされます。 また、これらのデータを取得するためのクエリを実行するとそのクエリを実行するために必要となる実行プランがメモリ (プランキャッシュ) にキャッシュされます。

– 本ハンズオンではこれらのキャッシュでどの程度のサイズのメモリが使用されているかを確認します。

• 使用するツール – SQL Server Management Studio

– パフォーマンスモニタ

2012/6/9 Community Open Day 2012 6

Page 7: COD2012 T2/T3 : 実機で試す SQL Server の現状取得

参考) ざっくりとした SQL Server のメモリ管理

2012/6/9 Community Open Day 2012 7

バッファプール Buffer Manager /

Memory Manager が管理 = Min / Max Server

Memory の設定

非バッファプール Buffer Manager /

Memory Manager の 管理外

MemToLeave (MemToReserve)

SQL Server フットプリント

Worker Thread Stack

Connection Memory

Granted Workspace Memory

Lock Memory

Log Cache

Plan Cache (Query Cache)

Database Cache (Buffer Cache) ハンズオンで

確認

Page 8: COD2012 T2/T3 : 実機で試す SQL Server の現状取得

ハンズオン 2

• ハンズオンの内容

– データを効率よく検索するためのインデックス。 インデックスの操作には全件を読む Scan と対象のデータをポイントで読む Seek の 2 種類の代表的な操作があります。

– 本ハンズオンでは設定されているインデックスで Seek / Scan が行われている回数を確認します。

• 使用するツール

– SQL Server Management Studio

2012/6/9 Community Open Day 2012 8

Page 9: COD2012 T2/T3 : 実機で試す SQL Server の現状取得

参考) Scan 操作と Seek 操作

2012/6/9 Community Open Day 2012 9

ルート ノード

中間 ノード

中間 ノード

リーフ ノード

リーフ ノード

リーフ ノード

Scan 操作 Seek 操作

取得対象のデータの場所が特定できないため リーフノードのページをすべて確認する

実行コストが高い

ルート ノード

中間 ノード

中間 ノード

リーフ ノード

リーフ ノード

リーフ ノード

取得対象のデータの場所が特定できるため 対象のリーフノードのページを取得する

実行コストが低い

Page 10: COD2012 T2/T3 : 実機で試す SQL Server の現状取得

ハンズオン開始

• それでは、お手元のハンズオンマニュアルを参照して演習を実施してください

– 開始して、しばらくしたら一度進捗を確認させていただきます

• 内容に不明な点が遠慮なくありましたらお声掛けください

2012/6/9 Community Open Day 2012 10

Page 11: COD2012 T2/T3 : 実機で試す SQL Server の現状取得

2012/6/9 Community Open Day 2012 11

まとめ / 質疑応答

Page 12: COD2012 T2/T3 : 実機で試す SQL Server の現状取得

ハンズオン 1 (1/2)

パフォーマンスモニターでは取得が出来ない詳細なメモリの情報 (データベース別 / クエリの種類別) に関しては動的管理ビュー (DMV) を使用して取得することができます。

SQL Server のメモリの使用状況を確認する場合、

– SQL Server でメモリを ~ MB 使用している

という状態を確認するのではなく

– SQL Server のデータのキャッシュで ~ MB メモリを使用している

– SQL Server のクエリのキャッシュで ~ MB メモリを使用している

– データのキャッシュの中で ~ データベースが ~ MB メモリを使用している

– クエリのキャッシュではストアドプロシージャが ~ MB / アドホッククエリが ~ MB / プリペアードクエリが ~ MB メモリを使用している

という情報が重要になってきます。

2012/6/9 Community Open Day 2012 12

Page 13: COD2012 T2/T3 : 実機で試す SQL Server の現状取得

ハンズオン 1 (2/2)

• パフォーマンスモニターのデータはログに取得することができます。このログは CSV 形式でエクスポートすることが可能ですので以下のようなグラフを作成することができます。

– SQL Server 2008 以降の Enterprise Edition を使用している場合はデータコレクションの機能を使用することでパフォーマンスのログを取得することができます。

2012/6/9 Community Open Day 2012 13

プランャキャッシュ

データキャッシュ

空きメモリ

Page 14: COD2012 T2/T3 : 実機で試す SQL Server の現状取得

参考)データコレクション

2012/6/9 Community Open Day 2012 14

Page 15: COD2012 T2/T3 : 実機で試す SQL Server の現状取得

ハンズオン 2 (1/2)

• データの件数が多いテーブル (クラスター化インデックス) に非クラスター化インデックスを設定することで検索の効率が向上しますが、更新の頻度が多いテーブルだった場合には、更新される対象が多くなり更新のコストが上がる可能性があります。

– 更新頻度の高いテーブルの判断

– 更新頻度の高いテーブルに不要なインデックスを設定

– 必要なインデックスが不足している

• という判断の取り掛かりとなる情報を取得することが可能となります。

2012/6/9 Community Open Day 2012 15

Page 16: COD2012 T2/T3 : 実機で試す SQL Server の現状取得

ハンズオン 2 (2/2)

• 動的管理ビューからデータを取得するのではなく、設定されているインデックスをベースにして動的管理ビューのデータを取り出すのがポイント

– 今回使用した動的管理ビューには 使用されたインデックス の情報が記録されているため、度的管理ビューだけでは 一度も使用されていないインデックスの情報 を取得することができません。

• 再起動前にデータを取得するのが重要

– 今回使用した動的管理ビューのデータは SQL Server を最後に起動してからの累計値となっています。

– SQL Server のサービスを再起動すると初期化されてしまうため、活きたデータを取得するためには再起動前に取得する必要があります。

2012/6/9 Community Open Day 2012 16

Page 17: COD2012 T2/T3 : 実機で試す SQL Server の現状取得

2012/6/9 Community Open Day 2012 17

皆様ハンズオンお疲れ様でした。

引き続き Community Open Day 2012 を お楽しみください!!