O backup de um banco de dados reduz o tamanho do log de transações?

8

Estou tentando reunir algum conhecimento sobre bancos de dados SQL e tenho algumas perguntas sobre o arquivo de log de transações (LDF).

Primeiro, quando você cria um banco de dados, é necessário definir um Tamanho de arquivo inicial para o banco de dados e o arquivo de log. Pelo que pude ver, uma vez que os arquivos são criados no disco, eles terão o tamanho especificado, independentemente de haver dados reais no banco de dados ou de transações (logs).

Meu entendimento era que fazer backup de um banco de dados:

  1. Trunca o log de transações e
  2. Diminui o tamanho

do arquivo LDF no disco "esvaziando" os logs dentro dele.

Agora parece que eu não estava entendendo isso corretamente porque o arquivo de log parece ter tamanho fixo. Minha pergunta real é assim:

O que os truncamentos de logs realmente fazem no arquivo de log (LDF)? Esse processo deve impedir que os discos fiquem cheios.

Por favor, corrija-me se não estiver entendendo alguns conceitos corretamente.

Obrigado!

Anthony
fonte

Respostas:

20

O arquivo de log de transações (LDF) é composto de vários arquivos de log virtuais (VLFs). Pense nisso como um armário com várias gavetas extraíveis. Você pode escolher um armário grande ou pequeno - mas ainda será um tamanho fixo com apenas um número diferente de gavetas.

À medida que o SQL Server funciona, ele coloca suas transações em gavetas (VLFs). Começa em uma extremidade do seu gabinete, preenche a primeira gaveta e, quando o espaço acaba nessa gaveta, passa para a próxima gaveta.

Quando você faz backup do log de transações, o que realmente está fazendo é:

  • Localizando a primeira gaveta que possui transações que ainda não foram copiadas
  • Copiando essas transações para outro local
  • Se essa gaveta não estiver mais ativamente em uso (porque o SQL Server passou para a próxima gaveta), você estará marcando essa gaveta como disponível para reutilização (pense nisso como jogando todo o conteúdo)

Os backups não alteram o tamanho do seu gabinete (arquivo de log).

Brent Ozar
fonte
Oi Brent, obrigado por esclarecer isso para mim, agradeço! Então, basicamente, você não pode reduzir o tamanho do "armário", você pode apenas esvaziar as gavetas. Agora, leio muitas postagens de pessoas falando sobre diminuir o tamanho do log. Isso se referir a reduzir o tamanho das VLFs (conteúdo da gaveta) e realmente diminuir o tamanho do arquivo LDF no disco? Pelo que agora posso entender, você não pode mudar o "gabinete". Obrigado!
Anthony
@Anthony sim, você pode reduzir o tamanho do gabinete, reduzindo o tamanho do arquivo de log, mas geralmente, isso é uma idéia muito ruim (pelas razões que você já leu sobre.)
Brent Ozar
Eu vetaria a afirmação de que reduzir um TLog é ruim. O acesso ao Tlog é razoavelmente seq. na natureza. Não há reorganização de dados necessária ao reduzir o log (como nos arquivos de dados. Você pode liberar apenas o espaço após o último ponteiro ativo). Portanto, isso não causa nenhuma fragmentação.
Heiko Hatzfeld
11
O crescimento da @HeikoHatzfeld é uma operação de bloqueio e não utiliza a Inicialização Instantânea de Arquivos, por isso é muito lento. Veto anulado. ;-)
Brent Ozar
Você não faz nada regularmente, mas apenas uma vez depois de perceber que não configurou um plano de backup correto ... E o fator de crescimento deve ser um tamanho constante e razoável. Nessas condições, é suportável.
precisa saber é o seguinte
6

Correspondência e mistura

Fazer backup do log de transações não é o mesmo que truncar o arquivo de log de transações, e truncar o arquivo de log de transações não é o mesmo que reduzir o arquivo de log de transações. Ah, sim, e o backup do arquivo de log de transações não precisa acionar um truncamento. Dependendo da carga atual, o mecanismo do banco de dados pode decidir definir um ponto de verificação, mas aguardar um pouco com o truncamento.

Explicando

