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. Sebagai gantinya, konten disk ditimpa karena data baru ditulis ke file.

Di Azure SQL Database dan inisialisasi file instan Azure SQL Managed Instance 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.

Inisialisasi file instan diizinkan untuk pertumbuhan log transaksi pada database yang mengaktifkan enkripsi data transparan (TDE), karena sifat bagaimana file log transaksi diperluas, dan fakta bahwa log transaksi ditulis dengan cara 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 file instan file data hanya tersedia jika akun startup layanan SQL Server diberikan SE_MANAGE_VOLUME_NAME. 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 tidak diperlukan untuk inisialisasi file instan peristiwa pertumbuhan hingga 64 MB dalam log transaksi, yang diperkenalkan dengan rilis SQL Server 2022 (16.x).

Penting

Beberapa penggunaan fitur, seperti Enkripsi data transparan (TDE), dapat mencegah inisialisasi file instan. Dimulai dengan SQL Server 2022 (16.x), dan di Azure SQL Database dan Azure SQL Managed Instance, IFI diizinkan pada log transaksi. Lihat Inisialisasi file instan dan log transaksi untuk informasi selengkapnya.

Catatan

Dimulai dengan SQL Server 2016 (13.x), izin ini dapat diberikan ke akun layanan pada waktu penginstalan, selama penyiapan.

Jika menggunakan penginstalan perintah, tambahkan /SQLSVCINSTANTFILEINIT argumen, atau centang kotak Beri Izin Lakukan hak istimewa Tugas Pemeliharaan Volume ke SQL Server Database Engine Service dalam wizard penginstalan.

Untuk memberikan izin kepada Perform volume maintenance tasks akun:

  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 yang menjalankan layanan SQL Server.

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

  6. Mulai ulang layanan SQL Server.

  7. Periksa log kesalahan SQL Server 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 startup layanan SQL Server diberikan 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 startup layanan SQL Server belum diberikan SE_MANAGE_VOLUME_NAME, pesan informasi yang menyerupai contoh berikut 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 mungkin diakses oleh prinsipal yang tidak sah, sampai beberapa data lain menulis 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 ini hanya mengizinkan akses file ke akun layanan SQL Server dan administrator lokal. Namun, ketika file dilepas, file dapat diakses oleh pengguna atau layanan yang tidak memiliki SE_MANAGE_VOLUME_NAME.

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 sebagai prainisialisasi, 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 startup layanan SQL Server.

    Catatan

    Menonaktifkan akan meningkatkan waktu alokasi untuk file data, dan hanya memengaruhi file yang dibuat atau ditingkatkan ukurannya setelah hak pengguna dicabut.

SE_MANAGE_VOLUME_NAME hak pengguna

Hak SE_MANAGE_VOLUME_NAME istimewa pengguna 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 wilayah baru file di bawah 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. Ini karena operasi yang memerlukan pertumbuhan otomatis file yang disimpan 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 .