SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Visual Studio パフォーマンス プロファイラーを使用した SQL Server のスタックトレースの確認

leave a comment

先日、一時テーブルとテーブル変数のパフォーマンスについて調査をしていた際に、次の情報が見つかりました。

この中で Visual Studio の パフォーマンス プロファイラー (Performance Profiler) を使用してスタックトレース (コールスタック) を取得した内容について紹介がされていました。

最近、SQL Server のスタックトレース確認をすることが多く、次の方法を使用して確認を行っていました。

Visual Studio からの確認であればクエリを実行しながらスタックトレースを確認することができて便利そうなので、試してみました。

今回は Visual Studio を起動している環境上で起動している SQL Server を移用しています。

パフォーマンスプロファイラーは「デバッグ」または、「Alt+F2」から起動することができます。

image

ターゲットとして、SQL Server プロセスを選択し「CPU 使用率」の情報を取得するようにすることで SQL Server のスタックトレースを取得することができます。

image

スタックトレースの解決には、シンボルファイルの設定が必要となりますので、基本的な使用方法については次の情報を参照してください。

「開始」後に、SQL Server の操作をし、トレースを取得したい操作が完了したら「収集の停止」をクリックすることで情報を取得することができます。

デフォルトの設定では、取得後の情報は次のようになっていて、確認をしたい SQL Srever の情報については「ネイティブ」となっており、詳細を確認することができません。

image

これについては、Visual Studio 2019 16.5.4 C++/CLR Performance profiler does not show functions, only shows categories [Native], [External Code] and [Unwalkable] で解説が行われています。

「フィルター」の「ネイティブ コードを非表示にする」を無効にすることで、詳細な情報を確認することができるようになります。

image

今回、一時テーブルの作成についての調査を行っており SQL Server 2019 を使用した場合の挙動も確認していたのですが、一時テーブル作成時の情報としては次のような情報を確認できました。

image

SQL Server 2019 では、メモリ最適化 tempdb メタデータという機能があるのですが、一時テーブルの作成時に、メモリ最適化テーブル (Hekaton) の関数の呼び出しになっていることがこの情報から確認できます。

スレッド単位の動作や特定のイベントが発生した場合のスタックトレースの確認については、XPerf / 拡張イベントを使用したほうが情報の確認がしやすいですが、カジュアルに確認したい場合には、Visual Studio を使用すると便利そうですね。

Written by Masayuki.Ozawa

11月 14th, 2022 at 9:43 am

Posted in SQL Server

Tagged with

Leave a Reply

Share via
Copy link
Powered by Social Snap