Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra la reinizializzazione automatica per il mirroring di un database da un'istanza di SQL Server.
Esistono alcune situazioni in cui i ritardi nel mirroring in Fabric possono comportare un aumento dell'utilizzo dei file di log delle transazioni. Ciò avviene perché il log delle transazioni non può essere troncato fino a quando non è stato eseguito il commit delle modifiche nel database con mirroring. Quando le dimensioni del log delle transazioni raggiungono il limite massimo definito, le scritture nel database hanno esito negativo. Per proteggere i database operativi da errori di scrittura per le transazioni OLTP critiche, è possibile configurare un meccanismo autoreseed che consente di troncare il log delle transazioni e reinizializzare il mirroring del database in Fabric.
Un reinizializzato arresta il flusso delle transazioni in Microsoft Fabric dal database con mirroring e reinizializza il mirroring nello stato corrente. Ciò comporta la generazione di un nuovo snapshot iniziale delle tabelle configurate per il mirroring e la replica in Microsoft Fabric. Dopo lo snapshot, le modifiche incrementali vengono replicate.
Durante la reinizialità, l'elemento del database con mirroring in Microsoft Fabric è disponibile, ma non riceverà modifiche incrementali fino al completamento della reinizialità. La reseed_state colonna in sys.sp_help_change_feed_settings indica lo stato di reinvio.
La funzionalità di autoreseed è disabilitata per impostazione predefinita in SQL Server 2025, per abilitarla vedere Abilita autoreseed. La funzionalità autoreseed è abilitata e non può essere gestita o disabilitata nel database SQL di Azure e nell'istanza gestita di SQL di Azure.
In Mirroring dell'infrastruttura viene monitorato il log delle transazioni del database SQL di origine. Un autoreseed viene attivato solo quando vengono soddisfatte le tre condizioni seguenti:
- Il log delle transazioni è maggiore della
@autoreseedthresholdpercentuale completa,70ad esempio . In SQL Server configurare questo valore quando si abilita la funzionalità, con sys.sp_change_feed_configure_parameters. - Il motivo del riutilizzo del log è
REPLICATION. - Poiché l'attesa di riutilizzo del log può essere generata per altre funzionalità, ad esempio la replica transazionale o CDC, l'esecuzione
REPLICATIONautomatica avviene solo quandosys.databases.is_data_lake_replication_enabled= 1. Questo valore viene configurato dal mirroring dell'infrastruttura.
Diagnose
Per identificare se il mirroring dell'infrastruttura impedisce il troncamento del log per un database con mirroring, controllare la log_reuse_wait_desc colonna nella sys.databases vista del catalogo di sistema per verificare se il motivo è REPLICATION. Per altre informazioni sui tipi di attesa di riutilizzo del log, vedere Fattori che ritardano il troncamento del log delle transazioni. Per esempio:
SELECT [name], log_reuse_wait_desc
FROM sys.databases
WHERE is_data_lake_replication_enabled = 1;
Se la query mostra REPLICATION il tipo di attesa di riutilizzo del log, a causa del mirroring dell'infrastruttura il log delle transazioni non può svuotare le transazioni di cui è stato eseguito il commit e continuerà a riempirsi.
Usare lo script T-SQL seguente per controllare lo spazio totale dei log e l'utilizzo del log corrente e lo spazio disponibile:
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];
Abilitare l'autore
Se l'utilizzo del log restituito dallo script T-SQL precedente è quasi pieno (ad esempio, maggiore di 70%), valutare la possibilità di abilitare il database con mirroring per la reinizialità automatica usando la sys.sp_change_feed_configure_parameters stored procedure di sistema. Ad esempio, per abilitare il comportamento autoreseed:
USE <Mirrored database name>
GO
EXECUTE sys.sp_change_feed_configure_parameters
@autoreseed = 1
, @autoreseedthreshold = 70;
Per altre informazioni, vedere sys.sp_change_feed_configure_parameters.
Nel database di origine, il reinvio deve rilasciare lo spazio del log delle transazioni mantenuto dal mirroring. Eseguire un manuale CHECKPOINT nel database SQL Server di origine per forzare il rilascio dello spazio di log se il motivo di blocco è ancora REPLICATION dovuto al mirroring. Per altre informazioni, vedere CHECKPOINT (Transact-SQL).
Reinvio manuale
Come procedura consigliata, è possibile testare la reinizializzazione manuale per un database specifico usando la stored procedure seguente per comprendere l'impatto prima di attivare la funzionalità di reinizializzazione automatica.
USE <Mirrored database name>
GO
EXECUTE sp_change_feed_reseed_db_init @is_init_needed = 1;
Per altre informazioni, vedere sys.sp_change_feed_reseed_db_init.
Controllare se è stato attivato un nuovo
La colonna
reseed_statenella procedure di sistema memorizzatasys.sp_help_change_feed_settingsnel database SQL di origine indica il suo stato di ricampionamento corrente.-
0= Normale. -
1= Il database ha avviato il processo di reinizializzazione in Fabric. Stato di transizione. -
2= Il database viene reinizializzato in Fabric e in attesa del riavvio della replica. Stato di transizione. Quando viene stabilita la replica, lo stato reinviato passa a0.
Per altre informazioni, vedere sys.sp_help_change_feed_settings.
-
Tutte le tabelle abilitate per il mirroring nel database avranno un valore di
7nella colonnastateinsys.sp_help_change_feed_table.Per altre informazioni, vedere sys.sp_help_change_feed_table.