Bu makalede filegroup ve data file komutlarını görmüş olacağız. Şimdi bu komutların neler olduğunu görelim.
1.Veritabanı altında filegroup’ları aşağıdaki komutu ile görebiliriz.
SELECT
fg.name AS FilegroupName,
fg.data_space_id,
fg.is_default,
fg.is_read_only,
fg.type_desc,
mf.name AS DataFileLogicalName,
mf.physical_name AS DataFilePath,
mf.size * 8 / 1024 AS SizeMB,
mf.max_size,
mf.growth * CASE WHEN mf.is_percent_growth = 1 THEN 1 ELSE 8 END / 1024 AS GrowthValue,
CASE mf.is_percent_growth
WHEN 1 THEN 'Percent'
ELSE 'MB'
END AS GrowthType
FROM
sys.filegroups fg
INNER JOIN sys.master_files mf
ON fg.data_space_id = mf.data_space_id
WHERE
mf.type_desc = 'ROWS' -- Sadece veri dosyaları (log dosyaları hariç)
AND mf.database_id = DB_ID() -- Geçerli veritabanı
ORDER BY
fg.name, mf.name;

2.Aşağıdaki komut ile ilgili veritabanındaki filegroup’ları ve data file’ları görebiliriz.
USE [FILEGROUP]
go
SELECT fg.NAME AS [File Group Name],
sdf.NAME AS [Data File Name],
physical_name AS [Data file location],
size / 128 AS [File Size in MB]
FROM sys.database_files sdf
INNER JOIN sys.filegroups fg
ON sdf.data_space_id = fg.data_space_id

3.SQL Server’da hangi tablo ve indeksin hangi filegroup altında olduğunu bulmak için aşağıdaki gibi bir T-SQL sorgusu kullanabilirsin. Bu script hem tabloları hem de onlara ait indeksleri (primary key, clustered, nonclustered vb.) ve bulundukları filegroup’ları gösterir.
SELECT
sch.name AS SchemaName,
obj.name AS TableName,
idx.name AS IndexName,
idx.type_desc AS IndexType,
fg.name AS FileGroupName
FROM
sys.indexes idx
INNER JOIN sys.objects obj ON idx.object_id = obj.object_id
INNER JOIN sys.schemas sch ON obj.schema_id = sch.schema_id
INNER JOIN sys.data_spaces ds ON idx.data_space_id = ds.data_space_id
LEFT JOIN sys.filegroups fg ON ds.data_space_id = fg.data_space_id
WHERE
obj.type = 'U' -- Sadece user tabloları
ORDER BY
fg.name, sch.name, obj.name;

4. Aşağıdaki komut hangi filegroup altında çalıştırılırsa ilgili filegroup hakkında bilgi vermektedir.
-- get filegroup files
DECLARE @FileGroupName sysname = N'FG2024';
;WITH src AS
(
SELECT FG = fg.name,
FileID = f.file_id,
LogicalName = f.name,
[Path] = f.physical_name,
FileSizeMB = f.size/128.0,
UsedSpaceMB = CONVERT(bigint, FILEPROPERTY(f.[name], 'SpaceUsed'))/128.0,
GrowthMB = CASE f.is_percent_growth WHEN 1 THEN NULL ELSE f.growth/128.0 END,
MaxSizeMB = NULLIF(f.max_size, -1)/128.0,
DriveSizeMB = vs.total_bytes/1048576.0,
DriveFreeMB = vs.available_bytes/1048576.0
FROM sys.database_files AS f
INNER JOIN sys.filegroups AS fg
ON f.data_space_id = fg.data_space_id
CROSS APPLY sys.dm_os_volume_stats(DB_ID(), f.file_id) AS vs
WHERE fg.name = COALESCE(@FileGroupName, fg.name)
)
SELECT [Filegroup] = FG, FileID, LogicalName, [Path],
FileSizeMB = CONVERT(decimal(18,2), FileSizeMB),
FreeSpaceMB = CONVERT(decimal(18,2), FileSizeMB-UsedSpaceMB),
[%] = CONVERT(decimal(5,2), 100.0*(FileSizeMB-UsedSpaceMB)/FileSizeMB),
GrowthMB = COALESCE(RTRIM(CONVERT(decimal(18,2), GrowthMB)), '% warning!'),
MaxSizeMB = CONVERT(decimal(18,2), MaxSizeMB),
DriveSizeMB = CONVERT(bigint, DriveSizeMB),
DriveFreeMB = CONVERT(bigint, DriveFreeMB),
[%] = CONVERT(decimal(5,2), 100.0*(DriveFreeMB)/DriveSizeMB)
FROM src
ORDER BY FG, LogicalName;

PRIMARY yerine SECONDARY @Filegroupname kısmına yazılırsa ilgili filegroup hakkında bilgileri görmekteyiz.
5. Aşağıdaki komut İlgili filegroup’un yüzde kaç boş olduğunu hakkında bilgi vermektedir.
SELECT
FILEGROUP_NAME(data_space_id) as FilegroupName,
SUM(size/128.0) AS CurrentSizeMB,
SUM(size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS INT)/128.0) AS FreeSpaceMB,
(
SUM(size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS INT)/128.0) / -- FreeSpaceMB
(SUM(size/128.0)) -- CurrentSizeMB
* 100 -- Convert to percentage
) AS FilegroupPercentFree,
COUNT(*) as NumberOfFilesInFilegroup
FROM sys.database_files
WHERE data_space_id <> 0
GROUP BY FILEGROUP_NAME(data_space_id);

Bu makalede FileGroup ve Data File komutlarını görmüş olduk. Başka bir makalede görüşmek dileğiyle.
“Onlar, göğün hava boşluğunda ilâhî emre boyun eğmiş bir halde uçuşan kuşlara bakıp hiç düşünmezler mi? Bunları orada tutan Allah’tan başkası değildir. Elbette bunda iman edecek bir toplum için nice deliller, işaretler vardır. .” Nahl-79