0% found this document useful (0 votes)
12 views4 pages

4 IndexUsage Generic

This document provides SQL statements to analyze index usage and fragmentation for tables in the TransAxle_Production database. It selects metrics like index size, fragmentation percentage, and usage statistics for each index and joins with table metadata. The results are filtered to only include indexes from specified tables and ordered by table and index name.

Uploaded by

rahul verma
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
12 views4 pages

4 IndexUsage Generic

This document provides SQL statements to analyze index usage and fragmentation for tables in the TransAxle_Production database. It selects metrics like index size, fragmentation percentage, and usage statistics for each index and joins with table metadata. The results are filtered to only include indexes from specified tables and ordered by table and index name.

Uploaded by

rahul verma
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 4

/*********************************************************/

/*** RV ***/
/*** Performance Optimization & Troubleshooting ***/
/*********************************************************/

-----------------------------------------------------------------------------------
-----------------

USE [TransAxle_Production] -- change db name


GO
declare @TableNames nvarchar(max) ---Change Company Name
set @TableNames='[CRONUS USA, Inc_$Currency],[CRONUS USA, Inc_$G_L Entry],[CRONUS
USA, Inc_$Item],[CRONUS USA, Inc_$Item Ledger Entry],[CRONUS USA, Inc_$G_L
Register],[CRONUS USA, Inc_$Item Register],[CRONUS USA, Inc_$Invt_ Posting Buffer],
[CRONUS USA, Inc_$Gen_ Journal Line],[CRONUS USA, Inc_$Item Journal Line],[CRONUS
USA, Inc_$General Ledger Setup],[CRONUS USA, Inc_$Gen_ Jnl_ Allocation],[CRONUS
USA, Inc_$Item Application Entry],[CRONUS USA, Inc_$Ledger Entry Dimension],[CRONUS
USA, Inc_$Production Order],[CRONUS USA, Inc_$Prod_ Order Line],[CRONUS USA,
Inc_$Stockkeeping Unit],[CRONUS USA, Inc_$Value Entry],[CRONUS USA, Inc_$Avg_ Cost
Adjmt_ Entry Point],[CRONUS USA, Inc_$Rounding Residual Buffer],[CRONUS USA,
Inc_$Inventory Period],[CRONUS USA, Inc_$Cost Element Buffer],[CRONUS USA, Inc_$G_L
- Item Ledger Relation],[CRONUS USA, Inc_$Item Analysis View],[CRONUS USA,
Inc_$Item Analysis View Entry],[CRONUS USA, Inc_$Adjust Cost Filter Hierarchy]'

