0

我有一个使用两个文件组的数据库。我们称它们为 PRIMARY 和 FG1。所有数据最初都在 PRIMARY 中,然后移到 FG1 中。这是通过将聚集索引移动到 FG1 来实现的。其他索引在没有指定文件组的情况下被删除并重新创建,但 FG1 被定义为默认值,因此它们现在有效地位于 FG1 中。

但是,PRIMARY 的文件仍然会随着时间的推移而被填满。

我怎样才能找到 PRIMARY 中保留的东西的类型,包括它的大小?
我的目标是把所有东西都交给FG1,这样PRIMARY就不会再被填满了。

4

1 回答 1

0

这是一个列出所有文件组中所有对象和所有索引的脚本:http:
//gallery.technet.microsoft.com/scriptcenter/c7483555-cc22-4f6c-b9c4-90811eb3bdb6

-- List all Objects and Indexes 
-- per Filegroup / Partition and Allocation Type 
-- including the allocated data size 
SELECT DS.name AS DataSpaceName 
  ,AU.type_desc AS AllocationDesc 
  ,AU.total_pages / 128 AS TotalSizeMB 
  ,AU.used_pages / 128 AS UsedSizeMB 
  ,AU.data_pages / 128 AS DataSizeMB 
  ,SCH.name AS SchemaName 
  ,OBJ.type_desc AS ObjectType       
  ,OBJ.name AS ObjectName 
  ,IDX.type_desc AS IndexType 
  ,IDX.name AS IndexName 
FROM sys.data_spaces AS DS 
 INNER JOIN sys.allocation_units AS AU 
     ON DS.data_space_id = AU.data_space_id 
 INNER JOIN sys.partitions AS PA 
     ON (AU.type IN (1, 3)  
         AND AU.container_id = PA.hobt_id) 
        OR 
        (AU.type = 2 
         AND AU.container_id = PA.partition_id) 
 INNER JOIN sys.objects AS OBJ 
     ON PA.object_id = OBJ.object_id 
 INNER JOIN sys.schemas AS SCH 
     ON OBJ.schema_id = SCH.schema_id 
 LEFT JOIN sys.indexes AS IDX 
     ON PA.object_id = IDX.object_id 
        AND PA.index_id = IDX.index_id 
ORDER BY DS.name 
    ,SCH.name 
    ,OBJ.name 
    ,IDX.name

感谢@Raphaël Althaus 在问题评论中提供链接。

关于我问题的第二点,我无法从 PRIMARY 中移动剩余的对象,因为它是 LOB 数据。根据 CREATE TABLE 的文档 “CREATE TABLE 中指定的任何大列数据的存储都不能随后更改。” 厄运。

于 2014-01-09T15:13:27.847 回答