tsql – 为什么我的Azure SQL数据库删除查询性能如此之慢?
发布时间:2020-12-12 07:25:35 所属栏目:MsSql教程 来源:网络整理
导读:我有一个大约9GB的Azure Sql数据库.它提供一个Web应用程序,每小时处理大约135K请求.大多数数据都是短暂的,它会在几分钟到五天内存放在数据库中并被删除.每天大约10GB通过数据库移动. 我试图在表上运行删除查询,从350,000条记录中删除约250,000条记录.大约10%
我有一个大约9GB的Azure Sql数据库.它提供一个Web应用程序,每小时处理大约135K请求.大多数数据都是短暂的,它会在几分钟到五天内存放在数据库中并被删除.每天大约10GB通过数据库移动.
我试图在表上运行删除查询,从350,000条记录中删除约250,000条记录.大约10%的记录有一个或两个nvarchar(max)值足够大,可以存储在LOB存储中. 在周末,我试图一次删除它们.它在我取消查询之前运行了四个小时,然后它又回来了8个小时 – 糟糕的举动.我真的没想到它会那么糟糕. 然后我尝试了另一种方法.这个批处理在晚上运行,当时Web应用程序每小时处理大约100K请求. tblJobs Id字段是唯一标识符,它是主键. insert @tableIds select Id from dbo.tblJobs with(nolock) where (datediff(day,SchedDate,getDate()) > 60) or (datediff(day,ModifiedDate,getDate()) > 3 and ToBeRemoved = 1) set @maintLogStr = 'uspMaintenance [tblJobs] Obsolete J records count @tableIds: ' + convert(nvarchar(12),(select count(1) from @tableIds)) insert dbo.admin_MaintenanceLog(LogEntry) values(@maintLogStr) set @maintLogId = newid() set @maintLogStr = 'uspMaintenance [tblJobs] Obsolete J records beginning loop...' insert dbo.admin_MaintenanceLog(Id,LogEntry) values(@maintLogId,@maintLogStr) while exists(select * from @tableIds) begin delete @tableIdsTmp begin transaction insert @tableIdsTmp select top 1000 id from @tableIds delete p from @tableIdsTmp i join dbo.tblJobs p on i.id = p.Id delete x from @tableIdsTmp t join @tableIds x on t.id = x.id set @maintLogStr = 'uspMaintenance [tblJobs] Obsolete J records remaining count @tableIds: ' + convert(nvarchar(12),(select count(1) from @tableIds)) update dbo.admin_MaintenanceLog set LogEntry = @maintLogStr,RecordCreated = getdate() where Id = @maintLogId commit transaction if @dowaits = 1 WAITFOR DELAY '00:00:01.000' end SchedDate,ModifiedDate和ToBeRemoved没有编入索引,因此在@tableIds中收集ID大约需要3分钟 – 不错. 然后从日志条目中花费1小时55分钟从tblJobs中删除11,000条记录,此时从远程计算机调用的作业超时. 为什么需要这么长时间?我该怎么做才能加快速度? 解决方法IT取决于数据库的DTU(性能层).在查询执行期间检查数据库的资源消耗,以查看是否达到了任何资源限制.此外,将来在发出删除时将查询分解为多个事务.这有助于您的事务必须回滚(例如升级到SQL DB)或从您的端连接到db的瞬态网络故障(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- SqlServer索引及优化详解
- SQL Server 合并DataTable并排除重复数据的通用用法
- sql-server – 如何在脚本中设置SQL Server脚本的超时?
- SQL Server 多表查询功能实例
- 安装SQLSERVER2000时出现以前的某个程序安装已在安装计算机
- sqlserver生成表结构文档的方法
- redhat下apache+php+mysql+imap+ldap+jdk+tomcat的安装
- 数据库支持i18n for java web-app
- SQL Server 外链接操作小结 inner join left join righ
- 各种主流 SQLServer 迁移到 MySQL 工具对比