web-dev-qa-db-ja.com

リソースを消費している上位のログイン\ユーザーを特定する

実行されたクエリで実際に高いリソースを消費している上位のデータベースユーザーを特定する方法はありますか?

1
Osama Waly

これを行うSQL Serverには何も組み込まれていません。 2002年のようにsp_who3を使用してパーティーをしたくない場合は、次の方法を使用してください。

グラブ sp_WhoIsActive

今何が起こっているのかを見たいだけなら、次のように実行してください:

EXEC dbo.sp_WhoIsActive @get_plans = 1, @get_locks = 1

長期的に使用してユーザーの状況を確認する場合は、 ここ の指示に従って、結果をテーブルに記録するように設定します。忙しいサーバーでクエリプランをここで収集することはおそらくスキップします。

これはどのように役立ちますか?これは、ログイン情報、ホスト名、およびプログラム名とともに、待機情報、tempdbの使用、ブロッキング、cpu、読み取り、書き込み、ロック、メモリ使用を返します。これにより、(テーブルに記録することを選択した場合)接続情報ごとにグループ化できます。時間の経過に伴うリソース使用量を集計します。集計は完全ではありませんが、必要なものに十分に近づく可能性があります(無料)。

あなたがそれにお金を使いたいなら、監視ツールを購入してください。 Sentry One Performance AdvisorとQuest Spotlightはどちらもかなり気の利いたものです。

お役に立てれば!

4
Erik Darling

Sp_who3は、リアルタイムでクエリを実行しているユーザーから役立つ情報を提供します。

SELECT des.session_id ,
des.status ,
des.login_name ,
des.[Host_NAME] ,
der.blocking_session_id ,
DB_NAME(der.database_id) AS database_name ,
der.command ,
des.cpu_time ,
des.reads ,
des.writes ,
dec.last_write ,
des.[program_name] ,
der.wait_type ,
der.wait_time ,
der.last_wait_type ,
der.wait_resource ,
CASE des.transaction_isolation_level
WHEN 0 THEN 'Unspecified'
WHEN 1 THEN 'ReadUncommitted'
WHEN 2 THEN 'ReadCommitted'
WHEN 3 THEN 'Repeatable'
WHEN 4 THEN 'Serializable'
WHEN 5 THEN 'Snapshot'
END AS transaction_isolation_level ,
OBJECT_NAME(dest.objectid, der.database_id) AS OBJECT_NAME ,
SUBSTRING(dest.text, der.statement_start_offset / 2,
( CASE WHEN der.statement_end_offset = -1
THEN DATALENGTH(dest.text)
ELSE der.statement_end_offset
END - der.statement_start_offset ) / 2)
AS [executing statement] ,
deqp.query_plan
FROM sys.dm_exec_sessions des
LEFT JOIN sys.dm_exec_requests der
ON des.session_id = der.session_id
LEFT JOIN sys.dm_exec_connections dec
ON des.session_id = dec.session_id
CROSS APPLY sys.dm_exec_sql_text(der.sql_handle) dest
CROSS APPLY sys.dm_exec_query_plan(der.plan_handle) deqp

また、拡張イベントを使用して、リソースを大量に消費するクエリを、ユーザー名を含めてキャプチャできます。

0
S4V1N