use*_*632 1 sql-server sql-server-2014 sp-whoisactive
有一个从这里建模的 sql 代理作业,它使用 sp_whoisactive 将结果捕获到表中。99% 它工作正常,但 sql 代理作业时不时会失败并出现以下错误:
Warning: Null value is eliminated by an aggregate or other SET operation. [SQLSTATE 01003] (Message 8153) Violation of PRIMARY KEY constraint 'PK__#ADDF8B9__69B13FDC8C10EA7F'. Cannot insert duplicate key in object 'dbo.@blockers'. The duplicate key value is (623). [SQLSTATE 23000] (Error 2627) The statement has been terminated. [SQLSTATE 01000] (Error 3621) Warning: Null value is eliminated by an aggregate or other SET operation. [SQLSTATE 01003] (Message 8153) Warning: Null value is eliminated by an aggregate or other SET operation. [SQLSTATE 01003] (Message 8153). The step failed.
这是表定义
USE [Maint]
GO
/****** Object: Table [dbo].[WhoIsActive] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[WhoIsActive](
[dd hh:mm:ss.mss] [varchar](8000) NULL,
[session_id] [smallint] NOT NULL,
[sql_text] [xml] NULL,
[sql_command] [xml] NULL,
[login_name] [nvarchar](128) NOT NULL,
[wait_info] [nvarchar](4000) NULL,
[tran_log_writes] [nvarchar](4000) NULL,
[CPU] [varchar](30) NULL,
[tempdb_allocations] [varchar](30) NULL,
[tempdb_current] [varchar](30) NULL,
[blocking_session_id] [smallint] NULL,
[reads] [varchar](30) NULL,
[writes] [varchar](30) NULL,
[physical_reads] [varchar](30) NULL,
[query_plan] [xml] NULL,
[used_memory] [varchar](30) NULL,
[status] [varchar](30) NOT NULL,
[tran_start_time] [datetime] NULL,
[open_tran_count] [varchar](30) NULL,
[percent_complete] [varchar](30) NULL,
[host_name] [nvarchar](128) NULL,
[database_name] [nvarchar](128) NULL,
[program_name] [nvarchar](128) NULL,
[start_time] [datetime] NOT NULL,
[login_time] [datetime] NULL,
[request_id] [int] NULL,
[collection_time] [datetime] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
是什么导致了这个错误?
sp_whoisactive 版本 = v11.11。
您必须下载 Adam Machanicsp_whoisactive存储过程的较新版本。
最好是 11.16 或更高版本:
版本 11.16 - 2016 年 10 月 18 日(仅限 Box 版本 2005-2017。不适用于 Azure PAAS。)
- 用于识别“特殊”数据库页面(例如 GAM、SGAM)的固定算法。谢谢,罗伯特·戴维斯!
- 修复了@blockers 重复键错误
在代码中,@blockers表变量的定义改为:
...
DECLARE @blockers TABLE
(
session_id INT NOT NULL PRIMARY KEY WITH (IGNORE_DUP_KEY = ON) /*<<== HERE!*/
);
...
Run Code Online (Sandbox Code Playgroud)
然后,您可以修改现有代码。
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |