CORREÇÃO: Desempenho lento quando você recuperar um banco de dados se houver muitos VLFs dentro do log de transação no SQL Server 2005, no SQL Server 2008 ou no SQL Server 2008 R2

Traduções deste artigo Traduções deste artigo
ID do artigo: 2455009 - Exibir os produtos aos quais esse artigo se aplica.
A Microsoft distribui o Microsoft SQL Server 2005, 2008 e 2008 R2 corrige como um arquivo para download. Como as correções são cumulativas, cada versão nova contém todos os hotfixes e todas as correções de segurança que foram incluídas com o anterior SQL Server 2005, 2008 e 2008 R2 corrigir lançamento.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Considere o seguinte cenário:
  • Você instala o Microsoft SQL Server 2005, Microsoft SQL Server 2008 ou Microsoft SQL Server 2008 R2 em um computador.
  • Um ou mais dos bancos de dados estão no modelo de recuperação completo ou bulk-logged.
  • O tamanho inicial de um arquivo de log de transações do banco de dados é pequeno. No entanto, o arquivo de transação cresce grande.
  • O crescimento automático incremento de crescimento do arquivo de log de transação é configurado como um tamanho pequeno. Por exemplo, o crescimento automático incremento de crescimento é configurado para um megabyte ou um por cento. Ou, verifique o arquivo de log de transação aumente usando um pequeno crescimento manual.
  • O arquivo de log de transação cresce o incremento pequeno crescimento. Após alguns instantes, o arquivo de log de transação é grande.

    Por exemplo, o arquivo de log de transação cresce de 100 megabytes até 10 GB. O arquivo de log de transação cresce incremento de um megabyte em cada crescimento.
Neste cenário, pode ocorrer os seguintes problemas:
  • Recuperação de banco de dados é lenta quando o banco de dados é iniciado se houver um grande volume de trabalho para recuperar.

    Por exemplo, uma transação está pendente aberto por muito tempo. Ou então, muitas das transações que são pequenas em tamanho não são confirmadas quando o SQL Server é desligado ou reiniciadas. Nesse caso, você pode receber um erro por um período de tempo estimado de recuperação na fase de análise, na fase Desfazer ou na fase de ações a serem refeitas. O erro é semelhante ao seguinte e é registrado no arquivo de log de erro do SQL Server 2005:
    Análise do banco de dados 'mydatabase' (7) é 0% concluído (permanecem aproximadamente 1234 segundos). Isso é apenas uma mensagem informativa. Nenhuma ação é necessária.
  • Recuperação de banco de dados é lenta quando um arquivo de backup do banco de dados completo e uma seqüência de log de transações adicional são restaurados se o banco de dados for colocado on-line.

    Observação Para colocar o banco de dados on-line durante a operação de restauração, use o COM A RECUPERAÇÃO sintaxe ou a COM O MODO DE ESPERA = <options></options> sintaxe.
  • Recuperação de espelhamento de banco de dados é lento em um servidor parceiro no par de espelhamento.
  • O progresso do log reader agent para replicação transacional é lento para as seguintes operações:
    • O log de transação de um banco de dados do publisher é analisado.
    • Um comando é adicionado em um banco de dados de distribuição.
    • As transações são replicadas.

    Observação Para obter mais informações, visite o seguinte site da Microsoft Developer Network (MSDN):
    949523 A latência de uma replicação transacional é alta no SQL Server 2005, quando o valor da propriedade "Tamanho inicial" e o valor da propriedade Autogrowth são pequenos
  • Desempenho lento ocorre quando um instantâneo de banco de dados é criado se muitas transações são registradas ou se os logs de transação ficam ativos por um longo tempo. Esse problema ocorre porque o instantâneo tem que executar a recuperação e os logs de transação deve ser revertido.
  • Desempenho lento ocorre quando você usar o DBCC CHECKDB verifica a sintaxe para criar um instantâneo de banco de dados oculto que tem para recuperar totalmente o instantâneo de banco de dados para executar a consistência.

Causa

Esses problemas ocorrem porque os arquivos de Log virtuais (VLFs) em um arquivo de log de transação pode causar desempenho lento ao SQL Server examina essas VLFs durante as operações a seguir:
  • Recuperação de banco de dados
  • Espelhamento de banco de dados
  • Instantâneo do banco de dados
  • Atividades de leitor de log do banco de dados replicação transacional
