Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article traite de la réécriture automatique pour la mise en miroir d’une base de données à partir d’une instance SQL Server.
Dans certaines situations, des retards dans la mise en miroir vers Microsoft Fabric peuvent entraîner une utilisation accrue des fichiers journaux de transactions. Cette augmentation se produit parce que le journal des transactions ne peut pas être tronqué tant que les modifications validées n’ont pas été répliquées dans la base de données miroir. Une fois que la taille du journal de transaction atteint sa limite maximale définie, les écritures dans la base de données échouent. Pour protéger les bases de données opérationnelles contre les échecs d’écriture pour les transactions OLTP critiques, vous pouvez configurer un mécanisme autoreseed qui permet au journal des transactions d’être tronqué et réinitialise la mise en miroir de bases de données sur Fabric.
Un reseed arrête le flux de transactions vers Fabric depuis la base de données miroir et réinitialise le miroir à l’état actuel. Ce processus consiste à générer un nouvel instantané initial des tables configurées pour le miroir, puis à répliquer ce snapshot dans Fabric. Après l’instantané, les modifications incrémentielles sont répliquées.
Lors du reseed, l'élément de base de données miroir dans Fabric est disponible mais ne reçoit pas de modifications incrémentales tant que le reseed n'est pas terminé. La colonne reseed_state de sys.sp_help_change_feed_settings indique l’état de réamorçage.
La fonction d’autoreseed est désactivée par défaut dans SQL Server 2025. Pour l’activer, voir Activer l’auto-reseed. Dans Azure SQL Database et Azure SQL Managed Instance, cette fonctionnalité est activée, et vous ne pouvez ni la gérer ni la désactiver.
Dans la mise en miroir de Fabric, le journal des transactions de la base de données SQL source est surveillé. Un autoreseed ne se déclenche que lorsque les trois conditions suivantes sont vraies :
- Le journal des transactions est rempli à plus de
@autoreseedthreshold%, par exemple70. Sur SQL Server, configurez cette valeur lorsque vous activez la fonctionnalité, en utilisant sys.sp_change_feed_configure_parameters. - Le motif de réutilisation du journal des transactions est
REPLICATION. - Étant donné que l’attente de réutilisation du
REPLICATIONjournal peut être déclenchée pour d’autres fonctionnalités telles que la réplication transactionnelle ou la capture de données modifiées, la réplication automatique se produit uniquement lorsquesys.databases.is_data_lake_replication_enabled= 1. Cette valeur est configurée par la mise en miroir de Fabric.
Diagnose
Pour identifier si le miroir Fabric empêche la troncature logarithmique pour une base de données miroir, vérifiez la log_reuse_wait_desc colonne dans la sys.databases vue catalogue système pour déterminer si la raison est REPLICATION. Pour plus d’informations sur les types d’attente de réutilisation du journal, consultez Facteurs retardant la troncation du journal des transactions. Par exemple:
SELECT [name], log_reuse_wait_desc
FROM sys.databases
WHERE is_data_lake_replication_enabled = 1;
Si la requête affiche REPLICATION le type d’attente de réutilisation du journal, cela signifie qu’en raison de la mise en miroir Fabric, le journal des transactions ne peut pas purger les transactions validées et continue de se remplir.
Utilisez le script T-SQL suivant pour vérifier l’espace total du journal, ainsi que l’utilisation actuelle du journal et l’espace disponible :
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];
Activer la mise à jour automatique
Si le taux d’utilisation du journal des transactions renvoyé par le script T-SQL précédent est proche d’être saturé (par exemple, supérieur à 70 %), envisagez d’activer le réensemencement automatique de la base de données en miroir à l’aide de la procédure stockée système sys.sp_change_feed_configure_parameters. Par exemple, pour activer le comportement de réensemencement automatique :
USE <Mirrored database name>
GO
EXECUTE sys.sp_change_feed_configure_parameters
@autoreseed = 1
, @autoreseedthreshold = 70;
Pour plus d’informations, consultez sys.sp_change_feed_configure_parameters.
Dans la base de données source, le processus de reseed doit libérer l’espace journal des transactions maintenu par le miroir. Si la raison du blocage est toujours REPLICATION due au miroir, publiez un manuel CHECKPOINT sur la base de données SQL Server source pour forcer la libération de l’espace journal. Pour plus d’informations, consultez CHECKPOINT (Transact-SQL).
Réamorçage manuel
Nous vous recommandons de tester le reseed manuel pour une base de données spécifique en utilisant la procédure stockée suivante afin de comprendre l’impact avant d’activer le reseed automatique.
USE <Mirrored database name>
GO
EXECUTE sp_change_feed_reseed_db_init @is_init_needed = 1;
Pour plus d’informations, consultez sys.sp_change_feed_reseed_db_init.
Vérifiez si un réamorçage a été déclenché
La colonne
reseed_statede la procédure stockée systèmesys.sp_help_change_feed_settingsdans la base de données SQL source affiche l’état actuel du réamorçage.-
0= Normal. -
1= La base de données a démarré le processus de réinitialisation dans Fabric. État transitionnaire.-
2= La base de données est en train de se réinitialiser vers Fabric et attend le redémarrage de la réplication. État transitionnaire. Lorsque la réplication est établie, l’état de re-seed devient0.
-
Pour plus d’informations, consultez sys.sp_help_change_feed_settings.
-
Toutes les tables activées pour le miroir dans la base de données ont une valeur de
7pour lastatecolonne danssys.sp_help_change_feed_table.Pour plus d’informations, consultez sys.sp_help_change_feed_table.