sql >> Database teknologi >  >> RDS >> Sqlserver

Vedligeholdelsesjob i SQL små databaser

for vagt til at svare præcist, det afhænger meget af den type aktivitet, der udføres på DB, den anvendte gendannelsesmodel. I den simple gendannelsestilstand, som kun bruger db-fil uden transaktionslog, hvis der er hyppige sletninger og indsættelser på tabeller, skal du normalt genopbygge indekser på regelmæssig basis.

Jeg bruger til at indstille en daglig (natkørsel) opgave, der kalder sqlcmd til at udføre følgende 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



  1. Beregning af samlet tidsvarighed i MySQL

  2. Hent SQL-tabelkolonneskemaet med Datatype og Max Length i talværdi

  3. Tilbagevendende hændelser, SQL-forespørgsel

  4. Typer af indeks i oracle?