connection_id
DMVのsys.dm_exec_connections
列について混乱しています。
SELECT connection_id FROM sys.dm_exec_connections;
SSMSを使用してSQL Serverのインスタンスに接続する場合、それはone物理接続のみである必要がありますか?そして、複数のNew Query
ウィンドウは、異なるsession_id
sまたは@@SPID
sで表される異なるセッションを表しますか?
特に、上記のクエリの結果セットが、この同じサーバー接続の各セッション(および現在開いているように見えるセッション)ごとに異なるuniqueidentifier
を返すのはなぜですか?
この接続は、SQL Serverのインスタンスへのphysical接続と同じですか?
ありがとう
SSMSを使用してSQL Serverのインスタンスに接続する場合、それはone物理接続のみである必要がありますか?
まあ、「インスタンスへの接続」によって実際に何を意味するのかを最初に明確にすると役立つと思います。 SSMSの起動について言及していて、インスタンスへの接続を要求していると想定します。これが発生した場合、少なくともオブジェクトエクスプローラーが接続を確立しています。そして、最初に接続したとき、2〜4の接続/セッションを使用しているように見えます。しばらくすると、それらの接続の1つを除いてすべてがドロップしたように見えます。これらの接続は、表示する情報を収集するオブジェクトエクスプローラーのさまざまなスレッドです。また、しばらくの間接続が継続しているという動作は、接続プールが使用されていることを示しています。
「オブジェクトエクスプローラーの詳細」タブがある場合、特に下部にあるオブジェクトごとの詳細を取得するためにさまざまなオブジェクトをクリックしている場合は、別の接続を1つまたは2つ使用できます。
各connectedクエリウィンドウは、さらに別の接続になります。
「プロパティ」ウィンドウを開き(オブジェクトエクスプローラーでデータベースを右クリックし、[プロパティ]を選択して[データベースのプロパティ]ダイアログを開くなど)、これが1つまたは2つの接続になります。
IntelliSenseが有効になっている場合(デフォルト)、情報を収集して接続を切断する場合があります。
次のテストを行うことにより、これらの動作を確認できます。
次のクエリにすぐに貼り付けてヒット F5:
SELECT conn.[connection_id], sess.[program_name], txt.[text] AS [most_recent_batch],
'---' AS '---',
sess.*,
'---' AS '---',
conn.*
FROM sys.dm_exec_sessions sess
LEFT JOIN sys.dm_exec_connections conn
ON conn.[session_id] = sess.[session_id]
OUTER APPLY sys.dm_exec_sql_text(conn.[most_recent_sql_handle]) txt;
このクエリは、すべてのセッションとそれぞれの接続を示します(セッションがある場合)。また、最新のクエリバッチも表示され、その接続がどのように使用されているかを確認できます。
結果リストの一番下までスクロールすると、「program_name」の値が次の1行になっているはずです。
Microsoft SQL Server Management Studio
(Ibelieve実際には「Microsoft SQL Server Management Studio-Query」である必要がありますが、これはSSMS 17.0での動作です)
SSMSの最新バージョンを接続すると、SSMSはバックグラウンド接続を使用してインスタンスとそのデータベースからさまざまなアイテムを列挙するため、サーバーに対して複数の接続が開かれます。また、開いているクエリウィンドウごとに少なくとも1つの接続があります。
Dm_exec_connectionsの各行は、サーバーへの単一の物理接続を表します。各セッションには単一の接続があります。詳細は https://docs.Microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-exec-connections-transact-sql を参照してください。