Stimare l'interruzione del servizio durante il cambio di ruolo (mirroring del database)Estimate the Interruption of Service During Role Switching (Database Mirroring)

Durante un cambio di ruolo, l'intervallo di tempo in cui il mirroring del database sarà fuori servizio dipende dal tipo e dalla causa del cambio di ruolo.During a role switch, the amount of time that database mirroring will be out of service depends on the type of role switching and the cause of the role switch.

  • Per il failover automatico, i fattori che contribuiscono alla durata dell'interruzione del servizio sono due: il tempo necessario perché il server mirror individui l'errore del server principale, ovvero il rilevamento dell'errore, e il tempo necessario per eseguire il failover del database, ovvero il tempo di failover.For automatic failover, two factors contribute to the time service is interrupted: the time required for the mirror server to recognize that the principal server instance has failed, that is error detection, plus the time required to fail over the database, that is failover time.

  • Per un'operazione di servizio forzato, sebbene si sia verificato un errore, il rilevamento e la risoluzione dell'errore dipendono dalla rapidità dell'intervento umano.For a forced-service operation, though a failure has occurred, detecting and responding to the failure depends on human responsiveness. La potenziale interruzione del servizio può tuttavia essere stimata pari al tempo necessario al server mirror per il cambio di ruolo dopo l'esecuzione del comando di servizio forzato.However, estimating the potential interruption of service is limited to estimating the time for the mirror server to switch roles after the forced service command is issued.

    Nota

    Per ridurre il tempo necessario al rilevamento di condizioni specifiche, ad esempio alcuni tipi di errori, è possibile definire avvisi per tali condizioni.To reduce the time required to detect specific conditions such as some types of errors, you can define alerts for those conditions.

  • Nel caso di un failover manuale, è rilevante solo il tempo richiesto per eseguire il failover del database dopo l'esecuzione del comando di failover.For a manual failover, only the time required to fail over the database after the failover command is issued.

Rilevamento dell'erroreError detection

Il periodo di tempo necessario al sistema per rilevare un errore dipende dal tipo di errore. Ad esempio, un errore di rete viene rilevato quasi istantaneamente, mentre il rilevamento del blocco di un server richiede per impostazione predefinita 10 secondi, ovvero il periodo di timeout predefinito.The time for the system to notice an error depends on the type of error; for example, a network error is noticed almost instantly, while noticing a server hang by default takes 10 seconds, which is the default timeout period.

Per informazioni sugli errori che possono causare un esito negativo durante una sessione di mirroring del database e sul rilevamento di timeout in modalità a sicurezza elevata con failover automatico, vedere Possibili errori durante il mirroring del database.For information on errors that can cause a failure during a database mirroring session and timeout detection in high-safety mode with automatic failover, see Possible Failures During Database Mirroring).

Tempo di failoverFailover time

Il tempo di failover è composto principalmente dal tempo necessario al server mirror precedente per eseguire il rollforward di tutti i log rimanenti nella propria coda rollforward, più un breve tempo aggiuntivo. Per altre informazioni sulla modalità usata dal server mirror per elaborare i record dei log, vedere Mirroring di database (SQL Server).Failover time consists mainly of the time that the former mirror server requires to roll forward any log remaining in its redo queue, plus a short additional time (for more information about how the mirror server processes log records, see Database Mirroring (SQL Server)). Per informazioni sulla stima del tempo di failover, vedere la sezione Stima del tempo di rollforward durante il failover, più avanti in questo argomento.For information on estimating failover time, see Estimating Your Failover Redo Rate, later in this topic.

Importante

Se il failover si verifica durante una transazione in cui viene creato e quindi modificato un indice o una tabella, per il failover può essere necessario un tempo superiore al normale.If failover occurs during a transaction in which an index or table is created and then changed, failover might take longer than usual. Ad esempio, il tempo di failover può aumentare se il failover si verifica durante la serie di operazioni seguente: BEGIN TRANSACTION, CREATE INDEX su una tabella e SELECT INTO sulla tabella.For example, failing over during the following series of operations might increase failover time: BEGIN TRANSACTION, CREATE INDEX on a table, and SELECT INTO the table. La possibilità di un failover prolungato durante una transazione di questo tipo permane finché la transazione non viene completata con un'istruzione COMMIT TRANSACTION o ROLLBACK TRANSACTION.The possibility of increased failover time during such a transaction remains until it is completed with either a COMMIT TRANSACTION or ROLLBACK TRANSACTION statement.

