【发布时间】:2018-01-31 10:19:10
【问题描述】:
我正在尽最大努力删除行和重建索引,但是数据库的大小增长得非常快,我看不到我的操作的效果。
这是有原因的吗?除了行删除和索引重建之外,有没有办法减小数据库的大小?
非常感谢
【问题讨论】:
标签: sql-server azure azure-sql-database
我正在尽最大努力删除行和重建索引,但是数据库的大小增长得非常快,我看不到我的操作的效果。
这是有原因的吗?除了行删除和索引重建之外,有没有办法减小数据库的大小?
非常感谢
【问题讨论】:
标签: sql-server azure azure-sql-database
查看此 Microsoft 帖子..
回收未使用的分配空间 DBCC 收缩 一旦识别出数据库以回收未使用的分配空间,请在以下命令中修改数据库的名称以收缩每个数据库的数据文件。
SQL
-- 收缩分配的数据库数据空间。
DBCC SHRINKDATABASE (N'db1')
SHRINKFILE 在 Azure SQL 上不适合我
【讨论】:
请运行以下特殊存储过程,让我们知道哪个数据库文件变大了。
sp_helpfile
如果日志文件越来越大,请运行以下语句来恢复空间日志。
DBCC SHRINKFILE (log, 0)
如果数据文件而不是日志文件的大小正在增加,请使用以下查询来了解哪些表占用的空间最多,并从那里开始调查。
select
o.name,
max(s.row_count) AS 'Rows',
sum(s.reserved_page_count) * 8.0 / (1024 * 1024) as 'GB',
(8 * 1024 * sum(s.reserved_page_count)) / (max(s.row_count)) as 'Bytes/Row'
from sys.dm_db_partition_stats s, sys.objects o
where o.object_id = s.object_id
group by o.name
having max(s.row_count) > 0
order by GB desc
以下查询还为您提供每个索引的大小。
select
o.Name,
i.Name,
max(s.row_count) AS 'Rows',
sum(s.reserved_page_count) * 8.0 / (1024 * 1024) as 'GB',
(8 * 1024* sum(s.reserved_page_count)) / max(s.row_count) as 'Bytes/Row'
from
sys.dm_db_partition_stats s,
sys.indexes i,
sys.objects o
where
s.object_id = i.object_id
and s.index_id = i.index_id
and s.index_id >0
and i.object_id = o.object_id
group by i.Name, o.Name
having SUM(s.row_count) > 0
order by GB desc
【讨论】:
这个blog post 引用了一些应对大型数据库的策略。
【讨论】: