我一直在研究这个问题。我有一个ASPDOTNETSTOREFRONT商店。我们目前还拥有500兆的数据库上限。每个月数据库增长约200megs。我被告知要删除一些不需要的数据,除非你有问题。微软想出了以下内容。
Update customer set RTShipResponse = NULL where RTShipResponse is not null
Update customer set RTShipRequest = NULL where RTShipRequest is not null
Update customer set referrer = NULL where referrer is not null
Update orders set RTShipRequest = NULL where RTShipRequest is not null
Update orders set RTShipResponse = NULL where RTShipResponse is not null
Update orders set referrer = NULL where referrer is not null
在我运行上面的脚本之前,数据库总数是450兆。跑完之后,它跳到了730兆。在我缩小它之后,3%的空间结束了435兆。为什么我无法恢复我删除的所有空间?星期六我删除了大约175兆美元,还有一小部分被退回。
最大的表格大小是220 megs如果你将列数据加起来总计低于50 megs。似乎最大的表是我继续运行上面的脚本。运行数据库收缩不会释放任何空间。
去年数据库是700兆,我的主机备份了数据库,并使用不同的名称在另一台服务器上恢复它。一旦恢复,它显示500兆的可用空间。让DB收缩并将其全部收回。
我希望我输入足够的数据,任何帮助将不胜感激。
答案 0 :(得分:0)
重建表格以回收其中的已释放空间。
ALTER TABLE customer REBUILD;
ALTER TABLE orders REBUILD;
etc.
之后,您将能够使用DBCC SHRINKDATABASE
缩小数据库。
答案 1 :(得分:0)
在ASPDNSF中,通常是profile.dbo会增长并导致此问题。每当有人更改数据库中的页面时,profile.dbo都会添加一行。您是否在管理部分内运行每月维护?这应该清理配置文件表作为其中的一部分。但是,根据版本的不同,存在可以阻止此运行的已知错误。
使用此代码查看表格的大小
DECLARE @table table(Id int IDENTITY(1,1)
, Name varchar(256))
INSERT INTO @table
SELECT b.name + '.'+ a.name
FROM sys.tables a INNER JOIN sys.schemas b
ON a.schema_id = b.schema_id
INSERT INTO @table
SELECT '-1'
DECLARE @result table( TableName varchar(256)
, TotalRows int
, Reserved varchar(50)
, DataSize varchar(50)
, IndexSize varchar(50)
, UnusedSize varchar(50))
DECLARE @temp varchar(256)
DECLARE @index int
SET @index = 1
WHILE 1=1
BEGIN
SELECT @temp = Name
FROM @table
WHERE Id = @index
IF @temp = '-1'
BREAK
INSERT @result( TableName
, TotalRows
, Reserved
, DataSize
, IndexSize
, UnusedSize)
EXEC sp_spaceused @temp
SET @index = @index + 1
END
SELECT c.name+'.'+b.name as [table]
, a.*
FROM @result a
INNER JOIN sys.tables b
ON a.TableName = b.name
INNER JOIN sys.schemas c
ON b.schema_id = c.schema_id
ORDER BY TotalRows DESC
通常这会清除个人资料表
delete top(50000) from dbo.Profile where UpdatedOn < '2014-05-01'
delete top(50000) from dbo.Profile where UpdatedOn < '2014-05-01'
delete top(50000) from dbo.Profile where UpdatedOn < '2014-05-01'
delete top(50000) from dbo.Profile where UpdatedOn < '2014-05-01'
delete top(50000) from dbo.Profile where UpdatedOn < '2015-05-01'
您可以将其更改为您喜欢的内容。运行每月maint的每个部分的单个SQL在存储过程dbo.aspdnsf_MonthlyMaintenence中
我们的个人资料表曾经95gig!