Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Trabalhos de manutenção em pequenos bancos de dados SQL


muito vago para responder com precisão, depende muito do tipo de atividade realizada no banco de dados, do modelo de recuperação utilizado. No modo de recuperação simples, que usa apenas o arquivo db sem log de transações, se houver exclusões e inserções frequentes em tabelas, você geralmente precisa reconstruir os índices em bases regulares.

Eu uso para definir uma tarefa diária (execução noturna) que invoca o sqlcmd para executar o seguinte SQL:
--*********************************
--*** REPLACE THIS WITH DBNAME  ***
USE db_mytestcopy_of_live_production
--*********************************

GO


DECLARE @Queryresult NVARCHAR(MAX)

SET @Queryresult=''

--*********************************
--DEFRAGGING THE MOST 6 FRAGMENTED INDEXES EXCLUDING ONES WITH A FRAG UP TO 35 %
--TO TAILOR IT TO YOUR NEEDS CHANGE THE NUMBERS AFTER "SELECT TOP" AND AFTER "ss.avg_fragmentation_in_percent >"

--WITHIN THE SQL HERE BELOW
--*********************************

SELECT TOP 6
  @[email protected] + 'ALTER INDEX ' + QUOTENAME(i.name) + ' ON '
  + QUOTENAME('dbo') + '.'
  + QUOTENAME(OBJECT_NAME(i.OBJECT_ID)) + ' REBUILD;'
 FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'SAMPLED') ss
  INNER JOIN sys.indexes i ON i.OBJECT_ID = ss.OBJECT_ID AND i.index_id = ss.index_id
  INNER JOIN sys.objects o ON ss.object_id = o.object_id
WHERE ss.avg_fragmentation_in_percent > 35
AND ss.record_count > 0 
AND o.is_ms_shipped = 0 --Excludes any objects created as a part of SQL Server installation
AND ss.index_id > 0     --Excludes heap indexes
ORDER BY ss.avg_fragmentation_in_percent DESC

--*********************************
--Uncomment to see the generated command

--*********************************
--PRINT @QueryResult

EXEC sp_executesql @QueryResult