SQL Server Express – DESAFIO: É possível ultrapassar o limite de 10 GB de dados em uma base?

Visualizações: 1.850
Tempo de Leitura: 11 minutos

Fala pessoal!

No último post técnico de 2018, gostaria de fazer uma pergunta desafio para vocês: É possível ultrapassar o limite de 10 GB de dados em uma base? Como eu já comentei no artigo SQL Server Express e Developer – Até onde podemos usar as versões gratuitas do SQL Server?, a versão Express tem uma série de limitações técnicas, sejam de hardware, como o SQL Server utilizar apenas 1 CPU e 1 GB de memória, quanto limitações de software, como ausência do SQL Agent e limitação do tamanho máximo por database de 10 GB (antes do SQL Server 2008 R2 eram 4 GB).

Em vista de todas as limitações citadas acima (e de forma mais detalhada no artigo acima), vou colocar à prova essa limitação de 10 GB, já que ouvi relatos de pessoas da comunidade dizerem que já viram bases com mais de 10 GB rodando o SQL Server Express.

Script utilizado nos testes:

Teste 1 – Autogrowth configurado em 1 MB

Nesse primeiro teste, vamos validar o tamanho máximo de dados que conseguimos inserir em uma base do SQL Server Express, configurando o crescimento automático em 1 MB:

Como era de se esperar, após algum tempo começou a aparecer a mensagem de erro abaixo na aba “Messages”:

** An error was encountered during execution of batch. Continuing.
Msg 1105, Level 17, State 2, Line 21
Could not allocate space for object ‘dbo.Teste’ in database ‘dirceuresende’ because the ‘PRIMARY’ filegroup is full. Create disk space by deleting unneeded files, dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.

Vamos agora analisar o tamanho da tabela e da base de dados para verificar a quantidade de dados que consegui inserir:

Resultado:

Como podemos observar acima, exatamente ao atingir 10 GB (1024MB), o SQL Server limitou o crescimento dos dados, conforme o esperado. Agora vamos tentar burlar essa limitação.

Teste 2 – Autogrowth configurado em 11 GB

Vou testar recriar o database e tentar burlar essa limitação colocando um autogrowth de 11 GB e ver se o SQL Server vai aceitar crescer 1x e ultrapassar o limite de 10GB, nem que seja só com 1 evento de crescimento.

Assim que comecei a inserir os registros no banco, já começaram a aparecer mensagens de erro, ou seja, o SQL Server entendeu que com 1 crescimento já iria ultrapassar os 10 GB e já começou a dar erro de database sem espaço e nem tentou crescer o tamanho do database:

** An error was encountered during execution of batch. Continuing.
Msg 1105, Level 17, State 2, Line 21
Could not allocate space for object ‘dbo.Teste’ in database ‘dirceuresende’ because the ‘PRIMARY’ filegroup is full. Create disk space by deleting unneeded files, dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.

Vamos ver a quantidade dados que consegui inserir no banco com essa tentativa:

Ou seja, realmente, não vejo como contornar o limite de 10 GB de um database de usuário no SQL Server Express. Mas e os databases de sistema ? 🙂

Teste 3 – Utilizando o database master

Pelos dois testes realizados anteriormente, não consegui identificar uma forma de contornar o limite de 10 GB do SQL Server Express em um database de usuário. Agora, vou testar em databases de sistema, iniciando pelo database master.

Para isso, vou utilizar o script abaixo:

E agora, vamos ver o volume de dados que inserimos na tabela..

Resultado:

Opa! Ultrapassei o limite de 10 GB e coloquei 13 GB no database master (interrompi porque acabou o espaço em disco na VM.. rs.. mas aparentemente, não existe limite de espaço para o database master)

Será que isso acontece com os outros databases de sistema também ? Vamos testar!

Teste 4 – Utilizando os databases msdb e tempdb

Agora que vimos que é possível ultrapassar o limite de 10GB no database master, vou testar se isso é possível com outros databases de sistema também.

Database msdb
Após os testes no database msdb, concluí que ele também está abaixo da limitação de 10GB de dados. Após o último evento de crescimento possível abaixo de 10GB, o SQL Server começou a retornar as mensagens de erro de falta de espaço no database:

** An error was encountered during execution of batch. Continuing.
Msg 1105, Level 17, State 2, Line 21
Could not allocate space for object ‘dbo.Teste’ in database ‘dirceuresende’ because the ‘PRIMARY’ filegroup is full. Create disk space by deleting unneeded files, dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.

Database tempdb
Após os testes no database tempdb, concluí que, assim como o database master, o database tempdb NÃO está dentro do limite de 10 GB, ou seja, você consegue inserir mais de 10 GB nesses dois databases, conforme os resultados abaixo comprovam.

Importante: Lembre-se que o database tempdb é recriado e todos os dados armazenados são perdidos sempre que o serviço do SQL Server é reiniciado, ou seja, se você pensou em armazenar qualquer informação nesse database, sugiro mudar de ideia.

Script utilizado para validar os dados:

Resultado:

Bom, pessoal, nesse artigo eu quis demonstrar que a limitação de 10 GB realmente existe, embora tenha um “jeitinho brasileiro” de contorná-la. Em um ambiente de uma empresa séria, isso é algo impensável, já que além dessa barreira de espaço, existem limitações de recursos que não estão disponíveis (Ex: SQL Server Agent) e também limitações de hardware. Uma instância com 1 CPU e 1 GB de memória RAM não suporta uma quantidade grande de usuários e operações, se tornando bem lenta à medida que o volume de dados vai aumentando.

Além disso, é uma péssima prática de administração de banco de dados utilizar bases de dados de sistema para armazenar dados. O database master, por exemplo, não deveria nem ter objetos de usuário lá. Não é à toa que esse artigo está na categoria “O que não fazer” do meu blog.. rs

Caso você queira conhecer todas as limitações do SQL Server Express e conhecer também a versão Developer, e saber em quais cenários você pode utilizar essa versão COMPLETA e GRATUITA do SQL Server, não deixe de ler o meu artigo SQL Server Express e Developer – Até onde podemos usar as versões gratuitas do SQL Server?.

Espero que tenham gostado desse artigo, um grande abraço e até a próxima!