Database
 sql >> Base de Dados >  >> RDS >> Database

Compreensão do grupo de redo log vs arquivo vs membro




Neste tutorial do Oracle, explicaremos uma maneira simples de entender o grupo de redo log vs arquivo vs membro.

Hoje vamos aprender o conceito de buffer de redo log no Oracle. No qual iremos conhecer, o que é buffer de redo log, como funciona e qual o seu papel na arquitetura Oracle.

Se você quiser entender a arquitetura Oracle, é muito importante entender o funcionamento do buffer de redo log. O artigo abaixo irá ajudá-lo a lidar com as perguntas da entrevista também.


Compreensão do grupo de redo log vs arquivo vs membro

O que é um buffer de redo log?


É uma pequena alocação de memória normalmente em torno de 14 MB por padrão. É um buffer cíclico. Quando estiver cheio, ele começará a escrever novamente a partir do topo, substituindo os dados quando estiver cheio.

Qual ​​é a entrada de refazer e alterar o vetor?


A instância do banco de dados Oracle registra todas as transações DML/DDL no buffer de redo log da SGA na forma de entradas de redo. A instrução individual em uma transação resultará em uma ou mais entradas de redo. Todas essas entradas de redo são chamadas coletivamente de vetor de mudança ou vetor de redo.

Cada entrada de redo consiste na instrução redo e na instrução undo, por exemplo:
TABELA EMP
Emprego Nome

Deptno
1 João 10
2 Tony 20
3 Laura 50
4 Tigre 10
5 Scott 10
sql>delete empno from emp where deptno=10;

No exemplo acima, a tabela emp possui 3 registros para deptno=10. Portanto, o Oracle criará 3 entradas de redo para a instrução acima e essas entradas serão gravadas no buffer de redo log. Essas 3 entradas de redo são chamadas coletivamente de vetor de mudança ou vetor de redo.

O vetor de mudança nada mais é do que um número de linhas afetadas por uma única operação. O buffer de redo log captura as transações do usuário e também captura o efeito de anulação (instrução de desfazer) para essa transação.

Funcionamento do processo LGWR


Como o tamanho do buffer de redo log é pequeno e não pode crescer dinamicamente, essas entradas de redo gravadas devem ser gravadas periodicamente no disco em um arquivo de redo log online. Isso geralmente é chamado de liberação do buffer de redo log e o trabalho de gravar essas entradas de redo no disco é feito pelo processo LGWR.

Quando o LGWR grava entradas de redo no disco?


O LGWR é bastante agressivo ao gravar essas entradas no disco. Abaixo estão os eventos em que o LGWR grava entradas de redo no disco.
  • Quando o tamanho do buffer estiver 1/3 cheio
  • Quando houver 1 MB de vetores de alteração disponíveis no buffer de redo log pendente para gravação
  • A cada 3 segundos
  • Sempre que ocorre um ponto de verificação
  • Quando um usuário confirma suas transações

Um parâmetro para definir o tamanho do buffer de redo log


log_buffer=x bytes
Estrutura do Redo Log Buffer

A arquitetura de refazer é composta por 3 coisas

  1. Refazer Thread (lógico)
  2. Grupos de Redolog (lógicos)
  3. Arquivos de membros do Redolog (físicos)

1. O que é o thread de redo log?

  • A criação de um arquivo de controle é fornecida pelo parâmetro “MAXINSTANCES”.
  • Um thread de redo é composto de grupos de redo. O encadeamento de refazer deve estar ativado para estar operacional.
  • No ambiente RAC, você pode vincular um thread de redo a uma instância específica usando o parâmetro init.ora “thread”.

Em um banco de dados não RAC, haveria principalmente um thread (thread =1)

2. Entendendo o grupo de logs redo e seu status?


