Udostępnij przez


MSSQLSERVER_9017

Dotyczy:SQL Server

Szczegóły

Attribute Wartość
Nazwa produktu SQL Server
Identyfikator zdarzenia 9017
Źródło zdarzenia MSSQLSERVER
Składnik SQLEngine
Nazwa symboliczna LOG_MANY_VLFS
Tekst wiadomości Baza danych %ls ma więcej niż %d plików dziennika wirtualnego, co jest nadmierne. Zbyt wiele plików dziennika wirtualnego może powodować długie uruchamianie i tworzenie kopii zapasowych. Rozważ zmniejszenie dziennika i użycie innego przyrostu rozmiaru, aby zmniejszyć liczbę wirtualnych plików dziennika.

Explanation

Podczas uruchamiania bazy danych program SQL Server wykrywa, że baza danych ma dużą liczbę plików dziennika wirtualnego (VLFS) i rejestruje ten komunikat o błędzie. Sytuacje, w których można napotkać błąd, to:

  • Po uruchomieniu wystąpienia programu SQL Server
  • Przywracanie bazy danych
  • Dołączanie bazy danych

Komunikat informacyjny 9017 podobny do tego przykładu jest rejestrowany w dzienniku błędów programu SQL Server:

Database dbName has more than n virtual log files which is excessive. Too many virtual log files can cause long startup and backup times. Consider shrinking the log and using a different growth increment to reduce the number of virtual log files. Too many virtual log files can adversely affect the recovery time of the database.

Ponadto w przypadku korzystania z technologii Replikacja, Dublowanie bazy danych lub Zawsze włączone w środowisku mogą wystąpić problemy z wydajnością tych technologii.

Wpływ wielu plików VFS na replikację

Zbyt wiele plików dziennika może mieć wpływ na replikację, ponieważ proces czytnika dzienników musi skanować każdy plik dziennika wirtualnego pod kątem transakcji oznaczonych do replikacji. To zachowanie można zobaczyć, śledząc wydajność sp_replcmds procedury składowanej. Proces czytnika dzienników używa sp_replcmds procedury składowanej do skanowania plików dziennika wirtualnego i odczytywania transakcji oznaczonych do replikacji.

Przyczyna

Ten problem występuje, gdy określisz małe wartości parametru FILEGROWTH dla plików dziennika transakcji.

Aparat bazy danych programu SQL Server wewnętrznie dzieli każdy plik dziennika fizycznego na kilka plików dziennika wirtualnego (VLF). Program SQL Server 2008 R2 z dodatkiem Service Pack 2 wprowadził nowy komunikat (9017), który jest rejestrowany podczas uruchamiania bazy danych (z powodu uruchomienia wystąpienia programu SQL Server lub z powodu dołączania lub przywracania bazy danych) i ma więcej niż 1000 plików VFS w programie SQL Server 2008 R2 lub ma więcej niż 10 000 VLFS w programie SQL Server 2012 i nowszych wersjach.

Uwaga / Notatka

W programie SQL Server 2012, chociaż ten komunikat jest rejestrowany, gdy baza danych ma 10 000 VFS, rzeczywisty komunikat zgłaszany w dzienniku błędów niepoprawnie stwierdza "1000 VLF". Ostrzeżenie występuje po 10 000 VDF. Jednak komunikat zgłasza 1000 VDF. Ten problem został poprawiony w kolejnych wersjach.

Akcja użytkownika

Aby rozwiązać ten problem, wykonaj następujące kroki:

  1. Przy użyciu tego zapytania możesz wyświetlić liczbę maszyn wirtualnych i średni rozmiar w programie SQL Server. Wynik pomoże ci zidentyfikować bazy danych, na których należy skupić się:

    SELECT db.name,
           count(dbl.database_id) AS Total_VLF_count,
           CONVERT (DECIMAL (10, 2), avg(dbl.vlf_size_mb)) AS Avg_VLF_Size_MB
    FROM sys.databases AS db
    CROSS APPLY sys.dm_db_log_info(db.database_id) AS dbl
    GROUP BY db.name
    ORDER BY Total_VLF_count DESC;
    

    Aby uzyskać więcej informacji, zobacz sys.dm_db_log_info.

  2. Zmniejsz dziennik transakcji przy użyciu programu DBCC SHRINKDB/DBCC SHRINKFILE SQL Server Management Studio lub przy użyciu programu .

  3. Jednorazowy wzrost rozmiaru pliku dziennika transakcji na dużą wartość. Ten jednorazowy wzrost jest wykonywany, aby uniknąć częstych wzrostów automatycznych. Aby uzyskać więcej informacji, zobacz Zarządzanie rozmiarem pliku dziennika transakcji.

  4. FILEGROWTH Zwiększ parametr do większej wartości niż to, co jest obecnie skonfigurowane. Powinno to być oparte na aktywności bazy danych i sposobie, w jaki często rośnie plik dziennika.

  5. Ponadto możesz przejrzeć następujące artykuły z poprawkami, w zależności od wersji programu SQL Server, która jest aktualnie uruchomiona:

Wskazówka

Aby określić optymalną dystrybucję VLF dla bieżącego rozmiaru dziennika transakcji wszystkich baz danych w danym wystąpieniu oraz wymagane przyrosty wzrostu w celu osiągnięcia wymaganego rozmiaru, zobacz ten skrypt.