MSSQLSERVER_9017

Berlaku untuk:SQL Server

Detail

Atribut Nilai
Nama Produk SQL Server
ID Peristiwa 9017
Sumber Kejadian MSSQLSERVER
Komponen SQLEngine
Nama Simbolis LOG_MANY_VLFS
Teks Pesan Database %ls memiliki lebih dari %d file log virtual yang berlebihan. Terlalu banyak file log virtual dapat menyebabkan waktu mulai dan pencadangan yang lama. Pertimbangkan untuk menyusutkan log dan menggunakan kenaikan pertumbuhan yang berbeda untuk mengurangi jumlah file log virtual.

Penjelasan

Selama startup database, SQL Server mendeteksi bahwa database memiliki sejumlah besar file log virtual (VLF) dan mencatat pesan kesalahan ini. Situasi di mana Anda dapat mengalami kesalahan adalah:

  • Saat Anda memulai instans SQL Server
  • Memulihkan database
  • Melampirkan database

Pesan informasi 9017 yang mirip dengan contoh ini dicatat di log kesalahan 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.

Selain itu, jika Anda menggunakan teknologi Replikasi, Pencerminan Database, atau AlwaysOn di lingkungan Anda, Anda mungkin melihat masalah performa dengan teknologi ini.

Efek dari banyak VLF pada replikasi

Terlalu banyak file log dapat memengaruhi replikasi karena proses pembaca log harus memindai setiap file log virtual untuk transaksi yang ditandai untuk replikasi. Anda dapat melihat perilaku ini dengan melacak performa prosedur tersimpan sp_replcmds. Proses pembaca log menggunakan prosedur tersimpan sp_replcmds untuk memindai file log virtual dan membaca transaksi yang ditandai untuk replikasi.

Penyebab

Masalah ini terjadi ketika Anda menentukan nilai kecil untuk parameter FILEGROWTH untuk file log transaksi Anda.

Mesin Database SQL Server secara internal membagi setiap file log fisik menjadi beberapa file log virtual (VLF). Paket Layanan SQL Server 2008 R2 2 memperkenalkan pesan baru (9017) yang dicatat saat database dimulai (baik karena dimulainya instans SQL Server atau karena melampirkan atau memulihkan database) dan memiliki lebih dari 1.000 VLF di SQL Server 2008 R2 atau memiliki lebih dari 10.000 VLFS di SQL Server 2012 dan versi yang lebih baru.

Catatan

Di SQL Server 2012, meskipun pesan ini dicatat ketika database memiliki 10.000 VLF, pesan aktual yang dilaporkan dalam log kesalahan salah menyatakan "1000 VLF." Peringatan memang terjadi setelah 10.000 VLF. Namun, pesan melaporkan 1.000 VLF. Masalah ini dikoreksi dalam rilis selanjutnya.

Tindakan pengguna

Untuk mengatasi masalah ini, ikuti langkah-langkah berikut:

  1. Anda dapat melihat jumlah VLF dan ukuran rata-rata di SQL Server Anda dengan menggunakan kueri ini. Hasilnya akan membantu Anda mengidentifikasi database mana yang akan difokuskan:

    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 db
     CROSS APPLY sys.dm_db_log_info(db.database_id) dbl
    GROUP BY db.name
    ORDER BY Total_VLF_count DESC
    

    Untuk informasi selengkapnya, lihat sys.dm_db_log_info.

  2. Kurangi log transaksi Anda dengan menggunakan DBCC SHRINKDB/DBCC SHRINKFILE atau dengan menggunakan SQL Server Management Studio.

  3. Lakukan peningkatan satu kali ukuran file log transaksi ke nilai besar. Peningkatan satu kali ini dilakukan untuk menghindari pertumbuhan otomatis yang sering terjadi. Untuk informasi selengkapnya, lihat Mengelola ukuran file log transaksi.

  4. Tingkatkan parameter FILEGROWTH ke nilai yang lebih besar dari yang saat ini dikonfigurasi. Ini harus didasarkan pada aktivitas database Anda dan seberapa sering file log Anda tumbuh.

  5. Selain itu, Anda dapat meninjau artikel perbaikan berikut, bergantung pada versi SQL Server yang saat ini Anda jalankan:

    MEMPERBAIKI: Dibutuhkan waktu lama untuk memulihkan database di SQL Server 2008 R2, SQL Server 2008, atau SQL Server 2012

    MEMPERBAIKI: Performa lambat ketika Anda memulihkan database jika ada banyak VLF di dalam log transaksi di SQL Server 2005, SQL Server 2008, atau SQL Server 2008 R2

    MEMPERBAIKI: Pemulihan membutuhkan waktu lebih lama dari yang diharapkan untuk database di lingkungan SQL Server 2008 atau SQL Server 2008 R2

Tip

Untuk menentukan distribusi VLF optimal untuk ukuran log transaksi saat ini dari semua database dalam instans tertentu, dan kenaikan pertumbuhan yang diperlukan untuk mencapai ukuran yang diperlukan, lihat skrip ini.