Quando um arquivo de log de transações para um banco de dados tiver crescido demais em pequenos incrementos durante condições de crescimento extremo, milhares a centenas de milhares de VLFs estão presentes em um único conjunto de arquivos de log (. ldf) da transação. No entanto, crescimento de log grandes em incrementos grandes cria apenas vários VLFs por comparação. Por exemplo, vários podem ser menor do que 100 VLFs.

Observação Os VLFs são as divisões ou segmentos que são usados internamente pelo SQL Server no arquivo de log de transação.

Resolução

Informações da atualização cumulativa

SQL Server 2008 R2

A correção para esse problema foi lançado pela primeira vez na atualização cumulativa 6. Para obter mais informações sobre como obter esse pacote de atualização cumulativa para SQL Server 2008 R2, clique no número abaixo para ler o artigo na Base de dados de Conhecimento Microsoft:
2489376 Pacote de atualização cumulativa 6 para SQL Server 2008 R2
Observação Como as compilações são cumulativas, cada novo lançamento de correções contém todos os hotfixes e todas as correções de segurança que foram incluídas com o SQL Server 2008 R2 anteriores corrigir lançamento. Recomendamos que você considere a aplicação a versão mais recente de correção que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento Microsoft:
981356 O SQL Server 2008 R2 compilações lançadas após o lançamento do SQL Server 2008 R2

SQL Server 2008 Service Pack 1

A correção para esse problema foi lançada em 12 de atualização cumulativa para SQL Server 2008 Service Pack 1. Para obter mais informações sobre esse pacote de atualizações cumulativas, clique no número abaixo para ler o artigo na Base de dados de Conhecimento Microsoft:
2467236 Pacote de atualizações cumulativas 12 para SQL Server 2008 Service Pack 1
Observação Como as compilações são cumulativas, cada novo lançamento de correções contém todos os hotfixes e todas as correções de segurança que foram incluídas com o SQL Server de 2008 a anterior corrigir lançamento. A Microsoft recomenda que você considere a aplicação a versão mais recente de correção que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento Microsoft:
970365 O SQL Server 2008 compilações disponibilizadas após o lançamento do SQL Server 2008 Service Pack 1
Os hotfixes do Microsoft SQL Server 2008 são criados para service packs específicos do SQL Server. Você deve aplicar um hotfix do SQL Server 2008 Service Pack 1 para uma instalação do SQL Server 2008 Service Pack 1. Por padrão, todos os hotfixes fornecidos em um service pack do SQL Server está incluído no próximo service pack do SQL Server.

SQL Server 2008 Service Pack 2

A correção para esse problema foi lançada pela primeira vez na atualização cumulativa 2 para SQL Server 2008 Service Pack 2. Para obter mais informações sobre esse pacote de atualizações cumulativas, clique no número abaixo para ler o artigo na Base de dados de Conhecimento Microsoft:
2467239 Pacote de atualizações cumulativas 2 para SQL Server 2008 Service Pack 2
Observação Como as compilações são cumulativas, cada novo lançamento de correções contém todos os hotfixes e todas as correções de segurança que foram incluídas com o SQL Server de 2008 a anterior corrigir lançamento. A Microsoft recomenda que você considere a aplicação a versão mais recente de correção que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento Microsoft:
2402659 O SQL Server 2008 compilações disponibilizadas após o lançamento do SQL Server 2008 Service Pack 2
Os hotfixes do Microsoft SQL Server 2008 são criados para service packs específicos do SQL Server. Você deve aplicar um hotfix do SQL Server 2008 Service Pack 2 para uma instalação do SQL Server 2008 Service Pack 2. Por padrão, todos os hotfixes fornecidos em um service pack do SQL Server está incluído no próximo service pack do SQL Server.

SQL Server 2005 Service Pack 3

A correção para esse problema foi lançada em 13 de atualização cumulativa para SQL Server 2005 Service Pack 3. Para obter mais informações sobre esse pacote de atualizações cumulativas, clique no número abaixo para ler o artigo na Base de dados de Conhecimento Microsoft:
2438344 Pacote de atualizações cumulativas 13 para SQL Server 2005 Service Pack 3
Observação Como as compilações são cumulativas, cada novo lançamento de correções contém todos os hotfixes e todas as correções de segurança que foram incluídas com o SQL Server 2005 anteriores corrigir lançamento. A Microsoft recomenda que você considere a aplicação a versão mais recente de correção que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento Microsoft:
960598 Compilações de SQL Server 2005 que foram lançadas após o lançamento do SQL Server 2005 Service Pack 3
Os hotfixes do Microsoft SQL Server 2005 são criados para service packs específicos do SQL Server. Você deve aplicar um hotfix do SQL Server 2005 Service Pack 3 para uma instalação do SQL Server 2005 Service Pack 3. Por padrão, todos os hotfixes fornecidos em um service pack do SQL Server está incluído no próximo service pack do SQL Server.

