小编Jam*_*Orr的帖子

使用 varbinary(max) 列缓慢删除

我有两个表,它们在处理之前临时保存来自 Web 应用程序的上传数据。这是在 Azure SQL 数据库上运行的。

上传文件

Id uniqueidentifier
CustomerId uniqueidentifier
FileName nvarchar(MAX) NULL
UploadDate datetime
UploadedBy nvarchar(MAX) NULL
Run Code Online (Sandbox Code Playgroud)

上传文件块

Id uniqueidentifier
Data varbinary(MAX) NULL
UploadFileId uniqueidentifier
[Index] int
Run Code Online (Sandbox Code Playgroud)

UploadFile有一个外键,级联删除到UploadFileChunk. UploadFileChunk在 上有一个非聚集索引UploadFileId。我一直在上传每个 1MB 的块。

插入和读取这些数据工作得很好,但是UploadFile在处理完数据后删除记录真的很慢。在 S0 10 DTU 测试 Azure 环境中,删除 12 条记录和大约 500 个子块总共需要 38 分钟(仅举个例子 - 它在我们的更高功率的生产环境和快速的本地机器上也表现不佳。)

我如何使它快速?

这里一个索引UploadFileChunk.FileUploadId。这是执行计划

我多次运行以下查询(来自在 SQL Azure 中查找阻塞查询),而慢速删除是在执行中,并且没有返回任何结果:

SELECT TOP 10
    r.session_id,
    r.plan_handle,
    r.sql_handle,
    r.request_id, …
Run Code Online (Sandbox Code Playgroud)

performance sql-server delete azure-sql-database query-performance

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