Commands / Get-sqmIndexFragmentation
Get-sqmIndexFragmentation
Performance sqmSQLTool v1.8.2+ · Diagnostics
Analyzes index fragmentation across one or more databases using sys.dm_db_index_physical_stats (LIMITED mode). Returns fragmentation percentage and automatically recommends:

REORGANIZE for 5–30% fragmentation
REBUILD for >30% fragmentation

Results can be filtered by database, table, minimum fragmentation level, and minimum page count.

Execution Flow

START Get-DbaDatabase (exclude system) Apply -Database wildcard filter via -like DBs found after filter? NO log WARNING return empty YES foreach $db in $dbList Query sys.dm_db_index_physical_stats (LIMITED mode) Filter: avg_fragmentation_in_percent ≥ -MinFragmentationPercent | page_count ≥ -PageCountMin Apply -TableName wildcard filter (PowerShell -like) Per index: calculate RecommendedAction if frag < 30% → REORGANIZE | if frag ≥ 30% → REBUILD Add [PSCustomObject] to results (fragmentation + recommendation) catch per-DB: log warning (continue if -EnableException) -OutputPath specified? YES Export-Csv -Path $OutputPath NO Return [PSCustomObject[]] fragmentation data with recommendations

Parameters

ParameterTypeRequiredDefaultNotes
-SqlInstancestringOptional$env:COMPUTERNAMETarget SQL Server instance.
-SqlCredentialPSCredentialOptionalCredentials for the connection.
-DatabasestringOptional* = all user DBsDatabase name or wildcard pattern (e.g. Sales*).
-TableNamestringOptional* = all tablesTable name or wildcard pattern (e.g. Order*).
-MinFragmentationPercentintOptional5Only report indexes with fragmentation ≥ this value.
-PageCountMinintOptional0Only report indexes with at least this many pages.
-OutputPathstringOptionalOptional CSV export path.
-EnableExceptionswitchSwitch$falseRe-throw exceptions instead of warnings.

Examples

Check fragmentation in AdventureWorks, minimum 10%
Get-sqmIndexFragmentation -Database 'AdventureWorks' -MinFragmentationPercent 10
Find all fragmented indexes (>30%) on remote instance
Get-sqmIndexFragmentation -SqlInstance 'SQL01' -MinFragmentationPercent 30
Export all fragmentation data to CSV
Get-sqmIndexFragmentation -SqlInstance 'SQL01' -Database 'Sales*' -OutputPath "D:\Reports\fragmentation.csv"