web-dev-qa-db-ja.com

sys.dm_exec_sessionsでcontext_infoが空白になることがあるのはなぜですか?

sys.dm_exec_sessionsCast(context_info as varchar(128))を使用して、context_info列から情報を取得しようとしています以下の記事:

Dynamics AX 2012のSPIDからユーザーセッションを検索Amit R. Kulkarni

ただし、一部の行では、context_info列が空です。これがなぜなのか誰か知っていますか?

データベースはDynamics AXデータベースであり、使用しているクエリは次のとおりです。

select cast(context_info as varchar(128)) as ci,* 
from sys.dm_exec_sessions 
where program_name like '%Dynamics%'

これが出力です。いくつかの列を削除する必要がありましたが、これはほとんどの見た目です。表示されている場合、セッション63および87のContext_infoは空白です。

enter image description here

3
Sanket

_CONTEXT_INFO_はアプリケーションで設定する必要があり、Dynamics AXはセッションに含まれる接続の値を設定します。 _CONTEXT_INFO_が空白の場合は、アプリケーションがプロパティを設定していないためです。

AXが特定のセッションにいくつかの接続を使用する場合、ETWトレースの_CONTEXT_INFO_の設定を次のように確認できます。

enter image description here

いくつかのテストを行ったところ、独自のODBCconnectionを作成したり、AX内からConnection()クラスを使用したりしても、_CONTEXT_INFO_が正しく設定されない状況を作成できませんでした。

一部のセッションでは_CONTEXT_INFO_が空であるという状況があるため、セッションのコンテキスト情報を設定するように構成されていないオブジェクトサーバーがどこかにあるように見えます。

結果をよく見ると、両方の空の行が同じホストプロセスIDを持ち、そのプロセスIDがcontext_infoを返す行がないことがわかります。

enter image description here

sys.dm_exec_sessionsのドキュメント によると、_Host_process_id_はクライアントアプリケーションのプロセスIDです。

セッションを開始したクライアントプログラムのプロセスID。内部セッションの場合、値はNULLです。 null可能です。

私が考えていることは、このサーバーに複数のAX環境があるか、リンクした記事に従って構成されていない複数のAOSインスタンスがあることです。

たとえば、SQL Serverに接続し、SQL Serverにクエリを実行するときに、1つのマシンにいくつかのインスタンスがあるセットアップがあります_sys.dm_exec_sessions_ _CONTEXT_INFO_は、構成していないインスタンスでは空白ですそれと、私が正しく構成したインスタンスでは空白になりません。

これらのプロセス:
enter image description here

SQL Serverのセッションに表示されます。

enter image description here

ただし、私はインスタンスの1つだけを構成したので、コンテキスト情報クエリを見ると、この結果が得られます(空白がたくさんあります)。

enter image description here

私の結論は、このレジストリ構成が適切にアクティブ化されていないインスタンスがどこかにある可能性が高いということです。

ドキュメントの CONTEXT_INFO(Transact-SQL) から:

context_infoが設定されていない場合:

  • SQL ServerではNULLを返します。
  • [Azure]では、SQLデータベースは一意のセッション固有のGUIDを返します。
0
ryanxu