Francisco Tapia
fhtapia at gmail.com
Fri Sep 12 17:03:32 CDT 2008
yes, user tables... -Francisco http://sqlthis.blogspot.com | Tsql and More... On Fri, Sep 12, 2008 at 3:00 PM, Arthur Fuller <fuller.artful at gmail.com>wrote: > Thanks Francisco. I assume the tables mentioned are user tables? > > On Fri, Sep 12, 2008 at 11:39 AM, Francisco Tapia <fhtapia at gmail.com> > wrote: > > > Arthur... I have built my defrag indexes scripts for Sql 2005 following > > this > > model... that I wrote up on my blog > > > http://sqlthis.blogspot.com/2005/04/defrag-those-indexes-maintenance.html > > > > the initial simply finds the fragmented indexes... I have a much more > > complete script that I can post later today, but here is the basic > portion > > on the defrag section... in where I simply defrag... > > > > > > > > SET NOCOUNT ON > > > > DECLARE @TableName AS VARCHAR(500), > > @TableOwner AS VARCHAR(500), > > @Rows AS BIGINT, > > @aAvg AS DECIMAL(10,3), > > @SQL AS VARCHAR (1000) > > > > WHILE EXISTS(SELECT * FROM db_defrag) > > BEGIN > > SELECT TOP 1 > > @TableOwner = TableOwner, > > @TableName = TableName --TableName, > > AVG(avg_fragmentation_in_percent)aAvg, AVG(ROWS) aRows, > > , at Rows = AVG(ROWS), @aAvg = AVG([avg_fragmentation_in_percent]) > > FROM db_defrag > > GROUP BY TableOwner, TableName > > ORDER BY AVG(ROWS) DESC > > > > SET @SQL = 'BEGIN TRY ' + > > 'ALTER INDEX ALL ON ' + @TableOwner + '.[' + @TableName + '] REBUILD > > WITH(MAXDOP=2, ONLINE=ON)' > > + ' END TRY ' + > > + ' BEGIN CATCH ' > > + 'ALTER INDEX ALL ON ' + @TableOwner + '.[' + @TableName + '] REBUILD > > WITH(MAXDOP=2, ONLINE=OFF)' > > + ' END CATCH ' > > > > IF GETDATE() < '5/4/08 23:59'--CONVERT(VARCHAR(12), GETDATE(), 110) + > > ' 22:00' > > BEGIN > > PRINT 'Defragging TABLE ' + @TableName > > EXECUTE(@SQL) > > PRINT 'Clearing from db_defrag table' > > DELETE FROM db_defrag WHERE TableName = @TableName > > INSERT INTO db_defrag_complete(TableOwner, TableName, ROWS) > > VALUES(@TableOwner, @TableName, @Rows) > > SET @SQL = 'UPDATE STATISTICS ' + @TableOwner + '.' + @TableName > > EXEC(@SQL) > > END > > ELSE > > BEGIN > > PRINT 'Skipping TABLE ' + @TableName > > DELETE FROM db_defrag WHERE TableName = @TableName > > INSERT INTO db_defrag_skipped(TableOwner, TableName, ROWS, > > [avg_fragmentation_in_percent]) VALUES(@TableOwner, @TableName, @Rows, > > @aAvg) > > END > > > > END > > > > -Francisco > > http://sqlthis.blogspot.com | Tsql and More... > > > > > > On Wed, Sep 10, 2008 at 9:14 PM, Arthur Fuller <fuller.artful at gmail.com > > >wrote: > > > > > In the simple case of Northwind you are correct, but try it against > > > Adventureworks and you will see the problem. Try running these > > statements: > > > > > > > > > EXEC > > > sp_MSForeachtable ('ALTER INDEX ALL ON ' + schema_name() + '.' ? + > > 'REBUILD > > > WITH ( PAD_INDEX = OFF, SORT_IN_TEMPDB = ON, STATISTICS_NORECOMPUTE = > ON > > > )') > > > > > > EXEC > > > sp_MSForeachtable ('ALTER INDEX ALL ON ? REBUILD WITH ( PAD_INDEX = > OFF, > > > SORT_IN_TEMPDB = ON, STATISTICS_NORECOMPUTE = ON )') > > > _______________________________________________ > > > dba-SQLServer mailing list > > > dba-SQLServer at databaseadvisors.com > > > http://databaseadvisors.com/mailman/listinfo/dba-sqlserver > > > http://www.databaseadvisors.com > > > > > > > > _______________________________________________ > > dba-SQLServer mailing list > > dba-SQLServer at databaseadvisors.com > > http://databaseadvisors.com/mailman/listinfo/dba-sqlserver > > http://www.databaseadvisors.com > > > > > _______________________________________________ > dba-SQLServer mailing list > dba-SQLServer at databaseadvisors.com > http://databaseadvisors.com/mailman/listinfo/dba-sqlserver > http://www.databaseadvisors.com > >