Mengonfigurasi reseed otomatis untuk database mirroring Fabric dari SQL Server

Artikel ini membahas reseeding otomatis untuk melakukan mirroring database dari instans SQL Server.

Ada situasi tertentu di mana keterlambatan pencerminan ke Fabric dapat menyebabkan peningkatan penggunaan file log transaksi. Ini karena log transaksi tidak dapat dipotong sampai setelah perubahan yang dilakukan telah direplikasi ke database cermin. Setelah ukuran log transaksi mencapai batas maksimum yang ditentukan, penulisan ke database gagal. Untuk melindungi database operasional dari kegagalan penulisan untuk transaksi OLTP penting, Anda dapat menyiapkan mekanisme penyemaian ulang otomatis yang memungkinkan log transaksi dipangkas dan menginisialisasi ulang pencerminan database ke Fabric.

Reseed menghentikan aliran transaksi ke Microsoft Fabric dari database cermin dan menginisialisasi ulang pencerminan pada status saat ini. Ini melibatkan pembuatan cuplikan awal baru dari tabel yang dikonfigurasi untuk pencerminan, dan mereplikasinya ke Microsoft Fabric. Setelah rekam jepret, perubahan bertahap direplikasi.

Selama proses reseed, item database yang tercermin di Microsoft Fabric tetap tersedia tetapi tidak akan menerima perubahan inkremental hingga reseed selesai. Kolom reseed_state dalam sys.sp_help_change_feed_settings menunjukkan status reseed.

Fitur autoreseed dinonaktifkan secara default di SQL Server 2025, untuk mengaktifkannya, lihat Mengaktifkan autoreseed. Fitur yang dibuat otomatis diaktifkan dan tidak dapat dikelola atau dinonaktifkan di Azure SQL Database dan Azure SQL Managed Instance.

Dalam Fabric Mirroring, log transaksi database SQL sumber dipantau. Pemulihan otomatis hanya akan aktif ketika ketiga kondisi berikut benar:

  • Log transaksi sudah terisi lebih dari @autoreseedthreshold persen; contohnya, 70. Di SQL Server, konfigurasikan nilai ini saat Anda mengaktifkan fitur, dengan sys.sp_change_feed_configure_parameters.
  • Alasan penggunaan kembali log adalah REPLICATION.
  • REPLICATION Karena waktu tunggu penggunaan kembali log dapat ditingkatkan untuk fitur lain seperti replikasi transaksional atau CDC, pembuatan ulang otomatis hanya terjadi ketika sys.databases.is_data_lake_replication_enabled = 1. Nilai ini dikonfigurasi oleh Fabric Mirroring.

Diagnose

Untuk menentukan apakah pencerminan Fabric menghalangi pemotongan log untuk database yang sedang dicerminkan, periksa kolom log_reuse_wait_desc pada tampilan katalog sistem sys.databases untuk melihat apakah alasannya adalah REPLICATION. Untuk informasi selengkapnya tentang jenis tunggu penggunaan kembali log, lihat Faktor-faktor yang menunda pemotongan log transaksi. Contohnya:

SELECT [name], log_reuse_wait_desc 
FROM sys.databases 
WHERE is_data_lake_replication_enabled = 1;

Jika kueri memperlihatkan REPLICATION jenis penantian penggunaan ulang log, maka karena Fabric mencerminkan log transaksi tidak dapat mengosongkan transaksi yang telah dikomit dan terus terisi.

Gunakan skrip T-SQL berikut untuk memeriksa total ruang log, dan penggunaan log saat ini dan ruang yang tersedia:


USE <Mirrored database name>
GO 
--initialize variables
DECLARE @total_log_size bigint = 0; 
DECLARE @used_log_size bigint = 0;
DECLARE @size int;
DECLARE @max_size int;
DECLARE @growth int;

--retrieve total log space based on number of log files and growth settings for the database
DECLARE sdf CURSOR
FOR
SELECT SIZE*1.0*8192/1024/1024 AS [size in MB],
            max_size*1.0*8192/1024/1024 AS [max size in MB],
            growth
FROM sys.database_files
WHERE TYPE = 1 
OPEN sdf 
FETCH NEXT FROM sdf INTO @size,
                @max_size,
                @growth 
WHILE @@FETCH_STATUS = 0 
BEGIN
SELECT @total_log_size = @total_log_size + 
CASE @growth
        WHEN 0 THEN @size
        ELSE @max_size
END 
FETCH NEXT FROM sdf INTO @size,
              @max_size,
              @growth 
END 
CLOSE sdf;
DEALLOCATE sdf;

--current log space usage
SELECT @used_log_size = used_log_space_in_bytes*1.0/1024/1024
FROM sys.dm_db_log_space_usage;

-- log space used in percent
SELECT @used_log_size AS [used log space in MB],
       @total_log_size AS [total log space in MB],
       @used_log_size/@total_log_size AS [used log space in percentage];

Aktifkan autoreseed

Jika penggunaan log yang dikembalikan oleh skrip T-SQL sebelumnya hampir penuh (misalnya, lebih dari 70%), pertimbangkan untuk mengaktifkan basis data cermin untuk penumbuhan kembali otomatis menggunakan prosedur simpanan sistem sys.sp_change_feed_configure_parameters. Misalnya, untuk mengaktifkan fungsi autoreseed:

USE <Mirrored database name>
GO
EXECUTE sys.sp_change_feed_configure_parameters 
  @autoreseed = 1
, @autoreseedthreshold = 70; 

Untuk informasi selengkapnya, lihat sys.sp_change_feed_configure_parameters.

Dalam database sumber, reseed harus membebaskan ruang log transaksi yang terganggu oleh pencerminan data. Lakukan perintah manual CHECKPOINT pada database SQL Server sumber untuk memaksa pelepasan ruang log jika alasan penahanan masih REPLICATION adalah karena pencerminan. Untuk informasi selengkapnya, lihat CHECKPOINT (Transact-SQL).

Pengisian ulang manual

Sebagai praktik terbaik, Anda dapat menguji reseed manual untuk database tertentu menggunakan prosedur tersimpan berikut untuk memahami dampaknya sebelum mengaktifkan fungsionalitas reseed otomatis.

USE <Mirrored database name>
GO
EXECUTE sp_change_feed_reseed_db_init @is_init_needed = 1;

Untuk informasi selengkapnya, lihat sys.sp_change_feed_reseed_db_init.

Periksa apakah pemicuan ulang telah dipicu

  • Kolom reseed_state dalam prosedur tersimpan sistem sys.sp_help_change_feed_settings pada database SQL sumber menunjukkan keadaan pengisian ulang saat ini.

    • 0 = Biasa.
    • 1 = Database telah memulai proses reinisialisasi ke Fabric. Status transisi.
    • 2 = Database sedang diinisialisasi ulang ke Fabric dan menunggu replikasi dimulai ulang. Status transisi. Ketika replikasi ditetapkan, status reseed berpindah ke 0.

    Untuk informasi selengkapnya, lihat sys.sp_help_change_feed_settings.

  • Semua tabel yang diaktifkan untuk pencerminan dalam database akan memiliki nilai 7 untuk state kolom di sys.sp_help_change_feed_table.

    Untuk informasi selengkapnya, lihat sys.sp_help_change_feed_table.