Bagikan melalui


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 default, file data dan log diinisialisasi untuk menimpa data yang ada yang tersisa di disk dari file yang dihapus sebelumnya. File data dan log pertama kali diinisialisasi dengan men-zero file (mengisi dengan nol) saat Anda melakukan operasi berikut:

  • Membuat 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 SQL Server Database Engine 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 disk yang dihapus hanya ditimpa karena data baru ditulis ke file. Untuk alasan ini, konten yang dihapus berpotensi dapat diakses oleh prinsipal yang tidak sah, sampai beberapa penulisan data lain pada area tertentu dari file data.

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:

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

  • File ditumbuhkan 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 jaringan area penyimpanan selalu menyajikan halaman baru seperti yang telah diinisialisasi sebelumnya, dan meminta sistem operasi menginisialisasi ulang halaman mungkin overhead yang tidak perlu.

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

  • Selalu pastikan bahwa file data dan file cadangan yang dilepas memiliki DACL yang 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 Lakukan 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.

Pertumbuhan otomatis panjang database dan/atau file log transaksi dapat menyebabkan masalah performa kueri. Operasi yang memerlukan pertumbuhan otomatis file yang berpegang pada sumber daya seperti kunci atau kait selama durasi operasi pertumbuhan file. Anda mungkin melihat penantian panjang pada kait untuk halaman alokasi. Operasi yang memerlukan autogrow panjang menunjukkan jenis PREEMPTIVE_OS_WRITEFILEGATHERtunggu .