0% found this document useful (0 votes)
19 views

3 ReScript Indexes Generic

This document contains SQL scripts for analyzing and optimizing indexes on database tables. It selects key information about indexes like name, columns, usage statistics, and provides scripts to rebuild, drop or disable indexes. Disabled indexes are also listed with scripts to rebuild them.

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)
19 views

3 ReScript Indexes Generic

This document contains SQL scripts for analyzing and optimizing indexes on database tables. It selects key information about indexes like name, columns, usage statistics, and provides scripts to rebuild, drop or disable indexes. Disabled indexes are also listed with scripts to rebuild them.

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

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

/*** 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_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],
'IF NOT EXISTS (SELECT TOP 1 NULL FROM sys.indexes (NOLOCK) WHERE
object_name([object_id]) = ''' + OBJECT_NAME(sysidx.[object_id]) + ''' AND [name]
= ''' + sysidx.[name] + ''')
CREATE INDEX [' + sysidx.[name] + '] ON [' + OBJECT_SCHEMA_NAME(sysidx.
[object_id]) + '].[' + OBJECT_NAME(sysidx.[object_id]) + ']
(' + idxcol.key_columns + ')' + CASE
WHEN idxcol.included_columns IS NOT
NULL
THEN '
INCLUDE
(' + idxcol.included_columns + ')'
ELSE ''
END + CASE
WHEN sysidx.filter_definition
IS NOT NULL
THEN '
WHERE
' + sysidx.filter_definition + ''
ELSE ''
END + '
WITH (MAXDOP = 64, ONLINE = OFF, DROP_EXISTING = OFF, ALLOW_PAGE_LOCKS = ON,
ALLOW_ROW_LOCKS = ON);
' AS [tsql_CREATE], 'IF EXISTS (SELECT TOP 1 NULL FROM sys.indexes (NOLOCK)
WHERE object_name([object_id]) = ''' + OBJECT_NAME(sysidx.[object_id]) + ''' AND
[name] = ''' + sysidx.[name] + ''')
DROP INDEX [' + sysidx.[name] + '] ON [' + OBJECT_SCHEMA_NAME(sysidx.[object_id])
+ '].[' + OBJECT_NAME(sysidx.[object_id]) + '];
' AS [tsql_DROP],
'IF EXISTS (SELECT TOP 1 NULL FROM sys.indexes (NOLOCK) WHERE
object_name([object_id]) = ''' + OBJECT_NAME(sysidx.[object_id]) + ''' AND [name]
= ''' + sysidx.[name] + ''')
ALTER INDEX [' + sysidx.[name] + '] ON [' + OBJECT_SCHEMA_NAME(sysidx.
[object_id]) + '].[' + OBJECT_NAME(sysidx.[object_id]) + '] REBUILD WITH (MAXDOP =
64, ONLINE = OFF, ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON);
' AS [tsql_REBUILD],
'IF EXISTS (SELECT TOP 1 NULL FROM sys.indexes (NOLOCK) WHERE
object_name([object_id]) = ''' + OBJECT_NAME(sysidx.[object_id]) + ''' AND [name]
= ''' + sysidx.[name] + ''')
ALTER INDEX [' + sysidx.[name] + '] ON [' + OBJECT_SCHEMA_NAME(sysidx.
[object_id]) + '].[' + OBJECT_NAME(sysidx.[object_id]) + '] DISABLE;
' AS [tsql_DISABLE]
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('') ), 3, 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('') ), 3,


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('') ), 3, 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('') ), 3,


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

-- Filter on Objects/Indexes created by SSI (and others); change/remove as


required
AND OBJECT_NAME(sysidx.[object_id]) NOT LIKE 'ssi%'
AND (
(sysidx.[name] LIKE 'ssi%') OR (sysidx.[name] like 'ixadder_%') OR
(sysidx.[name] like '_dta%') OR (sysidx.[name] like 'missing%')
)
and '[' + OBJECT_NAME(sysidx.[object_id])+ ']' in (@TableNames)
ORDER BY [object_name], [key_columns], [included_columns];

---

-- Disabled Indexes:
SELECT OBJECT_NAME([object_id]) [object_name], [name], [type_desc], 'DISABLED'
[is_disabled],
'IF EXISTS (SELECT TOP 1 NULL FROM sys.indexes (NOLOCK) WHERE
object_name([object_id]) = ''' + OBJECT_NAME([object_id]) + ''' AND [name] = ''' +
[name] + ''')
ALTER INDEX [' + [name] + '] ON [' + OBJECT_SCHEMA_NAME([object_id]) + '].[' +
OBJECT_NAME([object_id]) + '] REBUILD WITH (MAXDOP = 64, ONLINE = OFF,
ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON);
' AS [tsql_REBUILD],
'IF EXISTS (SELECT TOP 1 NULL FROM sys.indexes (NOLOCK) WHERE
object_name([object_id]) = ''' + OBJECT_NAME([object_id]) + ''' AND [name] = ''' +
[name] + ''')
DROP INDEX [' + [name] + '] ON [' + OBJECT_SCHEMA_NAME([object_id]) + '].[' +
OBJECT_NAME([object_id]) + '];
' AS [tsql_DROP]

FROM sys.indexes WHERE is_disabled <> 0 and '[' +


OBJECT_NAME(OBJECT_NAME([object_id]))+ ']' in (@TableNames)
ORDER BY [object_name], [name]
GO

You might also like