Inisialisasi file instan database

Berlaku untuk: SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Dalam artikel ini, Anda mempelajari tentang inisialisasi file instan (IFI) dan cara mengaktifkannya untuk mempercepat pertumbuhan untuk file database SQL Server Anda.

Secara bawaan, file data dan file log diinisialisasi untuk menimpa semua data yang masih tersisa pada disk dari file yang sebelumnya telah dihapus. File data dan log pertama kali diinisialisasi dengan men-zero file (mengisi dengan nol) saat Anda melakukan operasi berikut:

  • Buat database.
  • Tambahkan file data atau log, ke database yang sudah ada.
  • Tingkatkan ukuran file yang ada (termasuk operasi autogrow).
  • Pulihkan database atau grup file.

Di SQL Server, inisialisasi file instan memungkinkan eksekusi operasi file yang disebutkan sebelumnya lebih cepat, karena mengklaim kembali ruang disk yang digunakan tanpa mengisi ruang tersebut dengan nol. Sebaliknya, konten disk lama ditimpa saat data baru ditulis ke file.

Di Azure SQL Database dan Azure SQL Managed Instance, inisialisasi file instan hanya tersedia untuk file log transaksi.

Inisialisasi file instan dan log transaksi

Berlaku untuk: SQL Server 2022 (16.x) dan versi yang lebih baru, serta Azure SQL Database dan Azure SQL Managed Instance.

Secara historis, file log transaksi tidak dapat diinisialisasi secara instan. Namun, dimulai dengan SQL Server 2022 (16.x) (semua edisi) dan di Azure SQL Database dan Azure SQL Managed Instance, peristiwa pertumbuhan otomatis log transaksi hingga 64 MB dapat memperoleh manfaat dari inisialisasi file instan. Kenaikan ukuran pertumbuhan otomatis default untuk database baru adalah 64 MB. Peristiwa pertumbuhan otomatis file log transaksi yang lebih besar dari 64 MB tidak dapat memperoleh manfaat dari inisialisasi file instan.

Tidak seperti inisialisasi file instan untuk file data, yang dicegah jika enkripsi data transparan (TDE) diaktifkan, inisialisasi file instan diizinkan untuk pertumbuhan log transaksi pada database yang mengaktifkan TDE, karena bagaimana file log transaksi tumbuh, dan fakta bahwa log transaksi ditulis ke dalam mode serial.

  • Inisialisasi file instan digunakan untuk tingkat Tujuan Umum dan Bisnis Penting dari Azure SQL Database, dan Azure SQL Managed Instance, hanya untuk menguntungkan pertumbuhan file log transaksi.

  • Inisialisasi file instan tidak dapat dikonfigurasi di Azure SQL Database dan Azure SQL Managed Instance.

Aktifkan inisialisasi file instan

Inisialisasi instan untuk file data hanya tersedia jika akun layanan atau SID layanan Mesin Database diberikan SE_MANAGE_VOLUME_NAME hak istimewa. Anggota grup Administrator Windows memiliki hak ini dan dapat memberikannya kepada pengguna lain dengan menambahkannya ke kebijakan keamanan Lakukan tugas pemeliharaan volume . Hak SE_MANAGE_VOLUME_NAME istimewa tidak diperlukan untuk inisialisasi file instan peristiwa pertumbuhan hingga 64 MB dalam log transaksi, yang diperkenalkan dengan rilis SQL Server 2022 (16.x).

Kami menyarankan agar Anda memberikan SE_MANAGE_VOLUME_NAME hak istimewa kepada service SID dari layanan Mesin Database. Ini memastikan bahwa pemberian tetap ada bahkan jika Anda mengubah akun layanan layanan Mesin Database. Untuk informasi selengkapnya, lihat Menggunakan SID Layanan untuk memberikan izin ke layanan di SQL Server.

Penting

Beberapa penggunaan fitur, seperti Enkripsi data transparan (TDE), dapat mencegah inisialisasi file instan (IFI). Di SQL Server 2022 (16.x) dan versi yang lebih baru, dan pada Azure SQL Database dan Azure SQL Managed Instance, IFI diizinkan pada log transaksi. Untuk informasi selengkapnya, lihat Inisialisasi file instan dan log transaksi.

Di SQL Server 2016 (13.x) dan versi yang lebih baru, izin ini dapat diberikan ke pengidentifikasi keamanan layanan Mesin Database (SID) pada waktu penginstalan, selama penyiapan.

Jika Anda menggunakan perintah penginstalan, tambahkan /SQLSVCINSTANTFILEINIT argumen, atau centang kotak Beri izin Lakukan Tugas Pemeliharaan Volume ke Mesin Database SQL Server Service dalam wizard penginstalan.

