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以上の接続を取得している人はいますか?
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 WRITER
、LOCK MONITOR
、XE 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つのために働きます )。