#22
O Buffer de Log é uma importante área da estrutura de memória do Oracle, ela é responsável por armazena os dados quase em tempo real e desta forma evita a perda de dados se houver uma falha no banco de dados.
O Buffer de log é uma área de preparação pequena e de curto prazo que armazena os vetores de alteração antes que eles sejam gravados nos arquivos de Redo Log no disco. Sempre que é executado uma instrução DML (Insert, Delete, Update) é gerado vetores de alteração aplicados aos dados, na sessão do usuário esses vetores ficam armazenado no Cache de Buffer do Banco de Dados e essas informações não são gravadas em tempo real no disco, pois, se fossem a sessão do usuário teria que esperar a resposta de cada I/O o que iria gerar uma grande queda de desempenho, então a sessão do usuário grava os vetores de alteração diretamente na memória do buffer de log, isso é muito mais rápido do que gravar no disco. O Buffer de Log é então gravado nos arquivos de Redo Log, de onde são extraidos e aplicados aos backups de arquivos de dados, se for necessário restaurar um arquivo de dados.
O processo de gravação nos arquivos de Redo Log é um processo independente e trabalha em segundo plano e o LGWR é o processo responsável pela gravação. O Buffer de Log é de uso global, isso quer dizer que os vetores de alteração de todas as sessões dos usuários são gravadas na memória de forma intercalada. A gravação do Buffer de Log no disco pode ser de um lote contendo muitos vetores de alteração provenientes de muitas transações de vários usuários diferentes, e mesmo assim, essas gravações do Buffer Log em disco ocorre quase em tempo real, e quando uma sessão de usuário executa uma instrução COMMIT essa gravação do Buffer de Log em disco ocorre em tempo real, sendo que a sessão que executou o COMMIT fica suspensa até a finalização e confirmação do processo de gravação do Redo Log em disco. O processamento da instrução COMMIT é uma parte crítica da arquitetura da Oracle.
Em comparação com outras estruturas de memória do Oracle o Buffer de Log é pequeno, e deve ser mesmo, pois é um espaço de memória de curto prazo e precisa de apenas alguns megabytes de espaço, o tamanho padrão definido pelo Oracle leva em consideração o número de CPU's do servidor. Disponibilizar um espaço de memória muito maior que o padrão pode afetar seriamente o desempenho e também não é possível configurar um tamanho menor que o padrão, se isso ocorrer esse valor será descartado e será usado o valor padrão. O Buffer de Log é alocado na inicialização da instância e não pode ser redimensionado sem reiniciar a instância.
O Buffer de Log trabalha de forma circular, isso que dizer que a cada vez que o LGWR grava os dados em disco o espaço que estava sendo usado torna-se disponível e pode ser sobrescrito por outros vetores de alteração. Não é possível realizar DML mais rápido do que o processo de LGWR, desta forma, pode ocorrer que em tempos de pico de atividade os vetores de alteração sejam gerados mais rápidos que do que o processo de LGWR podem gravalos em disco, se isso ocorrer, todas as atividades de DML cessará por alguns milessegundos enquando o LGWR limpa o buffer.
A vantagem do RAC é que cada intância possui seu próprio Buffer de Log e seu próprio LGWR, desta forma o uso do RAC é indicado quando a gravação do Redo de Log for a parte limitante em um desempenho de banco de dados.
Se tiverem dúvidas realizem um INSERT nos comentários e depois dê um COMMIT que depois respondo.
Abraço e bons estudos.
Comentários
Postar um comentário