Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
In dit artikel leert u meer over instant file initialisatie (IFI) en hoe u hiermee de groei voor uw SQL Server-databasebestanden kunt versnellen.
Standaard worden gegevens en logboekbestanden geïnitialiseerd om bestaande gegevens op de schijf te overschrijven van eerder verwijderde bestanden. Gegevens- en logboekbestanden worden eerst geïnitialiseerd door de bestanden te nulen (vullen met nullen) wanneer u de volgende bewerkingen uitvoert:
- Maak een database.
- Voeg gegevens of logboekbestanden toe aan een bestaande database.
- Vergroot een bestaand bestand (inclusief autovergrotingsbewerkingen).
- Een database of bestandsgroep herstellen.
In SQL Server zorgt instant bestandsinitialisatie voor een snellere uitvoering van de eerder genoemde bestandsbewerkingen, omdat deze gebruikte schijfruimte vrijgeeft zonder die ruimte met nullen te vullen. In plaats daarvan wordt oude schijfinhoud overschreven omdat nieuwe gegevens naar de bestanden worden geschreven.
In Azure SQL Database en Azure SQL Managed Instance is directe initialisatie van bestanden alleen beschikbaar voor transactielogboekbestanden.
Directe initialisatie van bestanden en het transactielogboek
Van toepassing op: SQL Server 2022 (16.x) en latere versies, en Azure SQL Database en Azure SQL Managed Instance.
In het verleden konden transactielogboekbestanden niet onmiddellijk worden geïnitialiseerd. Vanaf SQL Server 2022 (16.x) (alle edities) en in Azure SQL Database en Azure SQL Managed Instance kunnen automatische groeigebeurtenissen voor transactielogboeken tot 64 MB profiteren van directe initialisatie van bestanden. De standaardgrootte voor automatische groei voor nieuwe databases is 64 MB. Automatische groei van transactielogboekbestanden die groter zijn dan 64 MB kan niet profiteren van onmiddellijke bestandsinitialisatie.
In tegenstelling tot instant file initialisatie voor gegevensbestanden, wat wordt voorkomen als Transparent Data Encryption (TDE) is ingeschakeld, is instant file initialisatie toegestaan voor groei van transactielogboeken op databases waarvoor TDE is ingeschakeld, vanwege de groei van het transactielogboekbestand en het feit dat het transactielogboek op seriële wijze wordt geschreven.
Direct initialiseren van bestanden wordt gebruikt voor de lagen Algemeen gebruik en Bedrijfskritiek van Azure SQL Database en Azure SQL Managed Instance, alleen om te profiteren van de groei van transactielogboekbestanden.
Directe initialisatie van bestanden kan niet worden geconfigureerd in Azure SQL Database en Azure SQL Managed Instance.
Directe initialisatie van bestanden inschakelen
Direct initialiseren van gegevensbestanden is alleen beschikbaar als het serviceaccount of de service-SID van de Database Engine-service de SE_MANAGE_VOLUME_NAME bevoegdheid krijgt. Leden van de groep Windows-beheerders hebben dit recht en kunnen deze aan andere gebruikers verlenen door ze toe te voegen aan het beveiligingsbeleid voor volumeonderhoudstaken uitvoeren . De SE_MANAGE_VOLUME_NAME bevoegdheid is niet vereist voor het direct initialiseren van groeigebeurtenissen tot 64 MB in het transactielogboek, dat is geïntroduceerd met de release van SQL Server 2022 (16.x).
U wordt aangeraden de SE_MANAGE_VOLUME_NAME bevoegdheid te verlenen aan de service-SID van de Database Engine-service. Dit zorgt ervoor dat de toekenning behouden blijft, zelfs als u het serviceaccount van de Database Engine-service wijzigt. Zie Service-SID's gebruiken om machtigingen te verlenen aan services in SQL Server voor meer informatie.
Belangrijk
Sommige functiegebruik, zoals Transparent Data Encryption (TDE), kan direct initialisatie van bestanden (IFI) voorkomen. In SQL Server 2022 (16.x) en latere versies, en in Azure SQL Database en Azure SQL Managed Instance is IFI toegestaan in het transactielogboek. Zie Instant-bestands initialisatie en het transactielogboekvoor meer informatie.
In SQL Server 2016 (13.x) en latere versies kan deze machtiging worden verleend aan de Database Engine service security identifier (SID) tijdens de installatie.
Als u de installatie via de opdrachtprompt gebruikt, voegt u het /SQLSVCINSTANTFILEINIT-argument toe, of markeert u het vakje Geef bevoegdheden voor Volumeonderhoudstaak aan SQL Server Database Engine Service in de installatiewizard.
Om een account of service-SID het Perform volume maintenance tasks beveiligingsbeleid te verlenen, volgt u deze stappen:
Open de toepassing Lokaal beveiligingsbeleid (
secpol.msc) op de computer waarop gegevensbestanden worden gemaakt.Vouw in het linkerdeelvenster Lokaal beleid uit en selecteer vervolgens Toewijzing van gebruikersrechten.
Dubbelklik in het rechterdeelvenster op Volumeonderhoudstaken uitvoeren.
Selecteer Gebruiker of groep toevoegen en voeg het Database Engine-serviceaccount of de bijbehorende service-SID toe.
Selecteer Toepassen en sluit vervolgens alle dialoogvensters lokaal beveiligingsbeleid .
Start de Database Engine-service opnieuw.
Controleer het foutenlogboek van de database-engine bij het opstarten.
Van toepassing op: SQL Server (vanaf SQL Server 2012 (11.x) SP4, SQL Server 2014 (12.x) SP2 en SQL Server 2016 (13.x) en hoger.
Als het Database Engine-serviceaccount of de bijbehorende service-SID de
SE_MANAGE_VOLUME_NAMEbevoegdheid krijgt, wordt er een informatiebericht geregistreerd dat lijkt op het volgende voorbeeld: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.Als het Database Engine-serviceaccount of de bijbehorende service-SID de
SE_MANAGE_VOLUME_NAMEbevoegdheid niet heeft gekregen, wordt er een informatiebericht geregistreerd dat lijkt op het volgende voorbeeld: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.
Opmerking
Gebruik in SQL Server de waarde van
instant_file_initialization_enabledin de dynamische beheerweergave sys.dm_server_services om te bepalen of directe bestandsinitialisatie is ingeschakeld voor uw exemplaar.
Beveiligingsoverwegingen
We raden u aan om direct bestands initialisatie in te schakelen, omdat de voordelen opwegen tegen het beveiligingsrisico.
Wanneer u directe initialisatie van bestanden gebruikt, wordt de verwijderde schijfinhoud alleen overschreven omdat er nieuwe gegevens naar de bestanden worden geschreven. Daarom is de verwijderde inhoud mogelijk toegankelijk voor een niet-geautoriseerde gebruiker, totdat andere gegevens worden weggeschreven op dat specifieke gebied van het gegevensbestand.
Hoewel het databasebestand is gekoppeld aan het exemplaar van SQL Server, wordt dit risico voor openbaarmaking van informatie verminderd door de discretionaire toegangsbeheerlijst (DACL) in het bestand. De DACL staat alleen bestandstoegang toe tot het SQL Server-serviceaccount, de bijbehorende service-SID en de lokale beheerder. Wanneer het bestand echter is losgekoppeld, is het mogelijk toegankelijk voor een gebruiker of service die niet over de SE_MANAGE_VOLUME_NAME bevoegdheid beschikt.
Er bestaan vergelijkbare overwegingen wanneer:
Er wordt een back-up van de database gemaakt. Als het back-upbestand niet is beveiligd met een geschikte DACL, kan de verwijderde inhoud beschikbaar worden voor een onbevoegde gebruiker of service.
Een bestand wordt uitgebreid met IFI. Een SQL Server-beheerder kan mogelijk toegang krijgen tot de onbewerkte pagina-inhoud en de eerder verwijderde inhoud bekijken.
De databasebestanden worden gehost in een storage area network. Het is ook mogelijk dat het opslaggebiednetwerk altijd nieuwe pagina's presenteert als vooraf gedefinieerd en dat het besturingssysteem de pagina's opnieuw initialiseert, onnodige overhead kan zijn.
Als het potentieel voor het vrijgeven van verwijderde inhoud een probleem is, moet u een of beide van de volgende acties uitvoeren:
Zorg er altijd voor dat alle losgekoppelde gegevensbestanden en back-upbestanden beperkende DACL's hebben.
Directe initialisatie van bestanden uitschakelen voor het exemplaar van SQL Server. U doet dit door
SE_MANAGE_VOLUME_NAMEin te trekken van het Database Engine-serviceaccount en de bijbehorende service-SID.Opmerking
Als u IFI uitschakelt, neemt de groeitijd voor gegevensbestanden toe en is dit alleen van invloed op bestanden die zijn gemaakt of groter worden nadat de bevoegdheid is ingetrokken.
SE_MANAGE_VOLUME_NAME bevoegdheid
De SE_MANAGE_VOLUME_NAME bevoegdheid kan worden toegewezen in Windows-beheerprogramma's, lokaal beveiligingsbeleid applet. Selecteer onder Lokaal beleidde optie Gebruikersrecht toewijzen en wijzig de eigenschap Volumeonderhoudstaken uitvoeren .
Prestatie-overwegingen
Het initialisatieproces van het databasebestand schrijft nullen naar de nieuwe regio's van het bestand onder initialisatie. De duur van dit proces is afhankelijk van de grootte van het bestandsgedeelte dat wordt geïnitialiseerd en de reactietijd en capaciteit van het opslagsysteem. Als de initialisatie lang duurt, ziet u mogelijk de volgende berichten die zijn vastgelegd in het SQL Server-foutenlogboek en het toepassingslogboek.
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.
Een lange automatische groei van een database- en/of transactielogboekbestand kan problemen met queryprestaties veroorzaken. Een bewerking die de automatische groei van een bestand vereist, houdt tijdens de duur van de bestandsgroei operatie resources vast, zoals vergrendelingen of sloten. Mogelijk ziet u lange wachttijden op latches voor toewijzingspagina's. De bewerking die een lange automatische groei vereist, toont een wachttype van PREEMPTIVE_OS_WRITEFILEGATHER.