小编Jos*_*ama的帖子

更改跟踪 SQL Server 2016 中的错误计划

是否有其他人在调用CHANGETABLESQL Server 2016时遇到过糟糕的计划?

我有一个使用更改跟踪来更新缓存的应用程序。应用服务器每秒获取多个表的更改。在CHANGETABLE如此频繁,通常仅返回几行调用。这在 2008 R2 和 2012 中效果很好。当我测试 2016 时,我发现 CPU 飙升,并发现该计划正在扫描更改跟踪内部表,它曾经在那里进行搜索。

如果您想在此处查看此行为,请执行复制它的步骤:

  1. 创建数据库并设置更改跟踪。
  2. 创建表:

    CREATE TABLE [dbo].[ChangeTable_Test](
    [Id] [bigint] IDENTITY(1,1) NOT NULL,
    [Name] [varchar](50) NOT NULL,
    CONSTRAINT [PK_Test_ChangeTable_Id] PRIMARY KEY CLUSTERED 
    (
         [Id] ASC
     )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    ALTER TABLE [dbo].[ChangeTable_Test] ENABLE CHANGE_TRACKING 
    GO    
    INSERT INTO ChangeTable_Test (Name) VALUES ('Test')
    GO 1000
    
    Run Code Online (Sandbox Code Playgroud)
  3. 包括实际的执行计划并运行以下命令。

    SET STATISTICS IO …
    Run Code Online (Sandbox Code Playgroud)

performance sql-server sql-server-2016

5
推荐指数
1
解决办法
1688
查看次数

标签 统计

performance ×1

sql-server ×1

sql-server-2016 ×1