Korzystam z rozszerzonych zdarzeń do śledzenia instrukcji używanych przez naszą aplikację. Utworzyłem sesję, która zbierze potrzebne informacje, z tym że chciałbym również poznać rzeczywiste wartości użytych parametrów .
Wykonuję to śledzenie w środowisku nieprodukcyjnym i każda wydajność, której dotyczy śledzenie, jest akceptowalna.
Wszystkie zapytania pochodzą z Hibernacji i zostały sparametryzowane w postaci:
SELECT a, b, c From Customer where CustomerId = @P0
To jest moja konfiguracja sesji.
CREATE EVENT SESSION [TracingForStatements] ON SERVER
ADD EVENT sqlserver.sp_statement_completed (
ACTION (
sqlserver.session_id,
package0.collect_system_time,
sqlserver.transaction_id,
package0.event_sequence
)
WHERE (
sqlserver.database_id=555
)
)
ADD TARGET package0.ring_buffer(SET max_memory= 128000)
WITH (EVENT_RETENTION_MODE = NO_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 1 SECONDS)
Jak przechwycić rzeczywiste wartości parametrów użytych w przechwyconych instrukcjach? Czy to możliwe?
- Edycja (obejście): Zmiana zdarzenia na rpc_completed daje mi pełną komendę SQL (łącznie ze wszystkimi wartościami parametrów) wywołaną z Hibernacji. W innych przypadkach dobrze byłoby wiedzieć, jak uchwycić wartości parametrów, jeśli jest to możliwe.
źródło
Odpowiedzi:
Ktoś wspomniał: „Myślę, że tylko zdarzenie sqlserver.rpc_completed da ci kompletne polecenie SQL wraz z wartościami parametrów”. Przejrzyj odpowiedź poniżej:
Przechwytywanie przekazanych wartości parametrów w sesjach rozszerzonych serwera SQL
źródło