Free Space After Moving Tables From One File Group To Another

  • Recently maintenance was done removing some tables from the original filegroup in one drive of our SQL Server 2012 Standard Edition 64bits to another created on a separate physical drive. I was expecting the full amount of data moved to the secondary filegroup to show up as unused on the primary filegroup but that doesn't seem to be the case. Do I have to do anything after the move to release that space, not to disk, but to the database as unused?

    Best regards,

    Eduardo

  • If the data (tables) were moved from living on the MDF file there is additional information stored in this file such as various metadata relating to the database as a whole.

    Here is a tidy little script I found that may be of help which will show available space per file.

    SELECT

    b.groupname AS 'File Group',

    Name,

    [Filename],

    CONVERT (Decimal(15,2),ROUND(a.Size/128.000,2))

    [Currently Allocated Space (MB)],

    CONVERT (Decimal(15,2),

    ROUND(FILEPROPERTY(a.Name,'SpaceUsed')/128.000,2)) AS [Space Used (MB)],

    CONVERT (Decimal(15,2),

    ROUND((a.Size-FILEPROPERTY(a.Name,'SpaceUsed'))/128.000,2)) AS [Available Space (MB)]

    FROM dbo.sysfiles a (NOLOCK)

    JOIN sysfilegroups b (NOLOCK) ON a.groupid = b.groupid

    ORDER BY b.groupname

    found here - http://beyondrelational.com/modules/2/blogs/104/posts/11740/quick-way-to-find-the-free-space-on-each-filegroup-within-a-database.aspx

    This script will show what objects are on each filegroup, may help identify why your space isn't completely available to the DB.

    -- 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

    found here : http://gallery.technet.microsoft.com/scriptcenter/c7483555-cc22-4f6c-b9c4-90811eb3bdb6

  • Thanks, I will check the results from your queries.

Viewing 3 posts - 1 through 2 (of 2 total)

You must be logged in to reply to this topic. Login to reply