Então meu tempdb está ficando enorme. Tipo mais de 200 GB.
USE tempdb GO EXEC sp_spaceused
database_name database_size unallocated space
tempdb 211668.88 MB 206803.45 MB
Está usando um modelo de recuperação SIMPLES, que de acordo com a Microsoft:
Defina o modelo de recuperação de tempdb como SIMPLE. Este modelo recupera automaticamente o espaço de log para manter os requisitos de espaço pequenos.
Mas 'recuperar espaço de log' significa que ainda mantém a alocação de disco?
Mais ou menos como se eu tivesse um influxo de clientes no meu negócio, então peguei emprestado um lote do outro lado da rua para colocar os carros extras, mas depois que não preciso mais de todo aquele espaço, ainda reservei aquele estacionamento extra para mais tarde (não permitir que qualquer outra pessoa o use) apesar de permanecer vazio?
Se esse for um comportamento normal, posso esperar que esteja acumulando espaço que pensa que pode usar novamente um dia e, portanto, se tivesse espaço 'infinito' para expandir, acabaria parando de crescer com base nos padrões de uso determinados.
Ou é suposto estar devolvendo espaço em disco ao sistema operacional quando ele for lançado?
ATUALIZAR
Também encontrei isto: http://technet.microsoft.com/en-us/library/ms176037(v=sql.105).aspx
Por padrão, o banco de dados tempdb cresce automaticamente conforme o espaço é necessário, porque o MAXSIZE dos arquivos é definido como UNLIMITED. Portanto, o tempdb pode continuar crescendo até que o espaço no disco que contém o tempdb seja esgotado. Você pode evitar que o tempdb cresça sem limites definindo um MAXSIZE para tempdb, mas isso não é recomendado. Limitar o tamanho de tempdb pode fazer com que o banco de dados fique sem espaço em disco. Isso pode causar interrupções significativas em seu ambiente de produção e impedir que os aplicativos em execução concluam as operações.
Talvez eu tenha respondido minha própria pergunta aqui, mas espero que alguém possa esclarecer: segue-se que eu deveria tê-lo em uma unidade/partição por si só? Então, ele pode crescer 'tão grande quanto possível' e, ao mesmo tempo, não ocupar espaço em disco que desejo usar para outras coisas? Mas, nesse caso, eu me pergunto qual é a diferença entre MAXSIZE e realmente não ter mais espaço para crescer fisicamente .
O Tempdb liberará espaço quando você reiniciar o SQL Server ou quando reduzir os arquivos, consulte kb307487. Como foi mencionado, geralmente é uma prática ruim usar o autoshrink. Se você estiver com restrições de espaço porque o tempdb não foi provisionado para armazenamento separado, poderá reduzir os arquivos de dados usando dbcc shrinkfile . Se você não tem que fazer isso, eu não faria. Parece que você tem uma carga de trabalho que precisa de espaço e ter o espaço já alocado evita que ela tenha que crescer novamente. A Microsoft tem algumas orientações sobre como melhorar o desempenho do tempdb.
Sim, os arquivos do SQL Server não encolhem automaticamente. Eles permanecem do mesmo tamanho, a menos que você os reduza explicitamente, por meio do SQL Server Management Studio ou usando o comando DBCC SHRINKFILE. Embora você possa definir arquivos para encolher automaticamente, isso é amplamente desaconselhado porque reduzir/aumentar arquivos exige muitos recursos, especialmente quando você está lidando com arquivos de log que não possuem inicialização instantânea de arquivo.
EDIT: Em resposta à sua edição: há uma diferença entre MAXSIZE e o tamanho que um arquivo pode obter antes de ficar sem disco. Você pode definir isso na seção Arquivos das propriedades do banco de dados ou com um comando ALTER DATABASE.