【问题标题】:Sql Server Shrinking temp db mdf and ndfSql Server 收缩 temp db mdf 和 ndf
【发布时间】:2019-04-08 12:21:24
【问题描述】:

所以我的问题是,即使在作业运行之后并且我正在强制将 mdf(主 tempdb 文件)缩小到大约 10mb 左右,为什么它不这样做呢? 在完成最繁重的 ETL 工作(从各种来源提取数据并为报告需求准备数据)之后,我试图运行这项工作。此特定服务器不用于报告过程。我只是好奇为什么收缩不会发生?我应该对 Temp db 进行完整备份吗?然后删除备份? 我从以前的线程和帖子在这里进行研究并构建的 Sql 工作。 Sql 服务器作业

dbcc shrinkdatabase (tempdb, 97)

-- Clean all buffers and caches
DBCC DROPCLEANBUFFERS; 
DBCC FREEPROCCACHE;
DBCC FREESYSTEMCACHE('ALL');
DBCC FREESESSIONCACHE;


DBCC SHRINKFILE (temp2,TRUNCATEONLY);
DBCC SHRINKFILE (temp3,TRUNCATEONLY);
DBCC SHRINKFILE (temp4,TRUNCATEONLY);
DBCC SHRINKFILE (temp5,TRUNCATEONLY);
DBCC SHRINKFILE (temp6,TRUNCATEONLY);
DBCC SHRINKFILE (temp7,TRUNCATEONLY);
DBCC SHRINKFILE (temp8,TRUNCATEONLY);
DBCC SHRINKFILE (templog,TRUNCATEONLY);
DBCC SHRINKFILE (tempdev,TRUNCATEONLY);



DBCC SHRINKFILE (temp2,10);
DBCC SHRINKFILE (temp3,10);
DBCC SHRINKFILE (temp4,10);
DBCC SHRINKFILE (temp5,10);
DBCC SHRINKFILE (temp6,10);
DBCC SHRINKFILE (temp7,10);
DBCC SHRINKFILE (temp8,10);
DBCC SHRINKFILE (templog,10);
DBCC SHRINKFILE (tempdev,10);
dbcc shrinkdatabase (tempdb, 10);

ALTER DATABASE tempdb MODIFY FILE (NAME = 'templog', SIZE = 10);
ALTER DATABASE tempdb MODIFY FILE (NAME = 'tempdev', SIZE = 10);
ALTER DATABASE tempdb MODIFY FILE (NAME = 'temp2', SIZE = 10);
ALTER DATABASE tempdb MODIFY FILE (NAME = 'temp3', SIZE = 10);
ALTER DATABASE tempdb MODIFY FILE (NAME = 'temp4', SIZE = 10);
ALTER DATABASE tempdb MODIFY FILE (NAME = 'temp5', SIZE = 10);
ALTER DATABASE tempdb MODIFY FILE (NAME = 'temp6', SIZE = 10);
ALTER DATABASE tempdb MODIFY FILE (NAME = 'temp7', SIZE = 10);
ALTER DATABASE tempdb MODIFY FILE (NAME = 'temp8', SIZE = 10);

【问题讨论】:

  • 我还想指出我去了 System Databases -> tempdb(右键单击 [tasks] 然后将 db 缩小到 98%。没有做任何事情。
  • 您确定没有打开的连接已经创建了临时对象吗?并且 tempdb 数据库中没有存储全局临时对象(在对象名称前使用“##”)?在后一种情况下,您可能必须在截断之前手动清理这些对象或重新启动 SQL Server 服务。
  • 那里也可能有永久对象,要么是您自上次重启后手动创建的,要么是因为它们位于 model 中而自动创建的。但是无论如何,缩小到 10 MB 有什么好处呢?对于任何工作量来说,这似乎都太小了。下次您运行 ETL 作业时,它们将需要再次增长。那么在此期间,您可以利用释放的空间做什么?
  • 再一次,如果你缩小到 20 GB,然后又增长到 50 GB,你在做什么?
  • 为什么需要“保持检查”?为总大小设置警报 > 在您的繁重 ETL 之后,比您的典型结果高出一些合理的百分比,并专注于比这种重复的、无用的收缩操作更重要的事情。

标签: sql-server tsql sql-server-2016 database-administration tempdb


【解决方案1】:

验证执行JOB后,其他事务没有被执行。显然在减少 TEMPDB 后正在执行其他事务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多