Qual a importância das VLFs do log de transações para o desempenho?

12

Qual a importância das VLFs ao considerar o desempenho do banco de dados? O que descreveria uma situação ideal para VLFs?

the_good_pony
fonte
Para ler mais, veja a minha pergunta em dba.stackexchange.com/questions/25408/...
Max Vernon
Cool - Eu posso ver este ser útil para os relatórios sobre o desempenho
the_good_pony
1
@DBAWaffle Consulte: Experimentos com SQL Server VLFs, Parte 1 de Glenn Berry -> sqlskills.com/blogs/glenn/...
Kin Shah

Respostas:

17

O que é um arquivo de log virtual?

O SQL Server divide o arquivo de log de transações de cada banco de dados em blocos menores, chamados 'arquivos de log virtuais' (ou VLFs, abreviado). Sua função principal é como marcadores de truncamento em um backup de log, ou seja, o SQL Server somente limpa (e marca disponível para reutilização) VLFs que estão completamente vazios. O MSDN possui uma peça no log de transações - arquitetura física .

O que determina o número de VLFs?

Cada vez que um arquivo de log cresce (seja por crescimento automático ou crescimento manual), a nova seção do arquivo de log é dividida em um número de VLFs, baseado exclusivamente no tamanho da nova seção (o log de transações existente é deixado em paz). Portanto, pequenas configurações de crescimento automático (ou seja, o crescimento automático de 10% que é o padrão) farão com que um grande número de VLFs seja criado.

Quais são as implicações de um grande número de VLFs?

O principal problema causado por um grande número de VLFs é:

  • Recuperação lenta (recuperação é uma fase durante a restauração do banco de dados em que as transações concluídas são gravadas nas páginas de dados e as transações incompletas são revertidas).
  • Desempenho lento do leitor de log em uma configuração de espelhamento de banco de dados.
  • Desempenho lento durante a criação da captura instantânea do banco de dados (observe que isso também inclui certas funções, DBCCpois elas usam capturas instantâneas do banco de dados em segundo plano para facilitar verificações de consistência sem bloquear).

Como posso descobrir quantos VLFs meu banco de dados possui?

DBCC LOGINFOretornará 1 linha para cada VLF no log de transações do seu banco de dados. Esta pergunta possui alguns scripts úteis para aplicar isso em todos os bancos de dados em um servidor.

Quantos VLFs são muitos?

Essa é uma decisão que você terá que fazer por si mesmo. Minha regra de ouro pessoal é que abaixo dos 50 não vale a pena mexer, e mais de 100 (mais ou menos) e eu ajusto as configurações de crescimento automático e faço uma anotação mental para (na próxima janela de manutenção) diminuir e recuperar o registro (como abaixo) .

Socorro! Eu tenho onze bilhões de VLFs e minha recuperação de banco de dados leva o dia todo!

Breve resumo (do blog de Kimberly Tripp ):

  • Verifique se você é a única conexão ativa no banco de dados (faça isso durante uma janela de manutenção)
  • Faça backup do log de transações no disco (usando BACKUP LOG)
  • Execute DBCC SHRINKFILEcom TRUNCATEONLYpara reduzir o arquivo de log para o menor tamanho possível.
  • Execute ALTER DATABASE [...] MODIFY FILE [...] SIZE=newsizepara redimensionar o backup do seu log de transações em uma única etapa **.

** Nota - se você tiver um arquivo de log muito grande (dezenas de GBs ou mais), convém redimensionar em várias etapas para obter um número apropriado de VLFs com um tamanho apropriado para evitar backups de log excessivamente "pesados". Como as VLFs são a unidade de truncamento, elas também determinam os tamanhos de backup de log, conforme detalhado no blog de Kim .

Simon Righarts
fonte
Obrigado, você acha que várias VLFs obviamente impediriam o desempenho em um ambiente OLTP alto, onde os dados são alterados regularmente, um grande número de confirmações a serem realizadas?
the_good_pony
Um grande número de VLFs é realmente realmente notável nas situações descritas acima (recuperação, instantâneos, espelhamento). Eles podem prejudicar um pouco o desempenho em um ambiente OLTP, mas apenas marginalmente.
Simon Righarts
1
Para mim, a recuperação de mais de 20 horas foi o que me convenceu da importância de manter uma contagem baixa (sub 1.000) de VLF.
Max Vernon
@SimonRigharts Estou curioso. Um grande número de VLFs afeta o desempenho regular das transações? Ou afeta apenas backups e restaurações?
Chris Aldrich
@ChrisAldrich Pode haver um pequeno nível de sobrecarga em uma transação se ela ultrapassar um limite de VLF (mas se houver, eu não ouvi falar disso), mas conforme detalhado na pergunta, a única vez em que você realmente perceberá o impacto de uma transação. um grande número de VLFs ocorre durante a recuperação, o espelhamento ou as capturas instantâneas.
Simon Righarts