kagamihogeの日記

kagamihogeの日記です。

Microsoft Tech-Ed 2008 Yokohama - 8/28(木)

Microsoft Tech・Ed Japan 2011 ホーム の 3 日目。今日は午後から 実践! JBoss Seam テクニカルセミナー -開発の現場から最新トピック- に行ったので、Tech-Ed のセッションは 1 つだけしか聞いていません。

以下、トークセッションの内容について。自分の所感・意見と発表者の発言やプレゼン資料の内容ごちゃ混ぜに書くので読みにくい点が多々あると思います。日本語崩壊してる部分も多々です。自分用の備忘録的な意味合いの強いエントリなので、そのあたりの読みにくさについてはご容赦願います。

SQL Server 2008 実践!パフォーマンス チューニング

表題の通りの話なんだが、俺は DB エンジニアというわけではないのでちょっと着いていけてない部分が結構あった。

SQL Server のパフォーマンスうんぬんに関しての俺の経験は、デッドロックの追跡に SQL Server profiler をちょっと使ったのと、複合インデックスにハマった ときに実行計画見るの大切だなーと感じた、の経験ぐらいかな。

セッションの内容は大別して 2 つ。SQL Server 2008 の新機能である、利用状況モニタとパフォーマンスデータコレクタについて。

利用状況モニタ。SQL Server 2005 以前では「現在の利用状況」と呼ばれていたものの進化版。リアルタイムの SQL Server の情報が取得できる。モニタのグラフィカルな表示機能が見所で、これによって、SQL Server 2005 以前ではクエリでデータを取得したあと Excel でレポートを作成しなければならなかった手間が大幅に削減される、とのこと。

グラフィカルに表示しているデータは、SQL Server 2005 以前でも sys.* などのビューで取れる。つまり、利用状況モニタは、select * from sys.dm_os_waiting_tasks とかを内部的に実行している、ということ。


パフォーマンスデータコレクタ。利用状況モニタは、現在のデータを収集するために使用するが、こいつは、動作状況の自動収集とグラフィカルレポートをしてくれるもの。

具体的には、ディスク使用量、過去のリソースの使用状況、高負荷クエリ Top 10、高負荷クエリの詳細状況・実行プラン、ロック待ちのステートメント確認、Waits の時間帯別状況、などのグラフィカルレポートを出してくれる。

次に、パフォーマンスチューニングの導入事例と、その現場で得られた改善のテクニックについての話。色々な話があって面白かった。たとえば、インデックス大事な話とか。ただし、インデックスつけすぎると逆効果になりかねないケースもあるので注意、とか。詳細は割愛。

SQL Server 2005 - 2008 にかけて共有ロック周りも色々改善されていて、ロック待ちで悩むお客様が減ってきて、ディスク I/O, CPU 関連で悩むお客さんが増えてきた、とも言っていた。

パフォーマンスデータコレクタの内部動作。コレクションセットで収集される情報については、オンラインブックの情報が CPT を元に書かれているのでちょっと古いことに注意だそうです。

パフォーマンスデータコレクタを起動することによるオーバーヘッド。ディスクボトルネックが発生している状況で起動&計測してみたが、おおよそ 5% の許容範囲。これがネックになるかどうかは案件次第。CPU 待ちの状況ではおおよそ 4%、と。まぁそんな極端に重くなる代物ではない、ってことですかね。

クエリ統計は 2% 弱ぐらいのオーバーヘッド。もちろん、これらのツール止めると見られなくなる情報が出てくることに注意。

カスタムデータコレクションセット。独自のデータ収集方法作成に T-SQL, Perfomance Counters Collection, SQL Trace Collector, というものが使える。GUI のツールでは足りない場合はこういうモノを使い、より詳細な情報を取得する。