-Ao criar um arquivo de controle é dado como parâmetro “MAXLOGFILES”.
-Um grupo de redo logs é uma coleção de arquivos de membros de redo logs idênticos.
-Mas, para melhor tolerância a falhas, é comum manter dois arquivos de membro de redo log em cada grupo de redo log.
-Se um for perdido, não afeta. Os arquivos membros do redo log são idênticos (cópias espelhadas)
LGWR grava em todos os membros de um determinado grupo de redo logs em paralelo
A qualquer momento, o processo LGWR grava em apenas um grupo de redo logs. O grupo de redo logs é fixo significa que os arquivos de membros do redo log não podem crescer dinamicamente.
O grupo de redo logs no qual o processo LGWR está gravando no momento é visto com o status “atual”
Quando o grupo de redo logs estiver cheio, o processo LGWR alternará para o próximo grupo de redo logs.
O grupo anterior mostrará o status “ATIVO” e depois de algum tempo o status será “INATIVO”
ATUAL => ATIVO => INATIVO => ATUAL => ATIVO => INATIVO …………………………………
ATUAL status significa oracle atualmente escrevendo neste buffer
ATIVO O ponto de verificação das entradas de redo neste buffer está pendente
INATIVO status significa que o redo log foi verificado e pode ser substituído imediatamente.
Você não pode alterar o tamanho do grupo de redo logs uma vez criado, mas sempre descarta e recria o grupo de redo logs com tamanhos diferentes. Você não pode descartar o grupo de redo logs com status “CURRENT” ou “ACTIVE”.

Como alternar um grupo de redo logs?


Normalmente, o LGWR alterna automaticamente entre os grupos de redo logs, mas você pode alternar manualmente de um grupo de redo logs para outro usando o comando.
sql>alter system switch logfile ;

Toda vez que o LGWR pega um novo grupo de redo logs e atribui um número de incremento monótono a esse grupo de redo logs chamado “Log sequence number” ou “sequence#”. Você pode consultar os metadados dos grupos de redo logs usando view:- v$log Os grupos de redo logs são gravados usando o tamanho do bloco de disco físico (setor de 512 bytes)

Como adicionar um novo grupo de redo log

sql>alter database add logfile group 3 ('/path/to/member1.log', '/path/to/member2.log') size 100m reuse;

Aqui o significado de reutilização diz, reutilize os arquivos membro 1.log ou arquivo member2.log se ele já existir no mesmo caminho.

Como eliminar o grupo de redo log


Você pode descartar grupos de redo logs desde que o status não seja CURRENT ou ACTIVE. Além disso, após aplicar este comando, o número de grupos de redo logs disponíveis deve ser 2 ou mais.
sql>alter database drop logfile groups 3;

3. Arquivos de membros do Redo Log (Físicos)


Ao criar um arquivo de controle, ele é fornecido pelo parâmetro “MAXLOGMEMBERS”. Os arquivos do membro do log de redo estão disponíveis fisicamente no nível do SO. O tamanho do arquivo é fixo no momento da criação do grupo de redo logs.

O arquivo não pode crescer dinamicamente. O LGWR grava em todos os membros de um determinado grupo de redo logs em paralelo.
Os arquivos de membros no grupo de redo logs são idênticos. Você pode consultar as informações de status da visualização v$logfile

Como adicionar um novo membro a um grupo existente?

sql>alter database add logfile member '/path/to/new/member1.log' to group 3;

Você pode remover um membro do grupo desde que permaneça um membro e o status do grupo não seja atual
sql>alter database drop logfile member '/path/to/member_to_be_deleted.log';

Para consultar os detalhes de alternância de redo log
você pode consultar v$log-history
sql>select count(*), trunc(first_time) from v$log_history;

group para sobrescrever as entradas de refazer

Por que vejo "ponto de verificação não concluído" em alert.log


Quando o LGWR chega a um grupo de redo log para substituir as entradas de redo e, nesse momento, se um ponto de verificação desse grupo estiver pendente, você verá uma mensagem no log de alerta "ponto de verificação não concluído" Por causa disso, o LGWR não pode substituir o grupo de redo log imediatamente.

Portanto, o Oracle acionará o “ponto de verificação” que liberará buffers sujos causados ​​por entradas de redo no disco. Somente depois disso, o LGWR pode substituir o buffer de redo. Isso significa que o LGWR precisa esperar algum tempo, o que não é bom. Para superar, adicione mais grupos de redo logs e/ou aumente o tamanho dos grupos de redo logs.

Esperamos que nossos detalhes acima ajudem você a esclarecer sua compreensão do buffer de redo log.

Este é o fim do tutorial, entendendo o grupo de redo log vs arquivo vs membro.