Coda rollforwardThe Redo Queue

Il rollforward del database comporta l'applicazione dei record di log presenti nella coda rollforward sul server mirror.Rolling forward the database involves applying whatever log records are currently in the redo queue on the mirror server. La coda rollforward contiene i record di log che sono stati scritti su disco nel server mirror ma per i quali non è ancora stato eseguito il rollforward nel database mirror.The redo queue consists of the log records that have been written to disk on the mirror server but not yet rolled forward on the mirror database.

Il tempo di failover per il database dipende dalla velocità con cui il server mirror è in grado di eseguire il rollforward del log nella coda rollforward, a sua volta determinata principalmente dall'hardware di sistema e dal carico di lavoro attuale.Failover time for the database depends on how fast the mirror server can roll forward the log in the redo queue, which, in turn, is determined primarily by the system hardware and the current work load. È possibile che, a causa di un carico di lavoro estremamente elevato in un database principale, la velocità con la quale il server principale invia il log al server mirror sia molto più elevata rispetto a quella con la quale ne esegue il rollforward.Potentially, a principal database can become so busy that the principal server ships log to the mirror server much faster than it can roll the log forward. In questo caso, il failover potrebbe richiedere tempi lunghi mentre il server mirror esegue il rollforward del log nella coda rollforward.In this situation, failover might take significant time while the mirror server rolls forward the log in the redo queue. Per visualizzare le dimensioni correnti della coda rollforward, usare il contatore Coda rollforward nell'oggetto prestazioni del mirroring del database.To learn the current size of the redo queue, use the Redo Queue counter in the database mirroring performance object. Per altre informazioni, vedere Oggetto Database Mirroring di SQL Server.For more information, see SQL Server, Database Mirroring Object.

Stima del tempo di rollforward durante il failoverEstimating the Failover Redo Rate

È possibile misurare il tempo necessario per eseguire il rollforward dei record del log, definito tempo di rollforward, usando una copia di prova del database di produzione.You can measure the amount of time required to roll forward log records—the redo rate—by using a test copy of the production database.

Il metodo utilizzato per stimare il tempo di rollforward durante il failover dipende dal numero di thread utilizzati dal server mirror durante la fase di rollforward.The method for estimating roll forward time during failover depends on the number of threads the mirror server uses during the redo phase. Il numero di thread dipende dagli elementi seguenti:The number of threads depends on the following:

  • In SQL Server StandardSQL Server Standardnel server mirror viene utilizzato sempre un thread singolo per eseguire il roll forward del database.In SQL Server StandardSQL Server Standard, the mirror server always uses a single thread to roll forward the database.

  • In SQL Server EnterpriseSQL Server Enterprise, anche nei server mirror in computer con meno di cinque CPU viene utilizzato unicamente un thread singolo.In SQL Server EnterpriseSQL Server Enterprise, mirror servers on computers with fewer than five CPUs also use only a single thread. Con cinque o più CPU, un server mirror distribuisce le operazioni di rollforward a più thread durante un failover. Questa operazione viene definita rollforward parallelo.With five or more CPUs, a mirror server distributes its roll forward operations among multiple threads during a failover (this is known as parallel redo). Il rollforward parallelo è ottimizzato per l'utilizzo di un thread ogni quattro CPU.Parallel redo is optimized to use one thread for every four CPUs.

Stima del tempo di rollforward per il rollforward a thread singoloEstimating the Single-Threaded Redo Rate