SQL Server 2005 Service Pack 4

A correção para esse problema foi lançada pela primeira vez na atualização cumulativa 1 para SQL Server 2005 Service Pack 4. Para obter mais informações sobre esse pacote de atualizações cumulativas, clique no número abaixo para ler o artigo na Base de dados de Conhecimento Microsoft:
2464079 Pacote de atualização cumulativa 1 para SQL Server 2005 Service Pack 4
Observação Como as compilações são cumulativas, cada novo lançamento de correções contém todos os hotfixes e todas as correções de segurança que foram incluídas com o SQL Server 2005 anteriores corrigir lançamento. A Microsoft recomenda que você considere a aplicação a versão mais recente de correção que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento Microsoft:
2485757 Compilações de SQL Server 2005 que foram lançadas após o lançamento do SQL Server 2005 Service Pack 4
Os hotfixes do Microsoft SQL Server 2005 são criados para service packs específicos do SQL Server. Você deve aplicar um hotfix do SQL Server 2005 Service Pack 4 para uma instalação do SQL Server 2005 Service Pack 4. Por padrão, todos os hotfixes fornecidos em um service pack do SQL Server está incluído no próximo service pack do SQL Server.

Situação

A Microsoft confirmou que este é um problema nos produtos Microsoft que estão listados na seção "Aplica-se a".

Como Contornar

Instale esse hotfix e reiniciar o SQL Server pode melhorar o desempenho de recuperação. Por exemplo, o desempenho pode ser melhorado para as seguintes operações depois de instalar esse hotfix e reiniciar o SQL Server:
  • Recuperação de banco de dados
  • Espelhamento de banco de dados
  • Instantâneo do banco de dados
  • Atividades de leitor de log do banco de dados replicação transacional

Se você não conseguir instalar esse hotfix, você pode executar as seguintes soluções alternativas para atenuar um problema existente e impedir que uma ocorrência futura.

Atenuar um problema existente

  • Aguarde até que a operação de restauração ou recuperação para concluir

    Se você tiver um banco de dados não recuperado que está apresentando um desempenho lento quando você restaurar ou recuperação do banco de dados, você terá que aguardar que a operação de restauração ou recuperação seja concluída. Por exemplo, você pode ver o status off-line ou o status da recuperação no SQL Server Management Studio (SSMS) para um banco de dados não-recuperado. Interromper o SQL Server normalmente não oferece nenhum alívio para uma recuperação lenta e pode levar mais tempo para repetir a mesma fase de análise de recuperação, Refazer fase ou desfazer fase.
  • Evitar a restauração de seqüência de log de transação que contém milhares de VLFs

    Se você enfrentar desempenho lento enquanto você restaurar e recuperar um banco de dados usando um arquivo de backup, você pode evitar restaurando as seqüências de log de transação que contêm milhares de VLFs. Para identificar o arquivo de backup que tem a maioria dos arquivos de log virtuais registrados, use a instrução a seguir para ver as colunas FirstLSN e LastLSN nos arquivos de backup de log:
    RESTORE HEADERONLY de DISK='C:\folder\file.trn'

    Você pode decidir evitar a restauração de arquivos de log de backup. Ou, você pode usar o PARAR AT instrução do RESTAURAÇÃO comandos para evitar as partes altamente fragmentadas dos logs de transação. Se você não restaurar totalmente as seqüências de log até o ponto mais recente durante um cenário de recuperação de falhas, ocorrerá perda de dados no banco de dados do SQL Server. Esta perda de dados ocorre porque nem todas as transações são mantidas. Portanto, é uma decisão de compensação de negócios. Você pode restaurar completamente um log de transações altamente fragmentados. No entanto, esta operação pode levar várias horas. Ou, você pode usar o PARAR AT instrução em recuperação para interromper a recuperação antes da parte altamente fragmentada do log. No entanto, todas as transações ausentes que você omitir são perdidas.

    Observação Sem instalar esse hotfix, não é normalmente sem recursos seguros para recuperação rápida após a reinicialização do SQL Server. SQL Server tem que localizar a lista de VLFs para analisar os arquivos de log, para transações de refazer concluída e desfazer as transações incompletas para concluir a recuperação para colocar o banco de dados on-line com segurança. Com segurança, você não pode ignorar transações durante a recuperação.

