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:
- Trunca o log de transações e
- 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!
fonte
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
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 :
Existem alguns casos em que isso não acontece:
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
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.
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.
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).
fonte
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
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 shrinkfile
comandoTorna 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
fonte