sql-server - SQL Server 存储过程不在计划缓存或 Profiler 中
问题描述
我无法确定为什么某个存储过程没有出现在计划缓存或 SQL Server Profiler 中。我正在运行 SQL Server 2014 SP2。
存储过程和类型如下所示。我发现的唯一可能有用的参考提到了 SS 2008 中的错误修复,其中在字符串函数中使用了 blob。我ntext
在类型定义中有一个 blob ( )。这可能是原因或以某种方式相关吗?如果不是,还有什么可能导致这种行为?有没有办法让存储过程缓存和/或显示在分析器中?
CREATE TYPE [dbo].[OruMessages] AS TABLE
(
[msg_status] [nchar](10) NOT NULL,
[msg_no] [char](20) NOT NULL,
[HL7_text_long] [ntext] NULL,
[HL7_text_short] [nvarchar](255) NULL,
[patient_id] [nvarchar](60) NULL,
[msh_system] [nvarchar](50) NOT NULL,
[msh_organization] [nvarchar](50) NOT NULL,
[msh_event_cd] [nchar](10) NOT NULL,
[msh_msg_type] [nchar](10) NOT NULL,
[sent_dt] [datetime] NULL,
[queued_dt] [datetime] NOT NULL
)
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[usp_HL7_SaveOruMessages]
(@messageList [dbo].[OruMessages] READONLY)
AS
BEGIN
INSERT INTO [dbo].[HL7_out_queue]
SELECT
[msg_status],
[msg_no],
[HL7_text_long],
[HL7_text_short],
[patient_id],
[msh_system],
[msh_organization],
[msh_event_cd],
[msh_msg_type],
[sent_dt],
[queued_dt]
FROM
@messageList;
END;
GO
CREATE EVENT SESSION [Capture [usp_HL7_SaveOruMessages]] executions] ON SERVER
ADD EVENT sqlserver.module_end(
ACTION(sqlserver.database_name,sqlserver.sql_text)
WHERE ([sqlserver].[database_name]=N'db' AND [sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%usp_HL7_SaveOruMessages%'))),
ADD EVENT sqlserver.module_start(
ACTION(sqlserver.database_name,sqlserver.sql_text)
WHERE ([sqlserver].[database_name]=N'db' AND [sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%usp_HL7_SaveOruMessages%'))),
ADD EVENT sqlserver.sql_batch_completed(
ACTION(sqlserver.database_name,sqlserver.sql_text)
WHERE ([sqlserver].[equal_i_sql_unicode_string]([sqlserver].[database_name],N'db') AND [sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%usp_HL7_SaveOruMessages%') )),
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.database_name,sqlserver.sql_text)
WHERE ([sqlserver].[equal_i_sql_unicode_string]([sqlserver].[database_name],N'db') AND [sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%usp_HL7_SaveOruMessages%') ))
ADD TARGET package0.event_file(SET filename=N'C:\db\Capture [usp_HL7_SaveOruMessages] executions')
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=OFF)
GO
解决方案
这是最终更改的扩展事件会话,它为我提供了来自主机的所有 RPC、批处理和模块调用,然后我能够找到有问题的存储过程。
CREATE EVENT SESSION [<MachineName>] ON SERVER
ADD EVENT sqlserver.rpc_completed(
ACTION(sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.database_name,sqlserver.sql_text)
WHERE ([sqlserver].[client_hostname]=N'<MachineName>')),
ADD EVENT sqlserver.sql_batch_completed(
ACTION(sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.database_name,sqlserver.sql_text)
WHERE ([sqlserver].[client_hostname]=N'<MachineName>')),
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.database_name,sqlserver.sql_text)
WHERE ([sqlserver].[client_hostname]=N'<MachineName>'))
ADD TARGET package0.event_file(SET filename=N'C:\ExtEvents\<MachineName>.xel',max_file_size=(5120))
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=OFF)
推荐阅读
- php - 更改 Symfony 自动装配别名的名称
- python - Discord Bot 命令不适用于 on_message
- java - 如何断开与 java akka 流服务器的 tcp 连接?
- java - 如何将数据从一个包中的类发送到另一个包中的类?
- python - 输出 csv 而不是 snappy.parquet
- istio - 为主机拆分虚拟服务是否可以使用通配符?
- windows - 如何防止从 Windows 上下文菜单打开应用程序
- reactjs - 在 React.js 中的 ApexChart 中更改 dataLables 的颜色
- java - 如何使用相同的密钥库(相同的私钥)更新证书而不再次部署到我的 java 程序
- python - 向终端发送命令