gpt4 book ai didi

SQL Server : force cleanup of deallocated internal objects in tempdb to release disk space reserved for them within an opened session

转载 作者:行者123 更新时间:2023-12-03 00:44:12 26 4
gpt4 key购买 nike

我有一个大型游标基础查询,它在作业下的存储过程中运行。它整天循环地对大量市场数据进行大量计算。每次这样的迭代都会从磁盘中池化历史时间序列片段,将其加载到具有适当索引的临时表中,将它们与中间结果连接到多个转换中,并将计算输出存储到磁盘中。在每个循环结束时,我(大部分)删除或截断所有临时表,以释放 tempdb 内用户对象的页面,并为下一次迭代准备命名空间。

我的问题是,在每个周期之后,数据库引擎为查询执行创建并将它们转储到 tempdb 的所有内部对象, - 保留为它们保留的磁盘空间,即使在事务提交后被释放。当下一批新的内部对象被刷到磁盘时,它会在每个周期中累加。

它会导致永久的 tempdb 增长,所有累积的保留空间都与新的和新的释放的内部对象相关。仅当 proc 完成其周期时 session 关闭后,数据库引擎才会释放/收缩(无论如何)这些大量浪费的磁盘空间。

我可以通过减少每个作业运行的周期数来解决这个问题,只需重新启动即可。但我想要一个完整的基本决定:我需要在 session 中使用命令或任何类型的技巧来根据我的要求强制进行垃圾收集,以完全清理/杀死已释放的内部对象并释放为它们保留的 tempdb 磁盘空间。几天的谷歌搜索没有帮助。各位,帮忙!

最佳答案

我们有完全相同的问题:

  1. 每晚都会执行耗时的重新计算;
  2. 使用了很多临时表以便并行使用执行计划

为了解决这个问题,我们刚刚将进程划分为小进程,在单独的 session 中执行每个进程,但是链接起来(为了避免阻塞问题) - 当执行第一部分时,它会启动下一部分,然后在执行后,它会触发下一个。

例如(如果您有办法链接计算),您可以中断循环迭代以单独调用具有不同参数的过程。在不同的 session 中执行,当每个 session 完成时,页面将被释放。

关于SQL Server : force cleanup of deallocated internal objects in tempdb to release disk space reserved for them within an opened session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40169421/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com