web-dev-qa-db-ja.com

MS SQL Server 2012の「マスター」データベースへの接続が常に30以上あるのは正常ですか?

SQL Server 2012で内部的に使用されているデータベースの1つへの非常に多くの接続が表示された理由のトラブルシューティング。

私がオンラインで見つけたクエリは私にとって役に立ちました:

 SELECT DB_NAME(sP.dbid) AS the_database
         , COUNT(sP.spid) AS total_database_connections
 FROM sys.sysprocesses sP
 GROUP BY DB_NAME(sP.dbid)
 ORDER BY 1;

ただし、問題を修正した後、独自のカスタムデータベースへの接続が通常のレベルに戻るのを見てきましたが、masterデータベースへの接続数が常に30を超えると常に表示されます。

これはSQL Server 2012では正常ですか?このクエリを実行しているときに、masterに30以上の接続を取得している人はいますか?

4
Rob V

30のシステムプロセスは前例のないものではなく、実際には通常よりも優れています。

ただし、sysprocessesは使用しないでください。これは非推奨であり、下位互換性のためにのみ存在します。ドキュメントの上部にある重要な注意事項 を参照してください 。 (データベース列のみに使用している場合は、 この最近の質問とコメント を参照してください。)

sys.dm_exec_sessions を見ている必要があります-このビューには、プロセスを識別して区別できるis_user_processという列がありますシステムプロセスから(古い<50のトリックは、SQL Serverの最新バージョンではもはや信頼できません)。

ちょうど例として、私のローカル開発マシン-何も起こっていないことを保証できる場所-には、次の行があります。

sys.sysprocesses                                    62
sys.dm_exec_sessions                                68
sys.dm_exec_sessions where is_user_process = 1      26

これら26のユーザープロセスの大部分は、ホスト上のVisual Studio Codeによって開かれた状態で保持されているインスタンス(VMゲスト上にある)への接続のみです。

他の42はLOG WRITERLOCK MONITORXE DISPATCHER、 'CHECKPOINT'などの通常のスリープ状態のバックグラウンドシステムプロセスです。これらを取り除くことができるようではありません。

ドキュメント化されていないsys.sp_who2の出力を比較することもできます。

EXEC sys.sp_who2;                       -- 64 rows in my case
EXEC sys.sp_who2 @loginame = N'active'; -- 40 rows in my case

または、 sys.dm_exec_requests で実際に実行中のプロセスに制限します。

ただし、システムでどのプロセスが実行されているかをより深く理解するには、Adam Machanicの sp_whoisactive または適切な監視ツール(免責事項: 私はそれらの1つのために働きます )。

5
Aaron Bertrand