我使用扩展事件来标识慢速查询,定义为需要超过2秒才能完成的查询,如下所示:
CREATE EVENT SESSION SlowQueries ON SERVER
ADD EVENT sqlserver.sql_statement_completed
(
ACTION
(
sqlserver.client_hostname,
sqlserver.sql_text,
sqlserver.database_id,
sqlserver.tsql_stack,
sqlserver.username
)
WHERE
(
duration > 2000000
)
)
ADD TARGET package0.asynchronous_file_target
(
SET filename='D:\SlowQueries.xel'
)
WITH
(
MAX_MEMORY=256 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
);但是,我从Server概要文件中注意到,PHP/Laravel应用程序不是直接发送语句,而是使用RPC:Completed:它们看起来像准备好的语句,在运行时接收参数。如何扩展我的SlowQueries以包括通过RPC:Completed执行的语句?我100%确信正在发生缓慢的查询,但我的事件没有报告。
发布于 2019-07-05 14:57:07
扩展事件具有已完成的rpc类:
SELECT * FROM sys.dm_xe_objects AS dxo WHERE dxo.name = 'rpc_completed';
如果需要显示所使用的参数,则可能需要尝试下列事件之一:
CREATE EVENT SESSION what_do_i_get
ON SERVER
ADD EVENT sqlserver.module_end
( SET collect_statement = ( 1 )
WHERE ( sqlserver.session_id = ( 55 ))),
ADD EVENT sqlserver.rpc_completed
( WHERE ( sqlserver.session_id = ( 55 ))),
ADD EVENT sqlserver.sp_statement_completed
( WHERE ( sqlserver.session_id = ( 55 ))),
ADD EVENT sqlserver.sql_batch_completed
( WHERE ( sqlserver.session_id = ( 55 ))),
ADD EVENT sqlserver.sql_statement_completed
( WHERE ( sqlserver.session_id = ( 55 )))
ADD TARGET package0.event_file
( SET filename = N'what_do_i_get' )
WITH ( MAX_MEMORY = 4096KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 30 SECONDS,
MAX_EVENT_SIZE = 0KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = ON,
STARTUP_STATE = OFF );
GO不过,sql_text列无助于您,您需要使用我相信的statement列,这取决于语句的执行方式。
另外,如果您使用的是sp_prepare,您可能需要小心。
请看我在这里的帖子:
https://dba.stackexchange.com/questions/242174
复制相似问题