Reduzir o log de transações ao usar o grupo de disponibilidade AlwaysOn

17

Estamos usando o AlwaysOn Availability Grouprecurso do SQL Server 2012. Backups completos regulares do banco de dados e backups de log de transações são feitos todos os dias no banco de dados secundário.

Eu li aqui que fazer o backup do log de transações na réplica primária ou na réplica secundária marcará os logs de transação de ambas as réplicas como reutilizáveis. De qualquer forma, o tamanho do backup do log de transações é grande e pode ser reduzido usando o arquivo shrink:

insira a descrição da imagem aqui

Eu restaurei o banco de dados localmente e execute a operação de redução. O tamanho do arquivo de log foi reduzido para 160 MB.

Minha pergunta é em qual banco de dados devo executar uma operação de redução no arquivo de log de transações (primário, secundário ou ambos)?


Acho que, no passado, durante vários anos, nenhum backup do arquivo de log é feito, tornando-o tão grande. Executando DBCC SQLPERF (LOGSPACE), vejo que apenas 0.06%o arquivo é usado - não há sentido em manter tamanho tão grande do arquivo de log. Em [sys].[database_files]I verificar se a sua max_sizeestá definido para -1com growtha 65536então eu acho que quando se precisa de mais espaço ele vai ficar. De qualquer forma, posso reduzi-lo para 5%, por exemplo, a fim de impedir um crescimento futuro. Estou tentando encontrar alguma confirmação de que não é uma má idéia fazê-lo.


Na verdade, os backups (no banco de dados e nos arquivos de log) são executados apenas nos bancos de dados secundários; portanto, será mais fácil executar o arquivo de redução neles, mas o tamanho do arquivo de log principal também será reduzido?

gotqn
fonte

Respostas:

21

Nos AGs, as gravações podem ocorrer apenas no primário. As operações de redução são gravadas. Portanto, você deve reduzir o primário. Observe que o encolhimento pode não encolher tanto quanto o esperado, seu teste no banco de dados restaurado provavelmente alavancou o modelo de recuperação simples. Leia Como reduzir o log do SQL Server para obter mais informações.

Não encolha para 160 MB. Determine por que o log aumentou para 121Gb para que não se repita (você suspeita, seria bom confirmar se possível). Dimensione o log para um tamanho apropriado para suas necessidades operacionais. O crescimento do log é um problema sério, não pode usar a inicialização instantânea de arquivos e toda a atividade do banco de dados congelará enquanto o log cresce e está sendo inicializado com 0. Usuários e aplicativos odeiam quando ocorre. Se você entende o impacto e seus usuários estão bem, pode encolher uma vez para uma quantidade pequena (160 MB provavelmente é muito pequeno) e deixá-lo crescer até que se estabilize.

Remus Rusanu
fonte
7

Podes tentar:

  1. O banco de dados em todos os servidores no Grupo de Disponibilidade deve estar no estado Sincronizado.
  2. Mova as páginas usadas para iniciar o log de transações, antes de reduzi-lo.
  3. Às vezes, o espaço livre disponível do log é de 99%, mas o SQL Server não pode liberar espaço não utilizado. Tente reiniciar cada servidor no grupo de disponibilidade por vez.
  4. Às vezes, é necessário agrupar e reduzir o log de transações duas vezes antes que o MS SQL Server libere espaço livre (Não é possível reduzir o arquivo de log (DB_Log) porque o arquivo de log lógico localizado no final do arquivo está em uso).

Experimente este script:

    --Definir o banco de dados atual dentro da etapa ou script do trabalho
    --Verifique Executar apenas no primário
    if (função SELECT
        FROM sys.dm_hadr_availability_replica_states COMO um
        JOIN sys.availability_replicas AS b
            LIGADO b.replica_id = a.replica_id
    WHERE b.replica_server_name = @@ SERVERNAME) = 1
    INÍCIO
        - Use [test_db] - Não está funcionando para o MS SQL 2014, basta comentar esta linha e definir o banco de dados atual na etapa ou script da tarefa
        1 - Bakup Trn
        LOG DE BACKUP [test_db] PARA DISCO = N'D: \ MSSQL \ Backup \ test_db.trn 'COM NOFORMAT, INIT, NOME = N' Trn Backup ', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10
        - 2) Mover páginas usadas
        DBCC SHRINKFILE (N'test_db_log ', 3000, NOTRUNCATE)
        - 3) Registro SHRINKFILE
        DBCC SHRINKFILE (N'test_db_log ', 3000)
    FIM
Denis P.
fonte