Reduzir o banco de dados tempdb
Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure
Este artigo discute vários métodos que você pode usar para reduzir o banco de dados tempdb
no SQL Server.
Você pode usar qualquer um dos seguintes métodos para alterar o tamanho do tempdb
. As três primeiras opções são descritas neste artigo. Se você quiser usar o SQL Server Management Studio (SSMS), siga as instruções em Reduzir um banco de dados.
Método | Exige reinicialização? | Mais informações |
---|---|---|
ALTER DATABASE |
Sim | Fornece controle total sobre o tamanho dos arquivos padrão tempdb (tempdev e templog ). |
DBCC SHRINKDATABASE |
Não | Opera em nível de banco de dados. |
DBCC SHRINKFILE |
Não | Permite reduzir arquivos individuais. |
SQL Server Management Studio | Não | Reduzir arquivos de banco de dados por meio de uma interface gráfica do usuário. |
Comentários
Por padrão, o banco de dados tempdb
é configurado para crescer automaticamente conforme necessário. Portanto, esse banco de dados pode crescer inesperadamente com o tempo para um tamanho maior do que o tamanho desejado. Tamanhos de banco de dados maiores tempdb
não afetarão negativamente o desempenho do SQL Server.
Quando o SQL Server é iniciado, tempdb
é recriado usando uma cópia do banco de dados model
e tempdb
é redefinido para seu último tamanho configurado. O tamanho configurado é o último tamanho explícito que foi definido usando uma operação de alteração de tamanho do arquivo, como ALTER DATABASE
que usa a opção MODIFY FILE
ou as instruções DBCC SHRINKFILE
ou DBCC SHRINKDATABASE
. Portanto, a menos que você precise usar valores diferentes ou obter resolução imediata para um banco de dados grande tempdb
, você pode aguardar a próxima reinicialização do serviço SQL Server para que o tamanho diminua.
Você pode diminuir tempdb
enquanto a atividade tempdb
está em andamento. No entanto, você pode encontrar outros erros, como bloqueio, deadlocks e assim por diante, que podem impedir a conclusão de redução. Portanto, para garantir que uma redução de tempdb
com êxito, recomendamos que você faça isso enquanto o servidor estiver no modo de usuário único ou quando você tiver interrompido toda a atividade tempdb
.
O SQL Server registra apenas informações suficientes no log de transações tempdb
para reverter uma transação, mas não para refazer transações durante a recuperação do banco de dados. Esse recurso aumenta o desempenho das instruções INSERT
no tempdb
. Além disso, você não precisa registrar informações para refazer nenhuma transação, pois tempdb
é recriado sempre que você reiniciar o SQL Server. Portanto, ele não tem transações para efetuar roll forward ou para reverter.
Para obter mais informações sobre gerenciamento e monitoramento tempdb
, veja planejamento da capacidade e Monitorar o uso tempdb.
Use o comando ALTER DATABASE
Observação
Esse comando opera somente nos arquivos lógicos tempdb
padrão tempdev
e templog
. Se mais arquivos forem adicionados ao tempdb
, você poderá reduzi-los depois de reiniciar o SQL Server como um serviço. Todos os arquivos tempdb
são recriados durante a inicialização. No entanto, eles estão vazios e podem ser removidos. Para remover arquivos adicionais no tempdb
, use o comando ALTER DATABASE
com a opção REMOVE FILE
.
Esse método requer que você reinicie o SQL Server.
Interrompa o SQL Server.
Em um prompt de comando, inicie a instância no modo de configuração mínima. Para fazer isso, siga estas etapas:
Em um prompt de comando, altere para a pasta onde o SQL Server está instalado (substitua
<VersionNumber>
e<InstanceName>
no exemplo a seguir):cd C:\Program Files\Microsoft SQL Server\MSSQL<VersionNumber>.<InstanceName>\MSSQL\Binn
Se a instância for uma instância nomeada do SQL Server, execute o seguinte comando (substitua
<InstanceName>
no exemplo a seguir):sqlservr.exe -s <InstanceName> -c -f -mSQLCMD
Se a instância for a instância padrão do SQL Server, execute o seguinte comando:
sqlservr -c -f -mSQLCMD
Observação
Os parâmetros
-c
e-f
fazem com que o SQL Server seja iniciado em um modo de configuração mínimo que tenha umtempdb
tamanho de 1 MB para o arquivo de dados e 0,5 MB para o arquivo de log. O parâmetro-mSQLCMD
impede que qualquer outro aplicativo que não seja sqlcmd assuma a conexão de usuário único.
Conecte-se o SQL Server ao sqlcmd e execute os seguintes comandos Transact-SQL. Substitua
<target_size_in_MB>
pelo tamanho desejado:ALTER DATABASE tempdb MODIFY FILE (NAME = 'tempdev', SIZE = <target_size_in_MB>); ALTER DATABASE tempdb MODIFY FILE (NAME = 'templog', SIZE = <target_size_in_MB>);
Interrompa o SQL Server. Para fazer isso, pressione
Ctrl+C
na janela do prompt de comando, reinicie o SQL Server como um serviço e verifique o tamanho dos arquivostempdb.mdf
etemplog.ldf
.
Usar o comando DBCC SHRINKDATABASE
DBCC SHRINKDATABASE
recebe o parâmetro target_percent
. É a porcentagem de espaço livre que você deseja deixar no arquivo de banco de dados após a redução do banco de dados. Se você usar DBCC SHRINKDATABASE
, talvez seja necessário reiniciar o SQL Server.
Determine o espaço que é usado atualmente no
tempdb
usando o procedimento armazenadosp_spaceused
. Em seguida, calcule a porcentagem de espaço livre que é deixada para uso como um parâmetro paraDBCC SHRINKDATABASE
. Esse cálculo é baseado no tamanho desejado do banco de dados.Observação
Em alguns casos, talvez seja necessário executar
sp_spaceused @updateusage = true
para recalcular o espaço usado e obter um relatório atualizado. Para obter mais informações, consulte sp_spaceused.Considere o seguinte exemplo:
Suponha que
tempdb
tenha dois arquivos: o arquivo de dados primário (tempdb
.mdf) que é 1.024 MB e o arquivo de log (tempdb.ldf
) que é 360 MB. Suponha que relata quesp_spaceused
o arquivo de dados primário contém 600 MB de dados. Além disso, suponha que você deseja reduzir o arquivo de dados primário para 800 MB. Calcule a porcentagem desejada de espaço livre restante após a redução: 800 MB - 600 MB = 200 MB. Agora, divida 200 MB por 800 MB = 25 por cento, e esse é o seutarget_percent
. O arquivo de log de transações é reduzido de acordo, deixando 25% ou 200 MB de espaço livre depois que o banco de dados é reduzido.Conecte-se ao SQL Server com o SSMS, o Azure Data Studio ou o sqlcmd e execute o seguinte comando Transact-SQL. Substitua
<target_percent>
pela porcentagem desejada:DBCC SHRINKDATABASE (tempdb, '<target_percent>');
Há limitações com o comando DBCC SHRINKDATABASE
em tempdb
. O tamanho de destino para arquivos de dados e de log não pode ser menor do que o tamanho especificado quando o banco de dados foi criado ou menor do que o último tamanho que foi explicitamente definido usando uma operação de alteração de tamanho do arquivo, como ALTER DATABASE
que usa a opção MODIFY FILE
. Outra limitação é o cálculo DBCC SHRINKDATABASE
do parâmetro target_percentage
e sua dependência do espaço atual utilizado.
Usar o comando DBCC SHRINKFILE
Use o comando DBCC SHRINKFILE
para reduzir os arquivos individuais tempdb
. DBCC SHRINKFILE
fornece mais flexibilidade do que DBCC SHRINKDATABASE
porque você pode usá-lo em um único arquivo de banco de dados sem afetar outros arquivos que pertencem ao mesmo banco de dados. DBCC SHRINKFILE
recebe o parâmetro target_size
. Este é o tamanho final desejado para o arquivo de banco de dados.
Determine o tamanho desejado para o arquivo de dados primário (
tempdb.mdf
), o arquivo de log (templog.ldf
) e os arquivos adicionais adicionados aotempdb
. Verifique se o espaço usado nos arquivos é menor ou igual ao tamanho de destino desejado.Conecte-se ao SQL Server com o SSMS, o Azure Data Studio ou o sqlcmd e execute os seguintes comandos Transact-SQL para os arquivos de banco de dados específicos que você deseja reduzir. Substitua
<target_size_in_MB>
pelo tamanho desejado:USE tempdb; GO -- This command shrinks the primary data file DBCC SHRINKFILE (tempdev, '<target_size_in_MB>'); GO -- This command shrinks the log file, examine the last paragraph. DBCC SHRINKFILE (templog, '<target_size_in_MB>'); GO
Uma vantagem é DBCC SHRINKFILE
que ele pode reduzir o tamanho de um arquivo para um tamanho menor do que seu tamanho original. Você pode emitir DBCC SHRINKFILE
em qualquer um dos arquivos de dados ou de log. Não é possível tornar o banco de dados menor do que o tamanho do banco de dados model
.
Erro 8909 ao executar operações de redução
Se tempdb
estiver sendo usado e se você tentar reduzi-lo usando os comandos DBCC SHRINKDATABASE
DBCC SHRINKFILE
, você poderá receber mensagens semelhantes à seguinte, dependendo da versão do SQL Server que você está usando:
Server: Msg 8909, Level 16, State 1, Line 1 Table error: Object ID 0, index ID -1, partition ID 0, alloc unit ID 0 (type Unknown), page ID (6:8040) contains an incorrect page ID in its page header. The PageId in the page header = (0:0).
esse erro não indica nenhuma corrupção real no tempdb
. No entanto, pode haver outras razões para erros de dados corrompidos físicos, como o erro 8909, e que esses motivos incluem problemas de subsistema de E/S. Portanto, se o erro acontecer fora das operações de redução, você deve fazer mais investigação.
Embora uma mensagem 8909 seja retornada ao aplicativo ou ao usuário que está executando a operação de redução, as operações de redução não falharão.
Conteúdo relacionado
- Considerações para as configurações de crescimento automático e redução automática no SQL Server
- Arquivos e grupos de arquivos do banco de dados
- sys.databases (Transact-SQL)
- sys.database_files (Transact-SQL)
- Reduzir um banco de dados
- DBCC SHRINKDATABASE (Transact-SQL)
- DBCC SHRINKFILE (Transact-SQL)
- Excluir arquivos de dados ou de log de um banco de dados
- Reduzir um arquivo