相关疑难解决方法(0)

SQL Server 中 LOB 数据的慢速 DELETE

我有一个用于记录的表和一个用于清除DELETE 性能非常慢的旧数据的存储过程,这超出了我的理解。我正在寻找如何修改表或 DELETE 语句以在 LOB 数据上表现得相当好。或者,如果微软确认了这个问题——比如“我们已经用 SQL 服务器版本 x 解决了这个问题”,或者甚至“我们看到这性能很差,但它不是优先事项”——这也可以.

这是在 Microsoft SQL Server 2012 (SP3) 上运行的。下面基本上是我的实际表格和代码,只是稍微简化了:

CREATE TABLE [LOG_VALUE](
 [ID] [int] IDENTITY(1,1) NOT NULL,
 [VALUE] [varchar](max) NOT NULL,
 [CHECKSUM] [int] NOT NULL,
 [VALUE_LEN] [int] NOT NULL,
 CONSTRAINT [PK_LOG_REQUEST] PRIMARY KEY CLUSTERED ([ID] ASC)
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

有问题的删除是通过以下方式完成的:

WHILE (@@ROWCOUNT > 0)
  DELETE TOP (100) [LOG_VALUE]
  OUTPUT DELETED.[VALUE_LEN] INTO @DELETED_ROWS
  WHERE [ID] IN (SELECT [ID] FROM @DELETE_IDS);
Run Code Online (Sandbox Code Playgroud)

基本的存储过程流程是:

  1. 删除引用要清除的行的值
  2. 从上述日志表中不存在的 LOB 表中选择 [ID] 值,放入表变量 @DELETE_IDS
  3. 一次删除前 …

performance sql-server delete sql-server-2012 blob

8
推荐指数
1
解决办法
2099
查看次数

标签 统计

blob ×1

delete ×1

performance ×1

sql-server ×1

sql-server-2012 ×1