Eu tenho uma configuração onde 3 servidores combinados em Grupo de Disponibilidade
Todos os 3 servidores têm unidades SSD conectadas diretamente e os arquivos do banco de dados do usuário são hospedados nessas unidades
Mas os bancos de dados do sistema (master e msdb) de cada servidor no AG, estão hospedados em um dispositivo SAN que é acessado pela rede
Ainda não os moveu para unidades SSD locais
Perguntas:
Em uma situação hipotética em que a conexão de rede entre qualquer um dos servidores e o dispositivo SAN é perdida (cabo ruim, NIC ruim, alguma falha temporária de rede etc.),
O serviço do SQL Server nesse servidor ficará offline ou deixará de funcionar corretamente imediatamente?
Ou continua a funcionar por algum tempo se master e msdb foram armazenados em cache na RAM antes da rede cair?
Você não pode depender dos bancos de dados do sistema sendo armazenados em cache na memória, o mais provável é que eles não sejam devido ao acesso menos frequente em relação aos bancos de dados do usuário.
Acho que você terminará em um estado quase funcional, onde seus bancos de dados de usuários ainda estarão acessíveis, mas certos recursos da instância do servidor que dependem
master
emsdb
lançarão alguns erros estranhos, dependendo do que mais seu servidor estiver fazendo. O serviço para sua instância do SQL Server deve continuar online (estado "iniciado"). Por exemplo, se você tiver algum trabalho de agente agendado , eu apostaria meu dinheiro (mas não poderia dizer com certeza sem testar) que eles encontrariam erros (silenciosamente ou aparentemente) ao tentar executar, pois a maioria de seus metadados é armazenados no banco demsdb
dados.Se isso ocorrer, é melhor restaurar o acesso a esses bancos de dados do sistema o mais rápido possível para garantir 100% de confiabilidade em todos os recursos e funções.
Da documentação
A seção Advertências do documento de opção de failover de detecção de integridade no nível de banco de dados do grupo de disponibilidade tem algumas informações que podem melhorar nossas suposições sobre a questão:
De um teste de laboratório (próximo o suficiente)
master
emsdb
os arquivos de log em um pen-drive (drive D:) - por uma questão de brevidade, não vou descrever esse processo;Lab
;master
banco de dados que rodeiselect name, state_desc from sys.databases;
;Lab
- tudo bem, até atualizei uma tabela;CREATE DATABASE StorageOffline;
. Recebi a seguinte mensagem de erro:D:\
, ele não alterou o estado dos bancos de dados nem colocou a instância offline;Continuei usando o
Lab
banco de dados sem grandes problemas (aparentes) por alguns minutos e a instância só parou de funcionar enquanto eu escrevia esta resposta. É claro que não é um estado confiável para continuar trabalhando em produção, mas levou algum tempo para ficar offline.Conclusão
Com base nessas informações, meus pensamentos são:
Eu diria que não. Ainda não trabalhei com grupos de disponibilidade, mas se o recurso se destina a manter bancos de dados importantes online e não monitora o tempo de atividade do disco ou a disponibilidade do arquivo de banco de dados para bancos de dados que estão sendo monitorados ativamente , ele não notará o problema mais rapidamente em bancos de dados que não fazem parte do grupo de disponibilidade.
Sim, mas depende de quão ocupado o seu ambiente está. Os bancos de dados permanecerão online até que o SQL Server tente ler ou gravar algo nos arquivos de banco de dados
master
ou .msdb
Mas eu concordo com JD, você não deve confiar nessa situação para lhe dar tempo suficiente para tomar qualquer ação que evite que sua instância fique offline.
Depende de que tipo de offline. Eu fiz com que ele entrasse em um estado em que não tinha ideia de quais transações foram confirmadas porque o modo de falha que estava vendo era que as gravações no banco de dados estavam falhando nos níveis de bloco. Ele enviou spam ao log muito bem, mas não conseguiu se recuperar até que eu o devolvesse manualmente, pois acreditaria que a cópia na memória estava correta após atingir o erro de E/S.
Tenho certeza que alguém vai passar por aqui e dizer que isso é loucura. Concordo. É um comportamento terrível. Mas eu observei in loco. Ao trazer o servidor de volta, apareceu de um
SELECT
observador que o banco de dados foi revertido. Observe que, embora qualquer pessoa que esteja executando umCOMMIT
erro, outrasSELECT
instruções possam ver os resultados dos commits com falha como se tivessem sido bem-sucedidos lendo-os comSELECT
instruções até que eu os reciclasse manualmente.Que nojo.