Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
I den här artikeln får du lära dig mer om snabb filinitiering (IFI) och hur du gör det för att påskynda tillväxten för dina SQL Server-databasfiler.
Som standard initieras data och loggfiler för att skriva över befintliga data som finns kvar på disken från tidigare borttagna filer. Data och loggfiler initieras först genom att filerna nollställs (fylls med nollor) när du utför följande åtgärder:
- Skapa en databas.
- Lägg till data eller loggfiler i en befintlig databas.
- Öka storleken på en befintlig fil (inklusive autogrow-åtgärder).
- Återställa en databas eller filgrupp.
I SQL Server möjliggör omedelbar filinitiering snabbare körning av tidigare nämnda filåtgärder, eftersom det frigör använt diskutrymme utan att fylla det utrymmet med nollor. I stället skrivs gammalt diskinnehåll över när nya data skrivs till filerna.
I Azure SQL Database och Azure SQL Managed Instance är omedelbar filinitiering endast tillgänglig för transaktionsloggfiler.
Omedelbar filinitiering och transaktionsloggen
Gäller för: SQL Server 2022 (16.x) och senare versioner samt Azure SQL Database och Azure SQL Managed Instance.
Tidigare kunde inte transaktionsloggfiler initieras omedelbart. Från och med SQL Server 2022 (16.x) (alla utgåvor) och i Azure SQL Database och Azure SQL Managed Instance kan händelser av automatisk tillväxt av transaktionsloggen upp till 64 MB dra nytta av omedelbar filinitiering. Standardökningen för automatisk tillväxt för nya databaser är 64 MB. Transaktionsloggfilsautotillväxthändelser större än 64 MB kan inte dra nytta av omedelbar filinitiering.
Till skillnad från omedelbar filinitiering för datafiler, vilket förhindras om transparent datakryptering (TDE) är aktiverat, tillåts omedelbar filinitiering för transaktionsloggtillväxt på databaser som har TDE aktiverat, på grund av hur transaktionsloggfilen växer och det faktum att transaktionsloggen skrivs in på ett seriellt sätt.
Omedelbar filinitiering används för nivåerna Generell användning och Affärskritisk i Azure SQL Database och Azure SQL Managed Instance, bara för att gynna tillväxten av transaktionsloggfiler.
Initiering av direktfiler kan inte konfigureras i Azure SQL Database och Azure SQL Managed Instance.
Aktivera omedelbar filinitiering
Omedelbar filinitiering av datafiler är endast tillgänglig om antingen tjänstkontot eller tjänst-SID för database engine-tjänsten beviljas behörigheten SE_MANAGE_VOLUME_NAME . Medlemmar i gruppen Windows-administratörer har den här rättigheten och kan bevilja den till andra användare genom att lägga till dem i säkerhetsprincipen Utför volymunderhållsuppgifter . Behörigheten SE_MANAGE_VOLUME_NAME krävs inte för omedelbar filinitiering av tillväxthändelser upp till 64 MB i transaktionsloggen, som introducerades med versionen av SQL Server 2022 (16.x).
Vi rekommenderar att du beviljar SE_MANAGE_VOLUME_NAME behörigheten till tjänst-SID för databasmotortjänsten. Detta säkerställer att beviljandet kvarstår även om du ändrar tjänstkontot för database engine-tjänsten. Mer information finns i Använda tjänst-SID:er för att bevilja behörigheter till tjänster i SQL Server.
Viktigt!
Viss funktionsanvändning, till exempel Transparent datakryptering (TDE) kan förhindra omedelbar filinitiering (IFI). I SQL Server 2022 (16.x) och senare versioner och i Azure SQL Database och Azure SQL Managed Instance tillåts IFI i transaktionsloggen. För mer information, se Omedelbar filinitiering och transaktionsloggen.
I SQL Server 2016 (13.x) och senare versioner kan den här behörigheten beviljas till säkerhetsidentifieraren för Database Engine-tjänsten (SID) vid installationen under installationen.
Om du använder kommandotolkens installation lägger du till /SQLSVCINSTANTFILEINIT argumentet eller markerar kryssrutan Bevilja behörigheten Utför volymunderhållsaktivitet till SQL Server Database Engine Service i installationsguiden.
Så här beviljar du ett konto eller ett tjänst-SID säkerhetspolicyn Perform volume maintenance tasks:
Öppna programmet Lokal säkerhetsprincip (
secpol.msc) på datorn där datafiler ska skapas.I den vänstra rutan expanderar du Lokala principer och väljer sedan Tilldelning av användarrättigheter.
I den högra rutan dubbelklickar du på Utföra volymunderhållsuppgifter.
Välj Lägg till användare eller grupp och lägg till databasmotorns tjänstkonto eller dess tjänst-SID.
Välj Använd och stäng sedan alla dialogrutor för lokal säkerhetsprincip .
Starta om databasmotortjänsten.
Kontrollera felloggen för databasmotorn vid start.
Gäller för: SQL Server (från och med SQL Server 2012 (11.x) SP4, SQL Server 2014 (12.x) SP2 och SQL Server 2016 (13.x) och senare).
Om databasmotorns tjänstkonto eller dess tjänst-SID beviljas behörigheten
SE_MANAGE_VOLUME_NAMEloggas ett informationsmeddelande som liknar följande exempel:Database Instant File Initialization: enabled. For security and performance considerations see the topic 'Database Instant File Initialization' in SQL Server Books Online. This is an informational message only. No user action is required.Om databasmotorns tjänstkonto eller dess tjänst-SID inte har beviljats behörigheten
SE_MANAGE_VOLUME_NAMEloggas ett informationsmeddelande som liknar följande exempel:Database Instant File Initialization: disabled. For security and performance considerations see the topic 'Database Instant File Initialization' in SQL Server Books Online. This is an informational message only. No user action is required.
Anmärkning
I SQL Server använder du värdet
instant_file_initialization_enabledi den dynamiska hanteringsvyn sys.dm_server_services för att identifiera om omedelbar filinitiering är aktiverad för din instans.
Säkerhetsfrågor
Vi rekommenderar att du aktiverar omedelbar filinitiering eftersom fördelarna kan uppväga säkerhetsrisken.
När du använder omedelbar filinitiering skrivs det borttagna diskinnehållet bara över när nya data skrivs till filerna. Därför är det borttagna innehållet potentiellt tillgängligt för en obehörig part tills vissa andra data skrivs på det specifika området i datafilen.
Även om databasfilen är kopplad till instansen av SQL Server minskas den här risken för informationsutlämnande av den diskretionära åtkomstkontrollistan (DACL) i filen. DACL tillåter endast filåtkomst till SQL Server-tjänstkontot, dess tjänst-SID och den lokala administratören. Dock, när filen frikopplas, kan den potentiellt nås av en användare eller tjänst som inte har behörigheten SE_MANAGE_VOLUME_NAME.
Liknande överväganden finns när:
Databasen säkerhetskopieras. Om säkerhetskopieringsfilen inte skyddas med en lämplig DACL kan det borttagna innehållet bli tillgängligt för en obehörig användare eller tjänst.
En fil odlas med hjälp av IFI. En SQL Server-administratör kan eventuellt komma åt innehållet på råsidan och se det tidigare borttagna innehållet.
Databasfilerna finns i ett lagringsområdesnätverk. Det är också möjligt att lagringsområdesnätverket alltid presenterar nya sidor som preinitialiserade, och att låta operativsystemet initiera sidorna på nytt kan vara onödig överbelastning.
Om det är ett problem att avslöja borttaget innehåll bör du utföra en eller båda av följande åtgärder:
Se alltid till att alla frånkopplade datafiler och säkerhetskopieringsfiler har restriktiva DACL:er.
Inaktivera omedelbar filinitiering för instansen av SQL Server. Det gör du genom att återkalla
SE_MANAGE_VOLUME_NAMEfrån databasmotorns tjänstkonto och dess tjänst-SID.Anmärkning
Om du inaktiverar IFI ökar tillväxttiden för datafiler och påverkar endast filer som skapas eller ökar i storlek efter att behörigheten har återkallats.
SE_MANAGE_VOLUME_NAME behörighet
Behörigheten SE_MANAGE_VOLUME_NAME kan tilldelas i Windows Administrationsverktyg, Lokal säkerhetsprincip applet. Under Lokala principer väljer du Tilldelning av användarrätt och ändrar egenskapen Utför volymunderhållsuppgifter .
Prestandaöverväganden
Initieringsprocessen för databasfilen skriver nollor till de nya regionerna i filen under initiering. Varaktigheten för den här processen beror på storleken på fildelen som initieras och på lagringssystemets svarstid och kapacitet. Om initieringen tar lång tid kan följande meddelanden visas i SQL Server-felloggen och programloggen.
Msg 5144
Autogrow of file '%.*ls' in database '%.*ls' was cancelled by user or timed out after %d milliseconds. Use ALTER DATABASE to set a smaller FILEGROWTH value for this file or to explicitly set a new file size.
Msg 5145
Autogrow of file '%.*ls' in database '%.*ls' took %d milliseconds. Consider using ALTER DATABASE to set a smaller FILEGROWTH for this file.
En lång autogrow av en databas- och/eller transaktionsloggfil kan orsaka problem med frågeprestanda. En åtgärd som kräver autotillväxt av en fil håller kvar resurser såsom lås eller spärrar under hela processen för filens tillväxt. Du kan se långa väntetider på lås för allokeringssidor. Den operation som kräver den långsamma autogrow-proceduren visar en väntetyp av PREEMPTIVE_OS_WRITEFILEGATHER.