use*_*117 10 sql-server-2008 shrink tempdb
我在 SQL 2008 上有一个 TempDB,它变得非常大(> 40gb),我想缩小它。我已经通过 Management Studio 使用了 dbcc 收缩数据库、dbcc 收缩文件和收缩命令。
我收到以下错误:
页面 1:4573184 无法移动,因为它是工作表页面。
通过运行 DBCC FREEPROCCACHE 并重新运行其中一个收缩例程,我已经能够回收一些空间使我脱离危险,但显然这并不理想,而且可能只会给我争取一点时间。
我已经运行 DBCC OpenTran 并且没有任何东西挂在那里。
我在互联网上读到的所有地方都归结为回收 SQL Server ……肯定有更好的方法……有人吗?
谢谢,
汤姆
注意:这篇文章也可能有用:
除非您能弄清楚哪个进程正在使用该工作表(并且可以安全地杀死它),否则我必须同意您的搜索已经产生的结果:循环服务器,您应该能够缩小 tempdb。
另一个问题是为#temp 表解决这个问题;不知道能不能适应工作台:
我也写过关于它的博客(同样,对于#temp 表):
http://sqlperformance.com/2014/05/t-sql-queries/dude-who-owns-that-temp-table
我怀疑工作表与快照隔离/版本存储有关,但以防万一:
另外,不要依赖DBCC OPENTRAN;
- 我已经观察到很多情况,我知道我有一个活跃的交易,但它没有出现在那里。请注意,数据库上下文很重要;事务处于活动状态的数据库不一定是 tempdb。你在这里看到什么?任何事物?
SELECT * FROM sys.dm_tran_active_transactions
WHERE name = N'worktable';
Run Code Online (Sandbox Code Playgroud)
当然,这不是永久的解决方案。您将缩小 tempdb,然后它会再次增长。每次玩这个游戏都会变得非常无聊和乏味。如果它会再次增长,在此期间您将如何处理这些可用空间?出租它然后在 tempdb 再次需要它时驱逐人们?您需要:
一些其他建议:
SHRINKDATABASE
(应该称为自动片段)或 UI。编写特定的、有针对性的SHRINKFILE
命令来影响单个文件。 归档时间: |
|
查看次数: |
22300 次 |
最近记录: |