Using PSSDiag and SQL Nexus to monitor SQL Server performance
How to use SQLDiag, SQLNexus and PAL tools to analyze performance issues in SQL Server
SQL パフォーマンス チューニング 中上級編 vol. 3 SQLDiag / SQL Nexus ツールの利用 (前編)
SQL パフォーマンス チューニング 中上級編 vol. 3 SQLDiag / SQL Nexus ツールの利用 (後編)
で紹介されていますが、SQL Server の情報を取得するためのツールとして、SQLDiag というツールがあります。
SQL Server をインストールした環境であれば SQLDiag も導入されているはずですので、このツールを使用することで、SQL Server の状態を確認するための各種情報を取得することができます。
取得できる情報はクエリ実行結果のテキスト / パフォーマンスモニター / トレースファイル等、多岐にわたるのですが、情報を可視化するツールとして、SQLNexus というツールがあります。
これらのツールを使用するとどのようなことができるかをざっくりと。
情報の取得を行うための SQLDiag ですが、XML で取得する情報を定義することができます。
SQLDiag は「C:\Program Files\Microsoft SQL Server\<バージョン>\Tools\Binn」に格納されており、一度 SQLDiag を実行すると、SQLDiag.xml と SQLDiag_Schema.XSD が作成されますので、これらを編集 / 確認することで取得項目の調整を行うことができるのですが、XML を手書きで定義を見ながらごにょごにょするのは面倒ですので、Pssdiag and Sqldiag Manager を使用するのがよいかと思います。
このツールは SQLDiag で情報をするための各種定義やスクリプトを GUI から設定できるものとなり、以下のような画面で取得項目の調整を行うことができます。
このツールを使用してスクリプトを生成すると「Build」ディレクトリに、情報の取得に必要となる各種スクリプトが生成されますので、そのスクリプトの中の「pssdiag.cmd」を実行することで情報の取得を開始することができます。
SQLProfiler のトレースを取得する場合、SQLトレースとしてサーバー側で取得が行われますので、アウトプット用のディレクトリに SQL Server のサービスアカウントのアクセス権がないと、トレースが取得されませんので、出力府ディレクトリのアクセス権は気を付けておいた方がよいかと。
また、パフォーマンスモニターやイベントログの情報も取得しますので、SQL Server 関連のアクセス権だけでなく、取得対象のサーバーの Administrators グループの権限も持っていた方がよいかと思います。
情報の取得が完了したら、取得された Output ディレクトリを SQLNexus を実行できる環境に配置して取得した情報の確認を行います。
SQLNexus の実行環境と、SQLNexus で使用する SQL Server ですが、英語版で統一しておいた方がサクッと動くかと思います。
# SQLNexus の実行前提となる ReportViewer の Hotfix も必ずインストールしておきます。インストールしておかないと SQLNexs で作成したレポートのリンクがクリックできないかと。
SQLNexus では、SQLDiag で取得した情報を、SQL Server のデータベースにインポートして、情報の取り込みを行います。
インポートが完了すると、以下のようなレポートを表示することができます。
ここから各種情報を表示することで SQL Server の状態を確認することができます。
最新版をざっと触ってみたところ「Query Execution Memory」のレポートがうまく動作しないようでした。
このレポートでは、「tbl_Query_Execution_Memory」というテーブルを使用しているのですが、
- requested_memory_mb
- granted_memory_mb
- required_memory_mb
というような項目が varchar で定義されており、これが int に変換できずにレポートが表示できないという現象が起きるようです。
表示したい場合は、以下のようなクエリで列の属性を変更するとよいかと。
ALTER TABLE [dbo].[tbl_Query_Execution_Memory] ALTER COLUMN requested_memory_mb numeric(18,6) ALTER TABLE [dbo].[tbl_Query_Execution_Memory] ALTER COLUMN granted_memory_mb numeric(18,6) ALTER TABLE [dbo].[tbl_Query_Execution_Memory] ALTER COLUMN required_memory_mb numeric(18,6)
私が提供させていただいている SQL Server 現状診断サービス でもパフォーマンスモニターや各種情報を取得するためのクエリを実行することで、SQL Server の状態を報告させていただいておりますので、SQL Server がどのような状態で使用されているかを確認されたい場合は、こちらのサービスの利用もご検討いただけると幸いです (宣伝)