Per il rollforward a thread singolo, il tempo richiesto dal rollforward del database mirror durante il failover è all'incirca uguale al tempo necessario al ripristino di un backup del log per eseguire il rollforward di un log delle stesse dimensioni.For single-threaded redo, roll forward of the mirror database during failover takes approximately the same amount of time as a restore of a log backup takes to roll forward the same amount of log. Per stimare il tempo di failover, creare un database di prova nell'ambiente in cui si prevede di eseguire il mirroring.To estimate failover time, create a test database in the environment under which you intend to run mirroring. Prelevare quindi un backup del log dal database di produzione.Then take a log backup from the production database. Per misurare il tempo di rollforward relativo al backup del log, verificare il tempo necessario per ripristinare il backup del log con WITH NORECOVERY nel database di prova.To measure the redo rate for that log backup, time how long it takes you to restore the log backup WITH NORECOVERY onto the test database.

Dopo avere ottenuto il tempo di rollforward del server mirror, è possibile stimare il tempo necessario per eseguire il failover del database a una temporizzazione specifica dividendo le dimensioni del log attuale per il quale dovrà essere eseguito il rollforward nel server mirror (misurate dal contatore delle prestazioni Coda rollforward ) per il tempo di rollforward.Once you know the redo rate of your mirror server, you can estimate the time to fail over the database at a given point in time by dividing the amount of current log to be redone on the mirror (as measured by the Redo Queue performance counter) by the redo rate. In condizioni normali, se con il server mirror è possibile far fronte al carico derivante dal server principale, il valore di Coda rollforward è piccolo o vicino a zero e un failover richiede pochi secondi.Under normal conditions, if the mirror server can keep up with the load from the principal, the Redo Queue is small or close to zero, and a failover only takes a few seconds.

Stima del tempo di rollforward per il rollforward paralleloEstimating the Parallel Redo Rate

In SQL Server EnterpriseSQL Server Enterpriseil rollforward parallelo è ottimizzato per l'utilizzo di un thread ogni quattro CPU.In SQL Server EnterpriseSQL Server Enterprise, parallel redo is optimized to use one thread for every four CPUs. Per stimare il tempo di rollforward per il rollforward parallelo, è consigliabile utilizzare un sistema di prova in esecuzione anziché un semplice database di prova.To estimate roll forward time for parallel redo, it is more accurate to access a running test system than a test database. Durante il monitoraggio della coda rollforward sul server mirror, aumentare il carico del server principale.While monitoring the redo queue on the mirror server, increase the load on the principal server. In condizioni normali, il valore del contatore Coda rollforward è vicino a zero.In normal operation, the redo queue is close to zero. Aumentare il carico del server principale fino a che il valore del contatore Coda rollforward inizia a crescere in modo costante. Il sistema raggiunge quindi il tempo di rollforward massimo e il contatore delle prestazioni Byte rollforward/sec a questo punto rappresenta il tempo di rollforward massimo.Increase the load on the principal server until the Redo Queue starts to grow continuously; the system is then at its maximum redo rate, and the Redo Bytes/sec performance counter at this point represents the maximum redo rate. Per altre informazioni, vedere Oggetto Database Mirroring di SQL Server.For more information, see SQL Server, Database Mirroring Object.

Stima dell'interruzione del servizio durante il failover automaticoEstimating Interruption of Service During Automatic Failover

Nella figura seguente viene illustrato in quale modo il rilevamento dell'errore e il tempo di failover determinano il tempo necessario per il completamento di un failover automatico su Partner_B.The following figure illustrates how error detection and failover time contribute to the overall time required for an automatic failover to complete on Partner_B. Il failover richiede un tempo per il rollforward del database (fase di rollforward) più un breve periodo di tempo per portare online il database.Failover requires time to roll forward the database (the redo phase) plus a small amount of time to bring the database online. La fase di rollback, che prevede l'esecuzione del rollback per tutte le transazioni di cui non è stato eseguito il commit, si verifica dopo che il nuovo database principale viene portato online e prosegue dopo il failover.The undo phase, which involves rolling back any uncommitted transactions, occurs after the new principal database goes online and continues after fail over. Durante la fase di rollback, il database è disponibile.The database is available during the undo phase.

Rilevamento di errori e tempo di failoverError detection and failover time

Vedere ancheSee Also

Modalità di funzionamento del mirroring del database Database Mirroring Operating Modes
Cambio di ruolo durante una sessione di mirroring del database (SQL Server) Role Switching During a Database Mirroring Session (SQL Server)
Monitoraggio del mirroring del database (SQL Server)Monitoring Database Mirroring (SQL Server)