web-dev-qa-db-ja.com

「.net sqlclientデータプロバイダー」の背後にあるアプリケーションを見つける

SQL Serverでさまざまな接続を開いているアプリケーションを見つけようとしています。すべて ".net sqlclientデータプロバイダー"という名前です。

システムモニターからマシン名を取得しました。
_netstat -a -b -o | Find "SQLServer"_を使用するクライアントで、PID 4 (ntoskrnl) ...を使用して4つの接続がすべて見つかりました。これはWindowsであり、MS SQLサーバーです。

「SQLサーバープロファイラーのトレースプロセス」により、Management Studioがクラッシュします。

それで、アプリケーションを1つずつ強制終了する前に、この接続を追跡する方法を知っていますか?

宜しくお願いします;
エゼック

5
Ezeq

sp_who2(MSDN) は常に適切な開始点であり、sys.processesテーブルまたはsys.dm_exec_connections(MSDN) DMVをクエリできます。

あるいは、 Adam Machanic'ssp_WhoIsActiveのようなものは、問題のあるプロセスとクエリを見つけるのに役立ちます。

SQL Serverで探しているものが直接見つからない場合は、ホスト名/ IPアドレスやログイン名など、原因を突き止めるのに役立つ情報を見つけることができます。

DMV/sys.processesにクエリを実行するためのサンプルコード(さらに実行する場合は、このコードを選択する必要があります):

Select spid,hostname,hostprocess,program_name,nt_username, blocked, waittime, waittype, loginame,cmd,spid,waittype,waittime,lastwaittype,cpu,physical_io,memusage,login_time,last_batch,open_tran,status,net_address, t.text 
from sys.sysprocesses sp 
--JOIN sys.dm_exec_connections con ON con.session_id = sp.sid
CROSS APPLY( select text from sys.dm_exec_sql_text(sp.sql_handle))t 
--where hostname
order by sp.spid
4
Ian_H

SQL Serverプロファイラーイベントの列「ClientProcessID」には、それらのクエリに対してその値を取得し、同じIDのタスクマネージャー->プロセスの詳細->プロセスと照合します。これにより、実際のアプリケーション名を取得できます。

2
user164767

ロギングモニターを使用しており、アプリ開発者に、ここでのアプローチを使用してアプリケーション接続文字列のプロパティを更新するように依頼しています。

https://msdn.Microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring(v = vs.110).aspx

基本的には、ConnectionStringの「App」または「Application Name」キーワード。

2
JuddGledhill