Udostępnij za pośrednictwem


Natychmiastowe inicjowanie pliku bazy danych

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

W tym artykule dowiesz się o inicjowaniu plików natychmiastowym (IFI) oraz jak je włączyć, aby przyspieszyć wzrost plików bazy danych programu SQL Server.

Domyślnie pliki danych i dziennika są inicjowane w celu zastąpienia wszystkich istniejących danych pozostawionych na dysku z poprzednio usuniętych plików. Pliki danych i dziennika są najpierw inicjowane przez zerowanie plików (wypełnianie zerami) podczas wykonywania następujących operacji:

  • Tworzenie bazy danych
  • Dodaj dane lub pliki dziennika do istniejącej bazy danych.
  • Zwiększ rozmiar istniejącego pliku (w tym operacje autogrow).
  • Przywracanie bazy danych lub grupy plików.

W programie SQL Server natychmiastowe inicjowanie plików umożliwia szybsze wykonywanie wcześniej wymienionych operacji na plikach, ponieważ odzyskuje używane miejsce na dysku bez wypełniania tego miejsca zerami. Zamiast tego stara zawartość dysku jest zastępowana, ponieważ nowe dane są zapisywane w plikach.

W usługach Azure SQL Database i Azure SQL Managed Instance natychmiastowe inicjowanie plików jest dostępne tylko dla plików dziennika transakcji.

Natychmiastowe inicjowanie pliku i dziennik transakcji

Dotyczy: SQL Server 2022 (16.x) i nowsze wersje oraz Usługi Azure SQL Database i Azure SQL Managed Instance.

W przeszłości nie można zainicjować plików dziennika transakcji natychmiast. Jednak począwszy od SQL Server 2022 (16.x) (wszystkie edycje) oraz w ramach Azure SQL Database i Azure SQL Managed Instance, zdarzenia automatycznego zwiększenia rozmiaru dziennika transakcji do 64 MB mogą korzystać z natychmiastowej inicjalizacji pliku. Domyślny przyrost rozmiaru przy automatycznym rozszerzaniu dla nowych baz danych wynosi 64 MB. Zdarzenia automatycznego zwiększania rozmiaru pliku dziennika transakcji powyżej 64 MB nie mogą korzystać z natychmiastowej inicjalizacji pliku.

W przeciwieństwie do natychmiastowej inicjalizacji plików danych, co jest blokowane, jeśli włączono funkcję Transparent Data Encryption (TDE), natychmiastowe inicjowanie plików jest dozwolone w przypadku wzrostu dziennika transakcji w bazach danych z włączoną funkcją TDE, ze względu na wzrost pliku dziennika transakcji oraz fakt, że dziennik transakcji jest zapisywany w sposób seryjny.

  • Natychmiastowe inicjowanie plików jest używane w warstwach Ogólnego przeznaczenia i Krytyczne dla biznesu usługi Azure SQL Database i Azure SQL Managed Instance tylko po to, aby zapewnić wzrost plików dziennika transakcji.

  • Natychmiastowe inicjowanie plików nie jest konfigurowalne w usługach Azure SQL Database i Azure SQL Managed Instance.

Włącz natychmiastową inicjalizację plików

Natychmiastowe inicjowanie plików danych jest dostępne tylko wtedy, gdy konto usługi lub identyfikator SID usługi silnika bazy danych ma przyznane SE_MANAGE_VOLUME_NAME uprawnienie. Członkowie grupy Administratorzy systemu Windows mają to prawo i mogą przyznać go innym użytkownikom, dodając je do zasad zabezpieczeń Wykonywanie zadań konserwacji woluminów . Uprawnienia SE_MANAGE_VOLUME_NAME nie są wymagane do natychmiastowej inicjalizacji plików podczas zdarzeń wzrostu do 64 MB w dzienniku transakcji, wprowadzonych wraz z wydaniem SQL Server 2022 (16.x).

Zalecamy przyznanie tego przywileju identyfikatorowi SID usługi aparatu bazy danych SE_MANAGE_VOLUME_NAME. Zapewnia to, że przywilej pozostanie niezależnie od tego, czy zmienisz konto usługi silnika baz danych. Aby uzyskać więcej informacji, zobacz Używanie identyfikatorów SID usługi do udzielania uprawnień do usług w programie SQL Server.

Ważne

Niektóre zastosowania funkcji, takie jak Transparent Data Encryption (TDE), mogą uniemożliwić natychmiastowe inicjowanie plików (IFI). W programie SQL Server 2022 (16.x) i nowszych wersjach oraz w usługach Azure SQL Database i Azure SQL Managed Instance funkcja IFI jest dozwolona w dzienniku transakcji. Aby uzyskać więcej informacji, zobacz Natychmiastowe inicjowanie plików i dziennik transakcji.

W SQL Server 2016 (13.x) i nowszych wersjach to uprawnienie można udzielić identyfikatorowi zabezpieczeń (SID) usługi silnika bazy danych podczas instalacji.

Jeśli używasz instalatora wiersza poleceń, dodaj /SQLSVCINSTANTFILEINIT argument lub zaznacz pole wyboru Udzielania uprawnień do wykonywania zadania konserwacji wolumenów do Usługi Aparatu Bazy Danych SQL Server w kreatorze instalacji.

