社区首页 >问答首页 >提高SQL Server的删除速度问提高SQL Server的删除速度ENDatabase Administration用户提问于 2015-05-27 15:04:27回答 4查看 74.3K关注 0票数 18我们有庞大的生产数据库,其大小约为300 We。是否有任何方法来提高删除查询的性能?目前删除速度在每分钟1-10k之间,对我们来说非常慢。
performancequery-performancesql-server关注问题分享EN回答 4推荐最新Database Administration用户发布于 2015-05-27 15:20:56
如果试图删除单个语句中的大量行,则很可能正在等待日志活动。所以你可以:
确保你的日志有足够的大小,这样增长事件不会减慢你的速度。在默认情况下,日志可能从1MB开始,增长率为10%。增长事件是昂贵的,如果您记录了10 GB的删除,这不仅会破坏性能,而且还会破坏未来的性能(因为这会对VLFs造成影响)。如果要删除整个表,请使用TRUNCATE或DROP/CREATE。如果要删除大部分表,请使用SELECT INTO将要保存的数据放到另一个表中,然后使用TRUNCATE,然后将小部分移回。(或者只是删除旧表,重命名新表,重新应用约束/权限等等)。首先,通过以块形式删除数据而不是一次性删除所有数据,从而将日志记录的影响降到最低。见这篇文章。您还可以考虑暂时切换到简单的恢复,这样您只需要CHECKPOINT来清除日志,而不是进行日志备份,但是您需要确保将其设置回原来的位置,并采取新的完全备份来重新启动日志链。收藏分享票数 28ENDatabase Administration用户发布于 2015-05-27 22:15:48
有一些提示,但您使用的是哪个版本?是企业版吗?总之:
如果可以,请将事务日志移动到速度更快的磁盘。分析一下。它会使用索引来识别要删除的记录吗?如果没有,可以添加索引吗?表上有什么可以删除的索引吗?如果是,就把它们放下。对这张桌子你有外键吗?这真的可以减缓你的删除速度。如果您有企业版,瓶颈是磁盘IO (行级压缩),则可以提供一些帮助(或不提供帮助,这取决于您的数据)。你能把桌子隔开吗?本地索引和分区的删除可以更快。通过活动监视器调查瓶颈在哪里。添加详细信息,当您使用大型数据库时,没有一个有效的答案。
收藏分享票数 4ENDatabase Administration用户发布于 2015-05-27 15:19:50
您应该尝试逐块删除它们,可能会删除in循环,每次删除迭代都是它自己的事务,然后在每个循环迭代结束时清除日志。
此外,您还需要找到要在块中用作删除记录的值的数字。它需要进行彻底的测试,如果您可以首先测试UAT中的块值,那就更好了。
关于如何继续,请参考将大型删除操作分解为块
收藏分享票数 1EN查看全部 4 条回答页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持原文链接:https://dba.stackexchange.com/questions/102571
复制相关文章