Impedir que uma ocorrência futura

  • Definir o incremento de crescimento automático do banco de dados para um tamanho apropriado

    Se o tamanho do incremento de crescimento automático for muito pequeno, haverá vários arquivos de Log virtuais (VLFs) e você pode enfrentar desempenho lento no SQL Server. Se o tamanho do incremento de crescimento automático for muito grande, consultas que compõem a transação logs crescem automaticamente terá que esperar muito tempo para concluir um crescimento. Portanto, pode ocorrer um erro de tempo limite no SQL Server. Para contornar esses problemas, você pode definir o tamanho do incremento de crescimento automático do banco de dados para um tamanho adequado.
  • Eliminar o grande número de VLFs e use um crescimento manual

    Se muitos VLFs no log de transações, reduzir o tamanho do log de transação e torná-lo a aumentar antes de negócios de pico para atender à demanda usando um crescimento manual. Por exemplo, o log de transações aumenta para um tamanho médio razoável em um grande incremento ou em um único crescimento manual. Portanto, o tamanho do log de transação alcança uma capacidade máxima, e os arquivos de log de backup estão agendados em uma base periódica e freqüente. Além disso, o log de transações pode ser truncado e VLFs para o log de transações podem ser reutilizados em um ciclo.
  • Como reduzir e aumentar o log de transações manualmente

    Para corrigir um log que tenha muitos VLFs, siga estas etapas para reduzir o log e aumentá-lo novamente manualmente:
    1. Se o banco de dados em um modelo de recuperação completo ou bulk-logged, você precisa fazer backup do log de transação para permitir os VLFs ativos para ser truncado e para ser reutilizado.
      BACKUP LOG databasename TO DISK='C:\folder\log_backupfile.trn'

      Para obter mais informações sobre como fazer backup do arquivo de log de transações usando o SSMS, visite o seguinte site da Microsoft Developer Network (MSDN):
      Como fazer backup do arquivo de log de transações usando o SSMS
      Para obter mais informações sobre como fazer backup do arquivo de log de transação usando instruções de Transact-SQL, visite o seguinte site da MSDN:
    2. Para determinar o nome lógico do arquivo de log de transação, execute uma das instruções a seguir.
      Instrução 1
      exec sp_helpfile 
      Instrução 2
      select * from sys.sysfiles 
      Para reduzir o tamanho do arquivo de log de transação para o tamanho desejado, use o seguinte código:
      DBCC SHRINKFILE(transactionloglogicalfilename, TRUNCATEONLY) 
    3. Você pode aumentar o tamanho do arquivo de log de transação para um tamanho adequado. É recomendável que você permita que o tamanho do arquivo de log de transação aumentar para o tamanho normal de pico. Portanto, o crescimento automático incremento é evitado. Para definir o tamanho do log de transação, use a página de Propriedades de banco de dados no SSMS ou use o seguinte ALTERAR BANCO DE DADOS sintaxe:
      MODIFY FILE ( NAME = transactionloglogicalfilenae, SIZE=newtotalsize MB) 

      Para obter mais informações sobre como aumentar o tamanho do banco de dados no SSMS, visite o seguinte site da MSDN:
      Como aumentar o tamanho do banco de dados no SSMS
      Para obter mais informações sobre o ALTER DATABASE MODIFICAR ARQUIVO sintaxe, visite o seguinte site da MSDN:
      Informações gerais sobre a sintaxe ALTER DATABASE FILE modificar

Mais Informações

Você pode verificar o número de segmentos VLF ao analisar o arquivo de log de erro do SQL e, em seguida, encontrando o número de seqüência de log (LSN) em cada arquivo de backup de log de transação. Os primeiros dígitos antes do símbolo de dois pontos nos LSNs correspondem ao número do LSN.

Por exemplo, o primeiro número na primeira mensagem informativa para o LSN é 1. No entanto, o primeiro número na segunda mensagem informativa para o LSN é 100001. Nesse cenário, há 100.000 VLFs que são usados entre o momento em que a primeira mensagem informativa e a segunda mensagem informativa. Portanto, o log de transação fragmentados conectado que tem muitos arquivos de Log virtuais (VLFs) semelhante à seguinte:

{Log foi feito backup. Banco de dados: mydbname, date(time) de criação: 2010/07/08(12:36:46), primeiro LSN: 1:5068:70, último LSN: 1:5108:1, número de dispositivos de despejo: 1, informações do dispositivo: (arquivo = 1, tipo = DISK: {'C:\folder\logbackup1.trn'}). Isso é apenas uma mensagem informativa. Nenhuma ação é necessária.

Log de backup. Banco de dados: mydbname, date(time) de criação: 2010/07/08(15:36:46), primeiro LSN: 100001:5108:1, último LSN: 100002:5108:1, número de dispositivos de despejo: 1, informações do dispositivo: (arquivo = 2, tipo = DISK: {'C:\folder\logbackup2.trn'}). Isso é apenas uma mensagem informativa. Nenhuma ação do usuário é necessária.}