Aby przyznać zasady zabezpieczeń Perform volume maintenance tasks dla konta lub identyfikatora SID usługi:

  1. Na komputerze, na którym zostaną utworzone pliki danych, otwórz aplikację Zasady zabezpieczeń lokalnych (secpol.msc).

  2. W okienku po lewej stronie rozwiń węzeł Zasady lokalne, a następnie wybierz pozycję Przypisanie praw użytkownika.

  3. W okienku po prawej stronie kliknij dwukrotnie Wykonaj zadania konserwacji woluminu.

  4. Wybierz pozycję Dodaj użytkownika lub grupę i dodaj konto usługi Aparatu bazy danych lub jego identyfikator SID usługi.

  5. Wybierz pozycję Zastosuj, a następnie zamknij wszystkie okna dialogowe Zasady zabezpieczeń lokalnych .

  6. Uruchom ponownie usługę aparatu bazy danych.

  7. Sprawdź dziennik błędów aparatu bazy danych podczas uruchamiania.

    Dotyczy: SQL Server (począwszy od programu SQL Server 2012 (11.x) SP4, PROGRAMU SQL Server 2014 (12.x) SP2 i programu SQL Server 2016 (13.x) i nowszych).

    1. Jeśli konto usługi aparatu bazy danych lub jego identyfikator SID usługi ma przyznane SE_MANAGE_VOLUME_NAME uprawnienie, zostanie zarejestrowany komunikat informacyjny, który przypomina poniższy przykład:

      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.
      
    2. Jeśli konto usługowe silnika bazy danych lub jego identyfikator SID usługi nie uzyskał uprawnienia SE_MANAGE_VOLUME_NAME, zostanie zarejestrowany komunikat informacyjny podobny do następującego przykładu:

      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.
      

    Uwaga / Notatka

    W programie SQL Server użyj wartości instant_file_initialization_enabled w widoku zarządzania dynamicznego sys.dm_server_services , aby określić, czy natychmiastowe inicjowanie plików jest włączone dla twojego wystąpienia.

Zagadnienia dotyczące zabezpieczeń

Zalecamy włączenie natychmiastowej inicjalizacji plików, ponieważ korzyści mogą przewyższać ryzyko związane z bezpieczeństwem.

W przypadku korzystania z natychmiastowej inicjalizacji plików usunięta zawartość dysku jest zastępowana tylko w przypadku zapisywania nowych danych w plikach. Z tego powodu usunięta zawartość jest potencjalnie dostępna przez nieautoryzowany podmiot, do momentu, gdy nowe dane zostaną zapisane w tym konkretnym obszarze pliku danych.

Chociaż plik bazy danych jest dołączony do instancji SQL Server, ryzyko ujawnienia informacji jest zmniejszane przez uznaniową listę kontroli dostępu (DACL) na pliku. DACL pozwala na dostęp do pliku wyłącznie kontu usługi SQL Server, jego identyfikatorowi SID usługi, oraz lokalnemu administratorowi. Jednak po odłączeniu pliku jest on potencjalnie dostępny dla użytkownika lub usługi, który nie ma SE_MANAGE_VOLUME_NAME uprawnień.

Podobne zagadnienia istnieją, gdy:

  • Kopia zapasowa bazy danych jest tworzona. Jeśli plik kopii zapasowej nie jest chroniony przy użyciu odpowiedniej listy DACL, usunięta zawartość może stać się dostępna dla nieautoryzowanego użytkownika lub usługi.

  • Plik jest rozwijany przy użyciu ifi. Administrator programu SQL Server może potencjalnie uzyskać dostęp do nieprzetworzonej zawartości strony i wyświetlić wcześniej usuniętą zawartość.

  • Pliki bazy danych są hostowane w sieci magazynowania. Istnieje również możliwość, że sieć obszaru przechowywania danych zawsze prezentuje nowe strony jako wstępnie zainicjowane, a ponowne ich inicjowanie przez system operacyjny może być niepotrzebne.

Jeśli potencjalne ujawnienie usuniętej zawartości jest problemem, należy wykonać jedną lub obie następujące czynności:

  • Zawsze upewnij się, że wszystkie odłączone pliki danych i pliki kopii zapasowej mają restrykcyjne listy kontroli dostępu.

  • Wyłącz szybkie inicjowanie plików w wystąpieniu programu SQL Server. W tym celu odwołaj SE_MANAGE_VOLUME_NAME z konta usługi silnika bazy danych i jego identyfikatora SID usługi.

    Uwaga / Notatka

    Wyłączenie funkcji IFI zwiększa czas wzrostu plików danych i wpływa tylko na pliki, które są tworzone lub zwiększane po odwołaniu uprawnień.

uprawnienie SE_MANAGE_VOLUME_NAME

Uprawnienie SE_MANAGE_VOLUME_NAME można przypisać w narzędziach administracyjnych systemu Windows, apletu Zasady zabezpieczeń lokalnych . W obszarze Zasady lokalne wybierz pozycję Przypisanie prawa użytkownika i zmodyfikuj właściwość Wykonywanie zadań konserwacji woluminu .

Zagadnienia dotyczące wydajności

Proces inicjowania pliku bazy danych zapisuje zera w nowych obszarach pliku podczas inicjacji. Czas trwania tego procesu zależy od rozmiaru zainicjowanej części pliku oraz czasu odpowiedzi i pojemności systemu przechowywania. Jeśli inicjowanie trwa długo, mogą zostać wyświetlone następujące komunikaty zarejestrowane w dzienniku błędów programu SQL Server i dzienniku aplikacji.

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.

Długie automatyczne zwiększenie bazy danych i/lub pliku dziennika transakcji może powodować problemy z wydajnością zapytań. Operacja, która wymaga automatycznego zwiększenia rozmiaru pliku, korzysta z zasobów, takich jak blokady czy zatrzaski, przez czas trwania operacji wzrostu pliku. Możesz zobaczyć długie czasy oczekiwania na zatrzaski na stronach alokacji. Operacja, która wymaga długiego automatycznego rozrostu, pokazuje typ oczekiwania PREEMPTIVE_OS_WRITEFILEGATHER.