O arquivo de log de transações é o local em que o mecanismo do banco de dados armazena modificações feitas nos dados em um banco de dados, independentemente de o banco de dados estar no modelo de recuperação SIMPLE ou no modelo de recuperação COMPLETO. (Importante)

Agora, o arquivo de log de transações do banco de dados não é apenas um contêiner de armazenamento contínuo, mas uma coleção de VLFs (Arquivos de Log Virtuais) criados em uma ordem sequencial dentro do arquivo TLog (Transaction Log). O tamanho dos VLFs varia dependendo da versão do SQL Server em uso no momento e também do tamanho inicial selecionado durante a criação do arquivo TLog e também do tamanho selecionado (se houver) para a configuração de crescimento automático do Arquivo TLog.

Referências:
- Alteração importante no algoritmo de criação de VLF no SQL Server 2014 (SQLSkills.com)
- Números de sequência iniciais de VLF e tamanho padrão do arquivo de log (SQLSkills.com)
- Dentro do mecanismo de armazenamento: mais informações sobre a natureza circular do log (SQLSkills. com)
... e talvez na ordem inversa

Quando os dados são modificados no banco de dados, o Mecanismo de Banco de Dados gravará essas alterações no TLog do banco de dados correspondente para manter a consistência transacional. Isso também é conhecido como ACID - Atomicidade, Consistência, Isolamento, Durabilidade . As transcensões reais dessas alterações são armazenadas nos VLFs do TLog (arquivo). Quando um VLF estiver cheio, as transações mais recentes serão armazenadas no próximo VLF disponível em ordem sequencial.

Exceções

No entanto, se o final do arquivo TLog for alcançado, as modificações serão armazenadas no primeiro VLF no início do arquivo TLog. (explicado em Por dentro do mecanismo de armazenamento: mais informações sobre a natureza circular do log )

Quando não houver VLFs disponíveis livres para armazenar novas transações e se a configuração de crescimento automático estiver configurada, o Mecanismo de Banco de Dados aumentará o arquivo TLog pela quantidade definida e criará VLFs adicionais, dependendo do tamanho definido nas configurações de crescimento automático e na fórmula explicado em Alteração importante no algoritmo de criação de VLF no SQL Server 2014 . Transações adicionais podem ser armazenadas no próximo VLF dentro do arquivo TLog.

Fazendo backup do arquivo TLog

Quando você aciona um backup do arquivo TLog, tudo o que você está fazendo é dizer ao mecanismo de banco de dados para

  • dê uma olhada no arquivo TLog
  • determinar quando ocorreu o último backup do log de transações (LSN: Log Sequence Number; para pesquisas adicionais)
  • definir um ponto de verificação no arquivo TLog ( pontos de verificação do banco de dados (SQL Server) )
  • armazene uma cópia de backup do arquivo TLog no disco / fita, mantendo o controle do LSN anterior e do último LSN confirmado imediatamente antes da conclusão do backup
  • transferir todas as modificações para o "banco de dados"
  • marcar os VLFs como reutilizáveis

Até agora, nenhum espaço foi liberado dentro do arquivo TLog para o mecanismo de banco de dados reutilizar ...

Truncamento automático do arquivo TLog

... mas se o Mecanismo de Banco de Dados tiver alguns ciclos de sobra e não estiver sob muita pressão, ocasionalmente consultará o arquivo TLog, observe o Ponto de Verificação e libere os VLFs para reutilização. O espaço dentro do arquivo TLog ainda é usado pelos VLFs (mesmo tamanho, mesmo local), mas eles podem ser reutilizados gratuitamente.

Isso está documentado no truncamento do log de transações :

Exceto quando atrasado por algum motivo, o truncamento do log ocorre automaticamente da seguinte maneira: - No modelo de recuperação simples, após um ponto de verificação.

  • No modelo de recuperação completa ou no modelo de recuperação com registro em massa, após um backup de log, se um ponto de verificação ocorreu desde o backup anterior. Para obter mais informações, consulte "Truncamento de log nos modelos de recuperação completo e com registro em massa", posteriormente neste tópico.

Existem alguns casos em que isso não acontece:

Embora automático, o truncamento de log pode ser atrasado por vários fatores. Para obter informações sobre o que pode atrasar o truncamento de log, consulte Fatores que podem atrasar o truncamento de log .

