Údržba a optimalizace SQL

Efektivita zpracování dat v databázi není závislá pouze na databázové platformě a výkonu hardwaru, ale také na dobře navržené databázové struktuře, údržbě a správném používání SQL dotazů. Stejně jako cokoli jiného i databáze svým běžným provozem stárne, proto může časem, v závislosti na množství dat, docházet k jejímu zpomalování. 

Bez údržby a optimalizace se komunikace výrazně zpomalí, dojde ke zpomalení všech programových částí, které jsou na databázi závislé a logickým důsledkem bude snížení přístupnosti celého systému. 

Údržbu a optimalizaci jsem nejdříve dělal ručně za určité období. Pro vlastní potřeby jsem si udělal různé skripty v SQL, které v naplánovaný čas prováděli údržbu (zálohy) a optimalizaci. Zálohy fungují naprosto dokonale, ale optimalizace nebyla úplně dokonalá. A script nebyl vždy úplně nezávislé od databáze. Proto jsem se rozhodl naprogramovat nebo najít nějaké univerzální řešení pro jakoukoliv databázi SQL.

Po několika hodinách hledání na internetu, jsem stále nenacházel univerzální řešení. Vypadalo to, že budu muset toto řešení naprogramovat. A potom svitlo na lepší časy. Na stránce http://ola.hallengren.com jsem našel script, který nabízí všechny moje potřebné věci.

Stáhněte si skript MaintenanceSolution.sql 

Tento skript vytvoří několik procedur na SQL serveru (standartě na databázi "master"). A tyto procedury potom můžete spouštět s různými parametry. K importu procedur do databáze je nejlepší použít software SQL Server Management Studio. 

Postup: File -> Open -> File... (otevřít soubor MaintenanceSolution.sql) -> Query -> Execute (F5)

Ukázka spuštění zálohy databáze:
kompletní popis na http://ola.hallengren.com/sql-server-backup.html

EXECUTE dbo.DatabaseBackup
@Databases = 'USER_DATABASES',
-- volba USER_DATABASES provede zálohu všech uživatelských DB, nebo zadejte jméno DB
@Directory = 'C:\Backup',
-- adresář kde budou umístěny zálohy
@BackupType = 'FULL',
-- typ zálohy FULL (plná), DIFF (diferenční), LOG (transakční logy)
@Verify = 'Y',
-- kontrola DB Y (ano), N (ne)
@Compress = 'Y',
-- komprese DB Y (ano), N (ne) Pozn.: nefunguje na Express verzích
@CheckSum = 'Y',
-- kontrolní součet Y (ano), N (ne)
@CleanupTime = 24
-- Platnost zálohy (hodiny)

Ukázka spuštění reindexace a aktualizace statistik:
kompletní popis na http://ola.hallengren.com/sql-server-index-and-statistics-maintenance.html

EXECUTE dbo.IndexOptimize
@Databases = 'USER_DATABASES',
-- volba USER_DATABASES provede zálohu všech uživatelských DB, nebo zadejte jméno DB
@FragmentationLow = NULL,
@FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationLevel1 = 5,
@FragmentationLevel2 = 30,
@UpdateStatistics = 'ALL',
@OnlyModifiedStatistics = 'Y'

Ukázka kontroly integrity databáze:
kompletní popis na http://ola.hallengren.com/sql-server-integrity-check.html

EXECUTE dbo.DatabaseIntegrityCheck
@Databases = 'USER_DATABASES',
-- volba USER_DATABASES provede zálohu všech uživatelských DB, nebo zadejte jméno DB
@CheckCommands = 'CHECKDB'

Spuštění skriptu z příkazové řádky:
sqlcmd -E -S //localhost -d master -Q
     "EXECUTE dbo.DatabaseBackup @Databases = 'USER_DATABASES',
     @Directory = 'C:\Backup', @BackupType = 'FULL'" -b

Žádné komentáře:

Okomentovat