A tabela a seguir fornece mais informações sobre os produtos e ferramentas de seleção automaticamente para a condição descrita na seção "Sintomas" na sua instância do SQL Server e nas versões do SQL Server com o qual a regra é avaliada.

Recolher esta tabelaExpandir esta tabela
Software de regraTítulo de regraDescrição da regraVersões do produto em relação à qual a regra será avaliada
O System Center AdvisorSQL Server com a replicação transacional, o desempenho do Log Reader Agent pode ser afetado devido ao tamanho do log de transações ou o número de VLFNesta instância do SQL Server o Supervisor detectou a replicação transacional de presença com o número de VLFs ou TLOG tamanho consideravelmente maior. O desempenho do Log Reader Agent será afetado pelo tamanho do log de transações ou do número de VLF. Reduza o tamanho do Log de transação e o número de VLF para melhorar o desempenho do Log Reader Agent.SQL Server 2008

SQL Server 2008 R2

SQL Server 2012



Referências

Para obter mais informações sobre a arquitetura física do log de transação, visite o seguinte site da MSDN:
Informações gerais sobre a arquitetura física do log de transação

Para obter mais informações sobre números de seqüência de log (LSN), visite o seguinte site da MSDN:
Informações gerais sobre os números de seqüência de log

Para obter mais informações sobre o erro 1413 quando inicia o espelhamento de banco de dados, visite o seguinte site da MSDN:
Informações gerais sobre o erro 1413 quando inicia o espelhamento de banco de dados

Para obter mais informações sobre como uma estrutura de arquivos de log pode afetar o tempo de recuperação do banco de dados, visite o seguinte site da MSDN:
Como uma estrutura de arquivos de log pode afetar o tempo de recuperação do banco de dados

Para obter mais informações sobre o log de transação VLFs, visite o seguinte site da MSDN:
Informações gerais sobre o arquivo de log de transação

Para obter mais informações sobre como criar um instantâneo de banco de dados, visite o seguinte site da MSDN:
Como criar um instantâneo de banco de dados
Para obter mais informações sobre o modelo de serviços incrementais para SQL Server, clique no número abaixo para ler o artigo na Base de dados de Conhecimento Microsoft:
935897 Um modelo de serviços incrementais está disponível da equipe do SQL Server para fornecer hotfixes para problemas relatados
Para obter mais informações sobre o esquema para nomeação para atualizações do SQL Server, clique no número abaixo para ler o artigo na Base de dados de Conhecimento Microsoft:
822499Novo esquema para nomeação para pacotes de atualização de software do Microsoft SQL Server
Para obter mais informações sobre a terminologia de atualização de software, clique no número abaixo para ler o artigo na Base de dados de Conhecimento Microsoft:
824684 Descrição da terminologia padrão usada para descrever as atualizações de software

Propriedades

ID do artigo: 2455009 - Última revisão: terça-feira, 7 de janeiro de 2014 - Revisão: 2.0
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Evaluation Edition
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Standard Edition for Small Business
  • Microsoft SQL Server 2008 Workgroup
  • Microsoft SQL Server 2008 R2 Developer
  • Microsoft SQL Server 2008 R2 Enterprise
  • Microsoft SQL Server 2008 R2 Standard
  • Microsoft SQL Server 2008 R2 Workgroup
Palavras-chave: 
kbqfe kbfix kbexpertiseadvanced kbsurveynew kbmt KB2455009 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido pelo software de tradução automática da Microsoft e eventualmente pode ter sido editado pela Microsoft Community através da tecnologia Community Translation Framework (CTF) ou por um tradutor profissional. A Microsoft oferece artigos traduzidos automaticamente por software, por tradutores profissionais e editados pela comunidade para que você tenha acesso a todos os artigos de nossa Base de Conhecimento em diversos idiomas. No entanto, um artigo traduzido pode conter erros de vocabulário, sintaxe e/ou gramática. A Microsoft não é responsável por qualquer inexatidão, erro ou dano causado por qualquer tradução imprecisa do conteúdo ou por seu uso pelos nossos clientes.
Clique aqui para ver a versão em Inglês deste artigo: 2455009

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com