Untuk memberikan akun atau layanan SID Perform volume maintenance tasks kebijakan keamanan:

  1. Di komputer tempat file data akan dibuat, buka aplikasi Kebijakan Keamanan Lokal (secpol.msc).

  2. Di panel kiri, perluas Kebijakan Lokal, lalu pilih Penetapan Hak Pengguna.

  3. Di panel kanan, klik dua kali Lakukan tugas pemeliharaan volume.

  4. Pilih Tambahkan Pengguna atau Grup dan tambahkan akun layanan Mesin Database atau SID layanannya.

  5. Pilih Terapkan, lalu tutup semua kotak dialog Kebijakan Keamanan Lokal.

  6. Mulai ulang layanan Mesin Database.

  7. Periksa log kesalahan Mesin Database saat startup.

    Berlaku untuk: SQL Server (Dimulai dengan SQL Server 2012 (11.x) SP4, SQL Server 2014 (12.x) SP2, dan SQL Server 2016 (13.x) dan yang lebih baru).

    1. Jika akun layanan Mesin Database atau SID layanannya diberikan hak akses SE_MANAGE_VOLUME_NAME, pesan informasi yang menyerupai contoh berikut dicatat:

      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. Jika akun layanan Mesin Database atau SID layanannya tidak diberikan SE_MANAGE_VOLUME_NAME hak istimewa, pesan informasi seperti contoh berikut akan dicatat:

      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.
      

    Catatan

    Di SQL Server, gunakan nilai instant_file_initialization_enabled dalam tampilan manajemen dinamis sys.dm_server_services untuk mengidentifikasi apakah inisialisasi file instan diaktifkan untuk instans Anda.

Pertimbangan keamanan

Sebaiknya aktifkan inisialisasi file instan karena manfaatnya dapat melebihi risiko keamanan.

Saat Anda menggunakan inisialisasi file instan, konten yang dihapus pada disk hanya ditimpa ketika data baru ditulis ke dalam file. Oleh karena itu, konten yang dihapus berpotensi dapat diakses oleh pihak yang tidak berwenang hingga data lain ditulis menimpa area tertentu pada file data tersebut.

Meskipun file database dilampirkan ke instans SQL Server, risiko pengungkapan informasi ini dikurangi oleh daftar kontrol akses diskresi (DACL) pada file. DACL hanya mengizinkan akses file ke akun layanan SQL Server, SID layanannya, dan administrator lokal. Namun, ketika file dilepas, file berpotensi dapat diakses oleh pengguna atau layanan yang tidak memiliki SE_MANAGE_VOLUME_NAME hak istimewa.

Pertimbangan serupa ada ketika:

  • Basis data telah dicadangkan. Jika file cadangan tidak dilindungi dengan DACL yang sesuai, konten yang dihapus dapat tersedia untuk pengguna atau layanan yang tidak sah.

  • Berkas diperbesar menggunakan IFI. Administrator SQL Server berpotensi mengakses konten halaman mentah dan melihat konten yang dihapus sebelumnya.

  • File database dihosting di jaringan area penyimpanan. Ada kemungkinan juga bahwa storage area network selalu menyajikan halaman baru sebagai halaman yang telah diinisialisasi sebelumnya, dan membuat sistem operasi menginisialisasi ulang halaman tersebut dapat menjadi beban tambahan yang tidak perlu.

Jika potensi pengungkapan konten yang dihapus menjadi perhatian, Anda harus mengambil satu atau kedua tindakan berikut:

  • Selalu pastikan bahwa file data yang dipisahkan dan file cadangan memiliki DACL yang membatasi akses secara ketat.

  • Nonaktifkan inisialisasi file instans untuk instans SQL Server. Untuk melakukannya, cabut SE_MANAGE_VOLUME_NAME dari akun layanan Mesin Database dan SID layanannya.

    Catatan

    Menonaktifkan IFI meningkatkan waktu pertumbuhan untuk file data, dan hanya memengaruhi file yang dibuat atau ditingkatkan ukurannya setelah hak istimewa dicabut.

hak istimewa SE_MANAGE_VOLUME_NAME

Hak SE_MANAGE_VOLUME_NAME istimewa dapat ditetapkan di Alat Administratif Windows, applet Kebijakan Keamanan Lokal . Di bawah Kebijakan Lokal, pilih Penetapan Hak Pengguna dan ubah properti Melakukan tugas pemeliharaan volume.

Pertimbangan performa

Proses inisialisasi file database menulis nol ke bagian baru dari file selama proses inisialisasi. Durasi proses ini tergantung pada ukuran bagian file yang diinisialisasi dan pada waktu respons dan kapasitas sistem penyimpanan. Jika inisialisasi membutuhkan waktu lama, Anda mungkin melihat pesan berikut yang direkam di log kesalahan SQL Server dan Log Aplikasi.

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.

Proses pertambahan ukuran otomatis database dan/atau file log transaksi yang berlangsung lama dapat menyebabkan masalah kinerja kueri. Operasi yang memerlukan pertumbuhan otomatis berkas akan tetap menggunakan sumber daya seperti lock atau latch selama berlangsungnya operasi pertumbuhan berkas. Anda mungkin mengalami waktu tunggu yang lama pada latch untuk halaman alokasi. Operasi yang memerlukan autogrow yang lama menunjukkan jenis tunggu PREEMPTIVE_OS_WRITEFILEGATHER.