我们正在使用其中一个生产数据库并在另一台服务器上创建副本以用于只读目的。只读数据库位于SQL Server 2008上。一旦数据库位于新服务器上,我们希望将其优化为只读用途。
一个问题是,一些未使用的表存在大量分配的空间。我预计的另一个问题是索引的碎片化。我不确定表碎片是否是一个问题。
涉及哪些问题以及最佳解决方法是什么? SQL Server附带的存储过程是否有帮助?我尝试过运行DBCC SHRINKDATABASE,但是没有释放未使用的空间。
编辑:我用来缩小数据库的确切命令是
DBCC SHRINKDATABASE (dbname, 0)
GO
它跑了几个小时。当我使用sp_spaceused检查表空间时,没有释放任何未使用的空间。
答案 0 :(得分:1)
您可能希望考虑的一件事是将数据库的恢复模型更改为简单。如果您不打算对数据库执行任何写入活动,那么您也可以从自动截断事务日志中受益,并消除使用其他恢复模型的管理开销。如果您进行任何重大的结构更改(即索引),您始终可以执行临时备份。
您可能还希望将未使用的表放在单独的文件组中,使其远离将要访问的数据文件。也许可以考虑将未使用的表放在较低级别的磁盘存储上,以节省成本。
使用DBCC SHRINKDATABASE需要考虑的一些事项,您不能缩小到数据库的最小大小。
尝试以下列形式发出声明。
DBCC SHRINKDATABASE (DBName, TRUNCATEONLY);
干杯,约翰
答案 1 :(得分:1)
你可以做几件事:
首先 - 不要担心绝对分配的数据库大小,除非你在磁盘上运行不足。
第二 - Idera有很多很酷的SQL Server工具,其中一个工具可以解析数据库。 http://www.idera.com/Content/Show27.aspx
第三 - 删除并重新创建聚簇索引本质上也会对表进行整理 - 并且它会重新创建所有非聚簇索引(也对它们进行碎片整理)。请注意,这可能会扩展数据库的已分配大小(再次,不用担心)并花费很长时间(聚集索引重建很昂贵)。
答案 2 :(得分:0)
我认为可以从备份中重新创建它。
将tables
和indexes
放在不同的物理磁盘上总是有帮助的。当您在另一个文件组上重新创建索引时,索引将从头开始重建,因此不会被分段。
答案 3 :(得分:0)
在MSSQL Server中有一个缩小或截断数据库的工具。我想你选择数据库的属性,你会发现它。这可以在复制备份之前或之后完成。
某些复制形式也可以按照您的意愿行事。