SELECT
DB_NAME() AS [database_name],
OBJECT_SCHEMA_NAME(sysidx.[object_id]) AS [schema],
OBJECT_NAME(sysidx.[object_id]) AS [object_name],
sysidx.[name] AS [index_name],
idxcol.key_columns,
idxcol.included_columns,
sysidx.filter_definition,
--sysidx.is_disabled,
sysidx.is_primary_key,
sysidx.is_unique,
idxusg.[user_seeks],
idxusg.[last_user_seek],
idxusg.[user_scans],
idxusg.[last_user_scan],
idxusg.[user_lookups],
idxusg.[last_user_lookup],
idxusg.[user_updates],
idxusg.[last_user_update],
idxstats.record_count,
(idxstats.page_count * 8) AS [index_size_kb],
convert(int,idxstats.avg_fragmentation_in_percent) as [fragmentation_percent]
FROM sys.indexes sysidx
LEFT JOIN sys.dm_db_index_usage_stats idxusg
ON sysidx.[object_id] = idxusg.[object_id]
AND sysidx.index_id = idxusg.[index_id]
OUTER APPLY sys.dm_db_index_physical_stats(db_id(), sysidx.[object_id], sysidx.
[index_id], NULL, 'DETAILED') idxstats
JOIN ( SELECT Tab.[name] AS TableName, Ind.[name] AS IndexName,
SUBSTRING( ( SELECT ', '+AC.name

FROM sys.[tables] AS T

INNER JOIN sys.[indexes] I


ON T.[object_id] = I.[object_id]

INNER JOIN sys.[index_columns] IC

ON I.[object_id] = IC.[object_id]

AND I.[index_id] = IC.[index_id]

INNER JOIN sys.[all_columns] AC

ON T.[object_id] = AC.[object_id]

AND IC.[column_id] = AC.[column_id]

WHERE Ind.[object_id] = I.[object_id]

AND Ind.index_id = I.index_id

AND IC.is_included_column = 0

ORDER BY IC.key_ordinal FOR XML PATH('') ), 2, 8000) AS key_columns,


SUBSTRING( ( SELECT ', '+AC.name

FROM sys.[tables] AS T

INNER JOIN sys.[indexes] I

ON T.[object_id] = I.[object_id]

INNER JOIN sys.[index_columns] IC

ON I.[object_id] = IC.[object_id]

AND I.[index_id] = IC.[index_id]

INNER JOIN sys.[all_columns] AC

ON T.[object_id] = AC.[object_id]

AND IC.[column_id] = AC.[column_id]

WHERE Ind.[object_id] = I.[object_id]

AND Ind.index_id = I.index_id

AND IC.is_included_column = 1
ORDER BY IC.key_ordinal FOR XML PATH('') ), 2,
8000) AS included_columns
FROM sys.[indexes] Ind
INNER JOIN sys.[tables] AS Tab
ON Tab.[object_id] = Ind.[object_id]
INNER JOIN sys.[schemas] AS Sch
ON Sch.[schema_id] = Tab.[schema_id]
UNION
SELECT Tab.[name] AS TableName, Ind.[name] AS IndexName,
SUBSTRING( ( SELECT ', '+AC.name

FROM sys.[views] AS T

INNER JOIN sys.[indexes] I

ON T.[object_id] = I.[object_id]

INNER JOIN sys.[index_columns] IC

ON I.[object_id] = IC.[object_id]

AND I.[index_id] = IC.[index_id]

INNER JOIN sys.[all_columns] AC

ON T.[object_id] = AC.[object_id]

AND IC.[column_id] = AC.[column_id]

WHERE Ind.[object_id] = I.[object_id]

AND Ind.index_id = I.index_id

AND IC.is_included_column = 0

ORDER BY IC.key_ordinal FOR XML PATH('') ), 2, 8000) AS key_columns,


SUBSTRING( ( SELECT ', '+AC.name

FROM sys.[views] AS T

INNER JOIN sys.[indexes] I

ON T.[object_id] = I.[object_id]

INNER JOIN sys.[index_columns] IC

ON I.[object_id] = IC.[object_id]

AND I.[index_id] = IC.[index_id]


INNER JOIN sys.[all_columns] AC

ON T.[object_id] = AC.[object_id]

AND IC.[column_id] = AC.[column_id]

WHERE Ind.[object_id] = I.[object_id]

AND Ind.index_id = I.index_id

AND IC.is_included_column = 1

ORDER BY IC.key_ordinal FOR XML PATH('') ), 2,


8000) AS included_columns
FROM sys.[indexes] Ind
INNER JOIN sys.[views] AS Tab
ON Tab.[object_id] = Ind.[object_id]
INNER JOIN sys.[schemas] AS Sch
ON Sch.[schema_id] = Tab.[schema_id] ) idxcol
ON OBJECT_NAME(sysidx.[object_id]) = idxcol.TableName
AND sysidx.[name] = idxcol.IndexName
WHERE idxstats.index_level = 0 and idxstats.alloc_unit_type_desc <> 'LOB_DATA'
AND sysidx.is_disabled = 0
and '[' + OBJECT_NAME(sysidx.[object_id])+ ']' in (@TableNames)
---- Filter on unused Indexes (comment-out on demand):
--AND idxusg.[user_seeks] = 0
--AND idxusg.[user_scans] = 0
--AND idxusg.[user_lookups] = 0

ORDER BY [object_name], [index_name];


GO

You might also like