Database Mirroring – Tempo Failover – HS With Automatic Failover com Timeout
Olá Pessoal,
A ideia desse teste é verificar o tempo que o Database Mirroring leva para fazer um failover automático de uma instância para o outra utilizando esse Operation mode, entretanto, agora a opção set partner timeout 60 será utilizada.
Instâncias participantes dos testes:
1 – Instancia5 – Servidor Principal, referenciado no texto por Servidor A
2 – Instancia5\INST1 – Servidor Mirror, referenciado no texto por Servidor B
Nome da database espelhada: Mirror1
Script de criação da tabela Teste:
CREATE TABLE [dbo].[Teste](
[Cod] [int] IDENTITY(1,1) NOT NULL,
[Data] [datetime] NULL,
[Texto] [varchar](4000) NULL)
Loop de insert do teste:
while 1=1
begin
if exists (select null
from sys.databases
where name = ‘MIRROR1’ and state_desc = ‘ONLINE’)
insert into mirror1..Teste(texto)
select @@servername
end
Com um database mirroring configurado com o modo High Safety with Automatic Failover, foram executadas cinco queries com loops infinitos de Inserts.
Antes de parar o serviço do SQL Server, alterei uma configuração do mirror com o comando:
alter database Mirror1 set partner timeout 60
Conferindo a configuração:
Em seguida, foi parado o serviço do SQL Server do servidor A simulando um possível problema.
Como a query do loop possui uma verificação que só realiza o insert quando a database está ONLINE, esse loop também ficou sendo executado no servidor B para que assim que a database ficasse online, um insert fosse feito nessa tabela.
Assim, como a coluna Texto possui o nome do servidor onde o insert foi executado, é possível medir o tempo de failover entre as duas instancias. Para isso, foi verificado quando a coluna Texto troca o nome do servidor e com isso é possível saber a última inserção em um ambiente e a primeira inserção em outro ambiente.
Segue o resultado encontrado:
Comparando as duas colunas do tipo datetime, temos que o tempo do failover automático foi de 1.9 segundos.
Como pode ser verificado, o tempo de 60 segundos de timeout não fez diferença no tempo de failover.
No link ( http://technet.microsoft.com/en-us/library/cc917681.aspx ), temos a seguinte informação:
Failure is detected: The failure is detected by the mirror and the witness. Hard failures (such as server power failure) are detected quickly (typically in around 1 second). Soft failures (such as storage failure) take a bit longer to detect. The default timeout for communication (a ping message) between the principal, the mirror, and the witness is 10 seconds. The timeout can be modified by using the ALTER DATABASE SET PARTNER TIMEOUT command. If the principal doesn’t respond (to the ping message) within the timeout period, it is considered to be down. If you change the timeout setting, it is a best practices recommendation to set it to 10 seconds or higher. Setting it to lower than 10 seconds may result in false failures under heavily loaded or sporadic network conditions.
No link (http://www.sqlmag.com/blog/sql-server-questions-answered-28/sql-server/why-isnt-the-mirroring-partner-timeout-working-137113 ), temos a seguinte informação:
The mirroring partner timeout only comes into play if the mirror server doesn’t get a response from the principal server at all—in other words, if the Windows server hosting the principal SQL Server instance is offline for some reason. If the Windows server is still available, but SQL Server is offline, the principal Windows server will respond to the mirror server, saying that the principal SQL Server instance is offline. This lets the mirror server initiate a failover (as long as it gets quorum with the witness server, of course).
Conclusão: A opção SET PARTNER TIMEOUT só funciona quando as databases estão em servidores diferentes, pois se apenas o serviço do SQL Server parar, ela não serve para nada. É necessária uma falha no Windows para o tempo de timeout ser utilizado.
Até o Próximo Post sobre Database Mirroring.
Artigos relacionados:
Série de Posts sobre Database Mirroring
Database Mirroring – Como alterar o Operation Mode
Database Mirroring – Operation Mode High Performance – Parte 1
Database Mirroring – Operation Mode High Performance – Parte 2
Database Mirroring – Operation Mode High Performance – Parte 3
Database Mirroring – Operation Mode High Safety Without Failover – Parte 1
Database Mirroring – Operation Mode High Safety Without Failover – Parte 2
Database Mirroring – Operation Mode High Safety with Automatic Failover
Database Mirroring – Tempo Failover – HS Without Automatic Failover
Gostou desse Post?
Cadastre seu e-mail para receber novos Posts e curta minha Página no Facebook para receber Dicas de Leituras e Eventos sobre SQL Server.
Abraços,
Fabrício Lima
MCITP – Database Administrator
Consultor e Instrutor SQL Server
Trabalha com SQL Server desde 2006