Compartilhar via


Reduzir um arquivo

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

Este artigo descreve como reduzir um arquivo de log ou de dados no SQL Server usando o SQL Server Management Studio ou Transact-SQL.

A redução de arquivos de dados recupera espaço com a movimentação de páginas de dados do final do arquivo para o espaço desocupado mais próximo à frente do arquivo. Quando espaço livre suficiente é criado no final do arquivo, as páginas de dados no final do arquivo podem ser desalocadas e retornadas para o sistema de arquivos.

Limitações

  • O arquivo de dados principal não pode ser menor que o arquivo principal no banco de dados model.

Recomendações

  • Uma operação de redução é mais eficiente depois de uma operação que cria uma grande quantidade de espaço de armazenamento não utilizado, como uma grande instrução DELETE, truncar tabela ou uma operação de remover tabela.

  • A maioria dos bancos de dados exige algum espaço livre disponível para operações comuns rotineiras. Se você reduzir um arquivo de banco de dados repetidamente e perceber que ele aumentou novamente, isso indica a necessidade de espaço livre para as operações regulares. Nesses casos, reduzir repetidamente um banco de dados é uma operação inútil. Os eventos de crescimento automático necessários para aumentar o arquivo de banco de dados prejudicam o desempenho.

  • Os dados movidos para reduzir um arquivo podem ser espalhados para qualquer local disponível no arquivo. Isso provoca uma fragmentação do índice e pode reduzir a velocidade do desempenho de consultas que pesquisam um intervalo do índice. Para eliminar a fragmentação, considere a recompilação dos índices no arquivo após a redução.

  • A menos que você tenha um requisito específico, não defina a opção de banco de dados AUTO_SHRINK como ON.

Comentários

As operações de redução em andamento podem bloquear outras consultas no banco de dados e podem ser bloqueadas por consultas já em andamento. Introduzidas no SQL Server 2022 (16.x), as operações de redução de arquivo têm uma opção WAIT_AT_LOW_PRIORITY. Esse recurso é uma nova opção adicional para DBCC SHRINKDATABASE e DBCC SHRINKFILE. Se uma nova operação de redução em modo WAIT_AT_LOW_PRIORITY não puder obter os bloqueios necessários devido a uma execução prolongada de consulta já em andamento, a operação de redução atingirá o tempo limite após um minuto e se encerrará silenciosamente, impedindo que outras consultas sejam bloqueadas. WAIT_AT_LOW_PRIORITY se aplica a arquivos de dados (.mdf e .ndf). Ele não se aplica a arquivos de log de transações. Para obter mais informações, confira DBCC SHRINKFILE.

Permissões

Exige associação à função de servidor fixa sysadmin ou à função de banco de dados fixa db_owner .

Usar SSMS (SQL Server Management Studio)

