首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪些因素会降低Server 2000作业的性能?

哪些因素会降低Server 2000作业的性能?
EN

Stack Overflow用户
提问于 2008-10-04 09:10:19
回答 3查看 228关注 0票数 1

我们目前正在运行一个SQL作业,每天10点对数据进行归档。但是,最终用户抱怨说,从晚上10点到12点,页面显示了一个超时错误。

这是这项工作的伪代码

代码语言:javascript
复制
while @jobArchive = 1 and @countProcecessedItem < @maxItem
     exec ArchiveItems @countProcecessedItem out
     if error occured
          set @jobArchive = 0
     delay '00:10'

ArchiveItems存储过程获取30天前创建的前100项,在另一个数据库中处理和归档它们,并删除原始表中的项,包括与其相关的其他表。最后,使用已处理项的数量设置@countProcecessedItem。ArchiveItems还创建和删除用于保存某些记录的临时表。

注:如果我提供的信息不完整,请回复,如果可能的话,我很乐意添加更多的信息。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-10-04 09:20:21

唯一不清楚的是,ArchiveItems也从数据库中删除或不删除数据。在Server中删除行是一项非常昂贵的操作,它会导致数据库上的许多锁定条件,可能会有表和数据库锁,这通常会导致超时。

如果要删除数据,您可以做的是:

  • 在相关行上设置了一个“逻辑”删除标志,并在以批方式读取数据的查询中考虑它--
  • 执行删除。我发现(在我的应用程序中)在每个事务中删除大约250行操作速度更快,所花费的时间比以

的方式发出250个delete命令花费的时间要少得多

希望这会有所帮助,但从Server归档和删除数据是一项非常艰巨的工作。

票数 1
EN

Stack Overflow用户

发布于 2008-10-04 11:23:58

当ArchiveItems进程删除100条记录时,它正在锁定表。确保索引已到位,以使delete快速运行;在此时间段内运行Profiler会话,并查看需要多长时间。如果日期字段正在进行表格扫描或索引扫描以查找记录,则可能需要在该字段上添加索引。

在最终用户端,您可以在查询中添加一个READUNCOMMITTED或NOLOCK提示;这允许在删除过程中运行查询,但可能会返回即将删除的记录。

还要考虑作业的不同时间框架;找出用户活动最少的时间,或者在维护窗口期间每月只归档一次。

票数 1
EN

Stack Overflow用户

发布于 2008-10-08 15:27:39

正如另一张海报所提到的,缓慢删除通常是由于没有合适的索引,或者一个合适的索引需要重建。

在删除过程中,通常会将锁升级为行->页->表。你减少锁定

添加行锁提示的memory)

  • Randomising

  • (但要注意,它可能会消耗更多的--被删除的行)(使锁升级更少,likely)
  • Easiest:在ArchiveItems中添加了一个简短的WAITFOR )

当someCondition开始时

删除一些行

-给其他程序一个机会.WAITFOR延迟'000:00:00.250‘

END

我不会使用NOLOCK提示,如果删除是在发生其他活动期间发生的,并且您希望保持数据的完整性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/170021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档