この目的のためにSQLプロファイラを使用することができます。
:あなたはまた、トランザクションを監視するには、このクエリを使用することができます詳細については、チェック
thisリンク
UPDATE
トレース
、あなたのフィルタを設定して起動し、このようなSQL管理スタジオ内でそれを起動することができます
USE [master]
GO
CREATE PROCEDURE [dbo].[sp_who3]
AS
BEGIN
SET
TRANSACTION isolation level READ uncommitted;
SELECT
SPID = er.session_id,
BlkBy =
CASE
WHEN
lead_blocker = 1
THEN
- 1
ELSE
er.blocking_session_id
END
, ElapsedMS = er.total_elapsed_time , CPU = er.cpu_time , IOReads = er.logical_reads + er.reads , IOWrites = er.writes , Executions = ec.execution_count , CommandType = er.command , LastWaitType = er.last_wait_type , ObjectName = Object_schema_name(qt.objectid, dbid) + '.' + Object_name(qt.objectid, qt.dbid) , SQLStatement = Substring (qt.text, er.statement_start_offset/2,
CASE
WHEN
(
CASE
WHEN
er.statement_end_offset = - 1
THEN
Len(CONVERT(NVARCHAR(max), qt.text)) * 2
ELSE
er.statement_end_offset
END
- er.statement_start_offset/2
)
< 0
THEN
0
ELSE
CASE
WHEN
er.statement_end_offset = - 1
THEN
Len(CONVERT(NVARCHAR(max), qt.text)) * 2
ELSE
er.statement_end_offset
END
- er.statement_start_offset/2
END
) , STATUS = ses.status , [Login] = ses.login_name , Host = ses.host_name , DBName = Db_name(er.database_id) , StartTime = er.start_time , Protocol = con.net_transport , transaction_isolation =
CASE
ses.transaction_isolation_level
WHEN
0
THEN
'Unspecified'
WHEN
1
THEN
'Read Uncommitted'
WHEN
2
THEN
'Read Committed'
WHEN
3
THEN
'Repeatable'
WHEN
4
THEN
'Serializable'
WHEN
5
THEN
'Snapshot'
END
, ConnectionWrites = con.num_writes , ConnectionReads = con.num_reads , ClientAddress = con.client_net_address , Authentication = con.auth_scheme , DatetimeSnapshot = Getdate() , plan_handle = er.plan_handle
FROM
sys.dm_exec_requests er
LEFT JOIN
sys.dm_exec_sessions ses
ON ses.session_id = er.session_id
LEFT JOIN
sys.dm_exec_connections con
ON con.session_id = ses.session_id OUTER apply sys.Dm_exec_sql_text(er.sql_handle) AS qt OUTER apply (
SELECT
execution_count = Max(cp.usecounts)
FROM
sys.dm_exec_cached_plans cp
WHERE
cp.plan_handle = er.plan_handle) ec OUTER apply (
SELECT
lead_blocker = 1
FROM
master.dbo.sysprocesses sp
WHERE
sp.spid IN
(
SELECT
blocked
FROM
master.dbo.sysprocesses WITH (nolock)
WHERE
blocked != 0
)
AND sp.blocked = 0
AND sp.spid = er.session_id) lb
WHERE
er.sql_handle IS NOT NULL
AND er.session_id != @@SPID
ORDER BY
CASE
WHEN
lb.lead_blocker = 1
THEN
- 1 * 1000
ELSE
- er.blocking_session_id
END
, er.blocking_session_id DESC, er.logical_reads + er.reads DESC, er.session_id;
END
とSPを作成します。あなたはそれがあなたのユーザーがあなたもあなたの必要性にそれを編集することができていることを、実行中のすべてのトランザクションを与える
EXECが
をsp_who3使用することができます。
user_transactionはあなたのトランザクションです。さらに、sys.dm_exec_requestsを使用してSQLテキストを知ることができます – TheGameiswar
ありがとうございます。しかし、数十の "user_transaction"が存在する可能性があります。 私は、SQLを見つけるためにSPID、そして "DBCC INPUTBUFFER(XX)"を見つけることができます。しかし、SQLは複数の場所で似ている可能性があるので、私は実際にコードで指定したトランザクション名が必要です。 – Bibbs