2011-02-21

"Windows Instant File Initialization". Ett sätt att få MS SQL server att utöka filer nästan ögonblickligen...

Ett problem som kan uppstå när man har lite större databaser är att filen/filerna som databasen lagras i behöver utökas.
Om man gör detta manuellt så kan man göra det på ett servicefönster, alternativt så kan man göra det under en period när servern inte är så hårt lastad.
Om databasen däremot är ställd som "Automatically grow" så kan man få problem...

Låt oss säga att vi har en databas som är på 10GB. Det är en rätt stor databas, men inte gigantiskt stor.
Om den är sedan är inställd att växa med 10% varje gång den behöver växa såbetyder det att databasfilen kommer att växa med 1GB.
När en databas eller transaktionslogg växer så blir databasen låst undertiden utökningen sker. Själva utökningen går till så att operativsystemet utökar filern/filerna och skriver en massa nollor på disk så att alla nya datablock är nollställda i filen. Även med ett väldigt snabbt SAN så tar det ett par sekunder att skriva 1GB nollor och i databasvärlden är ett par sekunder rätt lång tid...

Så finns det nått man kan göra?
Så klart det finns.. :)
Om man har Windows server 2003 (och högre versioner) och använder MS SQL 2005 (och högre) så kan man använda funktionen "Windows Instant File Initialization" för att i princip ögonblickligen utöka och/eller skapa nya databasfiler.
Tyvärr funkar det inte för utökning av transaktionsloggarna, men Paul Randal har en rätt bra förklaring varför här

Nåväl. När är denna fantastiska funktion användbar då?
Tja, när man skall :
- Skapa en ny databas
- Utöka en befintlig databasfil till en större storlek
- Lägga till en ny databasfil till en befintlig databas
- Läsa tillbaka en databas från en full databasbackup
- Läsa tillbaka en databas från en full databasbackup för att initialisera en databas mirror.

Det finns alltså ett flertal tillfällen när denna funktion skulle vara riktigt trevlig. Det intressanta är att i princip alla dessa tillfällen är sådana när man har riktig bråttom... :)


Genom att aktivera denna funktion så kommer operativsystemet inte lägre att skriva nollor till disken efter att den initialiserat filen vilket kan ge enormt mycket snabbare restores av databaser (inte minst intressant vid disaster recovery).

Men berätta hur man gör då!!
Jaja... :)
Vad man gör är att ge behörigheten till det Windows konto som SQL Server tjänsten körs som.
Ett sätt att göra detta är att starta "Local Group Policy" editorn på servern som SQL server kör på (skriv "GPEDIT.MSC" i kör-fältet och klicka på "OK").
Därefter så klicka ned under "Computer Configuration" => "Windows Settings" => "Security Settings" => "Local Policies" => "User Rights Assignment"

Därefter högerklicka på "Perform volume maintenance tasks" => välj "Properties" och klicka på "Add User or Group".
Lägg till kontot som SQL server körs som och klicka på "OK".
Efter detta så måste man starta om SQL-tjänsten och sedan är det klart.

Inga kommentarer:

Skicka en kommentar

Related Posts Plugin for WordPress, Blogger...