Visualizando o truncamento de log

O truncamento de log pode ser observado quando você consulta o tamanho do TLog usando instruções SQL ou o relatório Espaço do Banco de Dados na UI do SSMS. Você pode observar que o espaço usado dentro do arquivo TLog pode ser apenas 1% do tamanho do arquivo TLog disponível.

Encolher ou não encolher

A recomendação geral é não reduzir o arquivo TLog, porque ele cresceu por um determinado motivo e possivelmente crescerá novamente para o tamanho que era antes. Mas isso é uma história para outro post. Há algumas boas razões, uma delas quando você está recriando o tamanho dos VLFs dentro do seu arquivo TLog.

Respondendo as suas perguntas

Inline logo abaixo de suas suposições e perguntas

Meu entendimento era que fazer backup de um banco de dados:

  • Trunca o log de transações e

Esta é uma suposição errada. O backup do seu banco de dados (COMPLETO, DIFERENCIAL) não faz nada com os arquivos TLog. Um backup COMPLETO criará um estado consistente do seu banco de dados, juntamente com as transações confirmadas do arquivo TLog. Um backup DIFF criará um estado consistente de todos os backups anteriores do TLog desde o último backup COMPLETO do seu banco de dados.

No entanto, um backup TLOG criará um backup das transações confirmadas do arquivo TLog, definindo um ponto de verificação e possivelmente (quando não estiver sob carga pesada) liberando os VLFs para reutilização.

  • Diminui o tamanho

Não, ao considerar os backups COMPLETO e DIFF. Não, ao considerar os backups do TLOG, ele liberará os VLFs dentro do arquivo TLog, se o mecanismo do banco de dados tiver algum tempo de sobra.

O que os truncamentos de logs realmente fazem no arquivo de log (LDF)? Esse processo deve impedir que os discos fiquem cheios.

Truncar os logs permite que as VLFs sejam reutilizadas. Isso é tudo.

Esse processo pode ter o benefício de impedir que o arquivo TLog cresça se as configurações de crescimento automático tiverem sido definidas.

Se nenhuma configuração de crescimento automático foi definida , porque seu processo de engenharia de requisitos determinou que o arquivo TLog teria um tamanho fixo, o pior caso aqui é que o TLog é preenchido porque não ocorre nenhum backup do TLog e, portanto, nenhum VLF está sendo liberado. O TLog não pode crescer e as VLFs não são liberadas para permitir que outras transações sejam gravadas no arquivo TLog (ou VLFs internamente).

John aka hot2use
fonte
4

Embora Brent Ozar já tenha lhe dado explicações sobre a aparência do arquivo de log de transações, eu me concentrarei em suas perguntas

Meu entendimento era que fazer backup de um banco de dados:

  • Trunca o log de transações e
  • Diminui o tamanho

O backup completo não faz nada nos logs de transações em nenhum modelo de recuperação. No modelo de recuperação completa, quando você faz o backup do log de transações, ele trunca o log. Observe que se uma transação de longa duração ainda estiver lá, contendo as VLFs ou, conforme a explicação de Brent, ainda precisar das gavetas, outra transação não poderá reutilizar a gaveta ou, em termos técnicos, ela não seria truncada para que possa ser reutilizada.

Também não reduz o log de transações. Para reduzir os logs, você deve usar o dbcc shrinkfilecomando

O que os truncamentos de logs realmente fazem no arquivo de log (LDF)? Esse processo deve impedir que os discos fiquem cheios.

Torna o arquivo de log reutilizável para que outras transações possam usá-lo ou, de acordo com a analogia de Brent, alguém pode usar as gavetas para guardar as coisas.

Depois de passar pela resposta, recomendo que você leia sobre o log de transações no SQLSKILLS.com

Shanky
fonte
Obrigado Shanky, realmente aprecio suas explicações! Portanto, quando os backups truncam logs, eles na verdade não reduzem o tamanho do arquivo LDF, apenas "abrem espaço" para que outras transações sejam processadas dentro desse arquivo de log. Estou correto em assumir isso? Obrigado!
Anthony
Você está absolutamente correto.
shanky