Em tempos de atividade mais frequentes aqui no blog, escrevi dois posts bem interessantes (de acordo com o feedback de quem leu) relacionados aos limites do SQL Server (sim, eles existem).
- [SQL Server No Limite] – Arquivos por banco de dados
- [SQL Server No Limite] – Bancos de dados por instância
Já não estava pensando em escrever nada sobre o assunto (que diga-se de passagem, acho bem interessante), e eis que em um dos grupos que participo, surge a seguinte sugestão:
E minha resposta foi:
Vamos direto ao que interessa.
De acordo com o documento oficial da microsoft, “Maximum Capacity Specifications for SQL Server” o número máximo de instâncias que podem ser instaladas em um único servidor Stand Alone é 50.
Vamos ver o que acontece quando atingirmos esse limite:
O ambiente de Teste:
- Hypervisor: Hyper-V (Windows 10)
- S.O.: Windows Server 2016
- 12GB de memória RAM
- SBGD: SQL Server 2016 Developer Edition
Downloads:
ConfigurationFile.ini – Todos os Arquivos de Configuração utilizados.- Para esse caso específico, resolvi não utilizar arquivo de resposta, e adicionei todos os parâmetros que estariam no arquivo de resposta, à chamada da instalação.
- Batch cmd utilizado para chamada dos arquivos.
O Teste:
Foram instaladas 50 instâncias nomeadas do SQL Server em uma sequência, pelos arquivos acima, as duas últimas instalações foram realizadas de forma manual, com a finalidade de capturarmos os erros no momento que aconteceram.
Passo 1 (automação):
- Criação do arquivo Install.cmd
- Para a criação do arquivo de batch de instalação, primeiro executei normalmente os passos da instalação normal do SQL Server, até o ponto do último botão de instalar, o qual obviamente não foi clicado.
- Copiei o caminho do arquivo de resposta ConfigurationFile.ini e abri o mesmo, passando os principais parâmetros do arquivo, direto na chamada do arquivo Install.cmd (apenas para a instância SQL01)
- Após o êxito no teste da instância SQL01, copiei o colei essa mesma linha de comando outras 49 vezes, para que chegasse à instalação de 49 instâncias (1 já tinha sido instalada)
- Execução do arquivo Install.cmd
- o tempo para cada instância ficou entre 2 e 3 minutos, logo todas as instâncias demoraram pouco mais de duas horas para a instalação não assistida.
- Erro de projeto
- Um ponto falho nos testes foi não ter-me atentado ao fato de que 50 instâncias rodando simultaneamente em uma VM em meu notebook pessoal, provavelmente não seria a VM mais performática que eu já criei, com isso, tive um pequeno problema de performance, que foi solucionado parando os serviços das instâncias logo após a criação das mesmas com o commandlet Stop-Service do Powershell.
- Evidência
- Uma imagem como evidência da instalação das 50 instâncias.
Passo 2 (instalação da última instância):
- Nesse ponto, a instalação foi feita da maneira convencional, com a Interface gráfica, com a finalidade da captura de um possível erro que pudesse porventura ser exibido em uma caixa de diálogo. Assista ao rápido vídeo (O vídeo não contém áudio) abaixo de parte do processo, antes de continuar.
Passo 3 (tentativa de instalação de uma instância Default):
- Quem trabalha rotineiramente com SQL Server possivelmente sabe que é possível se ter zero ou 1 instância Default por servidor, dado o resultado dos testes acima (demonstrado no vídeo), tentei realizar a instalação de uma instância Default, já que o servidor estava com 50 instâncias nomeadas. Também não obtive êxito.
Resultados:
- Realmente há uma limitação técnica para a quantidade de instalações de instâncias do SQL Server por servidor, e esse número é limitado a 50, conforme informação disponível nos documentos oficiais.
- Ao tentar a instalação da 51ª instância, não importando se a mesma é uma instância Default ou Nomeada, não é exibida nenhuma mensagem de erro, a instalação apenas nunca se completa (Meu notebook passou a noite ligado com a mesma mensagem de espera vista no vídeo).
- Overall summary:
Final result: Failed: see details below
Exit code (Decimal): -2146233079
Exit facility code: 19
Exit error code: 5385
Exit message: SQL Server 2016 cannot add any more instances. To continue installing this instance, you must uninstall an existing instance.
Start time: 2017-10-12 19:29:57
End time: 2017-10-12 19:30:57
Requested action: Install - Para capturar o erro, foi preciso ir até o Setup Bootstrap, (C:\Program Files\Microsoft SQL Server\130\Setup Bootstrap\Log\)e verificar o arquivo de log, confira na imagem abaixo.
Conclusão:
É de certa forma óbvio e esperado o resultado desses testes de algo que está documentado com um determinado limite, porém há o fator da curiosidade se realmente alguém já alcançou a façanha de ter um erro proveniente desses limites.
Acredito que não, pois apesar de existir um limite, esse é absurdamente alto, e qualquer DBA em um estado normal de consciência, jamais criaria um ambiente real para utilização com 50 instâncias de SQL Server.
A ideia dos testes de Limite é mais pagar pra ver, chegar ao limite, ver na prática a limitação, etc…
Esse post especificamente nasceu da ideia em um grupo de whatsapp, e está aí, comprovamos que a documentação diz a verdade… o limite é 50 INSTÂNCIAS POR SERVIDOR.
Grande abraço,
Edvaldo Castro
UPDATE:
Tente desintalar uma das 50 e veja o que acontece….
Olá Rodrigo,
Muito obrigado pelo comentário.
Confesso que já não tenho mais esse ambiente e teria que montar novamente para fazer esse teste. Se você tiver aí, e quiser compartilhar, farei um update no post e com as devidas referências e créditos.
Muito obrigado,
Edvaldo Castro