我已經設置了SQL Server擴展事件趕過去1000次失敗的特定數據庫查詢到一個環形緩衝區:在SQL Server擴展會話中捕獲傳遞的參數值?
Create Event Session [Errors] on Server
Add Event sqlserver.error_reported (
Action(
sqlos.task_time,
sqlserver.sql_text
)
Where sqlserver.database_name=N'MyDatabase'
And error_number<>5701 -- Ignore changed db context messages
)
Add target package0.ring_buffer(Set max_memory=102400)
With (
MAX_MEMORY=4096 KB,
EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY=30 SECONDS,
MAX_EVENT_SIZE=0 KB,
MEMORY_PARTITION_MODE=NONE,
TRACK_CAUSALITY=OFF,
STARTUP_STATE=ON
)
Go
我現在可以查詢這些錯誤,像這樣:
Select
xmldata = Cast(xet.target_data as xml)
Into #rbd
From sys.dm_xe_session_targets xet
Join sys.dm_xe_sessions xe ON (xe.address = xet.event_session_address)
Where xe.name='errors' and target_name='ring_buffer'
; With Errors as (
Select
e.query('.').value('(/event/@timestamp)[1]', 'datetime') as "TimeStamp",
e.query('.').value('(/event/data[@name="message"]/value)[1]', 'nvarchar(max)') as "Message",
e.query('.').value('(/event/action[@name="sql_text"]/value)[1]', 'nvarchar(max)') as "SqlText",
e.query('.').value('(/event/action[@name="task_time"]/value)[1]', 'bigint')/@@TIMETICKS as "Duration"
From #rbd
Cross Apply XMLData.nodes('/RingBufferTarget/event') as Event(e)
)
Select * from Errors
Where SqlText is not null
Drop Table #rbd
到目前爲止,一切都很好:
這已經在錯誤的塔追查詳細一個很大的幫助不會被拋到應用程序級別。
將使其更加有用什麼,不過,是如果我們能看到被傳遞到這些查詢的參數值,在SQL事件探查器的方式就可以了。所以當我們看到這樣的錯誤...
Conversion failed when converting date and/or time from character string.
這個SQL ...
(@NewValue nvarchar(10),@KeyValue int)
Update SomeTable
Set [email protected] Where [email protected]
...這將是信息知道什麼是@NewValue
和@KeyValue
參數的值分別爲。
在那裏可以找到這些信息的任何想法?
這可能/可能無法幫助:http://www.brentozar.com/archive/2013/08/what-queries-are-failing-in-my-sql-server/ – Tanner
@Tanner - 不,沒什麼有關於參數。 –
我會建議使用[SQL Server Profiler](http://msdn.microsoft.com/zh-cn/library/ms181091.aspx)。 – Brian