Reduzir um arquivo de dados ou de log usando SSMS

  1. No Pesquisador de Objetos, conecte-se a uma instância do Mecanismo de Banco de Dados do SQL Server e expanda-a.

  2. Expanda Bancos de Dados e clique com o botão direito do mouse no banco de dados que deseja reduzir.

  3. Aponte para Tarefas, depois para Reduzir e selecione Arquivos.

    Backup de banco de dados
    Exibe o nome do banco de dados selecionado.

    Tipo de arquivo
    Seleciona o tipo de arquivo para o arquivo. As escolhas disponíveis são arquivos de Dados e de Log . A seleção padrão é Dados. Selecionar um tipo diferente de grupo de arquivos altera as seleções nos outros campos de acordo o tipo selecionado.

    Grupo de arquivos
    Selecione um grupo de arquivos da lista de grupos de arquivos associado com o Tipo de arquivo selecionado acima. Selecionar um grupo de arquivos diferente altera as seleções nos outros campos de acordo o grupo selecionado.

    Nome do arquivo
    Selecione um arquivo da lista de arquivos disponíveis do grupo de arquivos e tipo de arquivos selecionados.

    Localidade
    Exibe o caminho completo para o arquivo atualmente selecionado. O caminho não é editável, mas pode ser copiado para a área de transferência.

    Espaço alocado no momento
    Para arquivos de dados, exibe o espaço alocado no momento. Para arquivos de log, exibe o espaço alocado no momento computado da saída de DBCC SQLPERF(LOGSPACE).

    Espaço livre disponível
    Para arquivos de dados, exibe o espaço livre disponível no momento computado da saída de DBCC SHOWFILESTATS(fileid). Para arquivos de log, exibe o espaço livre disponível no momento computado da saída de DBCC SQLPERF(LOGSPACE).

    Liberar espaço não utilizado
    Faz com que qualquer espaço não utilizado nos arquivos seja liberado para o sistema operacional e reduz o arquivo para a última extensão alocada, reduzindo o tamanho do arquivo sem mover nenhum dado. Não é feita nenhuma tentativa para realocar linhas em páginas não alocadas.

    Reorganizar páginas antes de liberar espaço não utilizado
    Equivale a executar DBCC SHRINKFILE especificando o tamanho do arquivo de destino. Quando essa opção é selecionada, o usuário deve especificar um tamanho de arquivo de destino na Reduzir arquivo a .

    Reduzir arquivo a
    Especifica o tamanho do arquivo de destino para a operação de redução. O tamanho não pode ser menor do que o espaço alocado no momento nem mais do que a extensão total alocada para o arquivo. Digitar um valor abaixo do mínimo ou além do máximo fará com que ele reverta ao mínimo ou ao máximo assim que o foco for alterado ou quando você selecionar qualquer botão da barra de ferramentas.

    Esvaziar o arquivo migrando os dados para outros arquivos do mesmo grupo
    Migra todos os dados do arquivo especificado. Essa opção permite descartar o arquivo usando a instrução ALTER DATABASE. Essa opção é equivalente a executar DBCC SHRINKFILE com a opção EMPTYFILE. Não há suporte a EMPTYFILE no Banco de Dados SQL do Azure ou na Hiperescala do Banco de Dados SQL do Azure.

  4. Selecione o tipo e o nome do arquivo.

  5. Opcionalmente, marque a caixa de seleção Liberar espaço não utilizado .

    Selecionar essa opção faz com que qualquer espaço não usado no arquivo seja liberado para o sistema operacional e reduz o arquivo à última extensão alocada. Isso reduz o tamanho do arquivo sem mover quaisquer dados.

  6. Opcionalmente, marque a caixa de seleção Reorganizar arquivos antes de liberar o espaço não utilizado . Se isso for selecionado, o valor Reduzir arquivo para deve ser especificado. Por padrão, a opção fica desmarcada.

    Selecionar essa opção faz com que qualquer espaço não usado no arquivo seja liberado para o sistema operacional e tenta realocar linhas a páginas não alocadas.

  7. Opcionalmente, insira a porcentagem máxima de espaço livre a ser deixado no arquivo de banco de dados após o banco de dados ter sido reduzido. Os valores permitidos estão entre 0 e 99. Essa opção só está disponível quando Reorganizar arquivos antes de liberar o espaço não utilizado estiver habilitada.

  8. Opcionalmente, marque a caixa de seleção Esvaziar arquivo migrando os dados para outros arquivos no mesmo grupo de arquivos .

    Selecionar essa opção move todos os dados do arquivo especificado para outros arquivos no grupo de arquivos. O arquivo vazio pode, então, ser excluído. Essa opção é igual a executar DBCC SHRINKFILE com a opção EMPTYFILE.

  9. Selecione OK.

Usar o Transact-SQL

Reduzir um arquivo de dados ou de log usando Transact-SQL

  1. Conecte-se ao Mecanismo de Banco de Dados.

  2. Na barra Padrão, selecione Nova Consulta.

  3. Copie e cole o exemplo a seguir na janela de consulta e selecione Executar. Este exemplo usa DBCC SHRINKFILE para reduzir o tamanho de um arquivo de dados denominado DataFile1 no banco de dados UserDB para 7 MB.

USE UserDB;
GO
DBCC SHRINKFILE (DataFile1, 7);
GO