SE の雑記

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

Process Explorer を使用して Non-yielding Scheduler を発生させる

leave a comment

Non-yielding Scheduler については、本ブログでも次の内容で取り上げています。

拡張イベントで Non-yielding の情報を取得したかったのでデバッガーを接続して操作するのが面倒だったので、Process Explorer を使用して発生させたというお話です。

Process Explorer を使用したスレッドの停止

今回は「scheduler_monitor_non_yielding_ring_buffer_recorded」と「sp_server_diagnostics_component_result」の拡張イベントを使用して情報の取得を行っています。

sp_server_diagnostics_component_result は SQLDIAG ログを取得するものとなり、取得方法については スタンドアロン環境の SQL Server インスタンスで診断ログ (SQLDIAG ログ) を取得する で投稿をしました。

これらの拡張イベントを取得するように設定しておくと、Non-yielding Scheduler が発生した場合にイベントの取得が行われます。

Non-yielding を発生させるには、SQL Server で実行中のスレッドの応答をなくすことで発生させることができます。

この挙動を発生させるために、Process Explorer を使用します。

Process Explorer で SQL Server のプロセス (sqlservr.exe) のプロパティを開いて、Threads タブで CPU 使用率の降順でソートしておきます。

image

この状態で CPU 使用率を上昇させるクエリを実行すると、実行したクエリで使用されているスレッドが CPU 使用率の上位に来ます。

image

この状態で該当のスレッドを選択して「Suspend」をクリックすることで、該当のクエリで使用されているスレッドの応答を停止させ Non-yielding の状態を発生させることができます。

image

拡張イベントでイベントが取得できたら「Resume」をクリックすることで、スレッドの応答を再開させることができます。

どのようなスレッドでも問題ないので Non-yielding Scheduler を発生させたい場合にはこのような方法が手軽かと思います。

Share

Written by Masayuki.Ozawa

9月 9th, 2024 at 11:37 pm

Posted in SQL Server

Tagged with

Leave a Reply