Pular para o conteúdo principal

DBW ( Database Writer ) - Estruturas de Memória no Oracle


#30
Já ouvimos falar dele no post sobre o Cache de Buffer do Banco de Dados, o DBW é o processo preguiçoso que trabalha a menor quantidade possível e o mais raramente possível.

O DBW é o responsável por registrar nos arquivos de dados os buffer sujos, uma instância pode ter vários DBW, sendo que no máximo é 20, e a denominação inicia a partir do 0, exemplo DBW0, DBW1 e assim por diante. O quantidade de DBW é de acordo com o número de CPUs, e o número padrão de DBW é de um para cada oito CPUs.

O DBW usa um algoritmo que tem como lógica o seguinte, uma gravação de I/O prejudica o desempenho do banco de dados, então porque ficar sempre realizando o I/O se não houver necessidade. Se um bloco em buffer foi gravado por uma sessão e ele se tornou sujo, o porque de limpar ele agora, se ele pode ficar sujo novamente, um buffer pode passar por milhões de gravações antes que o DBW o grave nos arquivos de dados. Usando essa lógica, em um Cache de Buffer pode conter centenas de milhares de buffers sujos, mas o DBW irá gravar apenas algumas centenas deles no disco ao mesmo tempo. Para limpar os buffers e gravar no arquivo de dados o algoritmo seleciona aqueles buffers que não foram usados recentemente, desta forma mantém os mais acessados sempre em cache.

Existem quatro circunstâncias em que faz o DBW gravar, que são:

- Ausência de Buffers Livres
- Excesso de Buffers Sujos
- Intervalo de 3 Segundos
- Checkpoint

No primeiro, quando um servidor precisa de copiar um bloco no cache de buffer do banco de dados, o servidor deve encontrar um buffer livre. Um buffer é considerado livre, quando ele não está sujo ou retido, um buffer é considerado retido quando ele esta sendo usado por outra sessão no momento. Então se o servidor demora para encontrar um buffer livre, ele avisa o DBW para gravar alguns buffers sujos no disco, e quando isso ocorre eles ficam limpos e disponíveis para uso. Esse tempo de demora na busca de buffers livres é determinado internamente pelo Oracle.

No segundo, quando existem muitos buffer sujos em cache, mesmo se o servidor não estiver tendo problemas para encontrar buffer livres, o DBW é chamado para gravar alguns buffers sujos. A quantidade limite de buffers sujos em cache é determinado internamente no Oracle.

No terceiro, é definido um limite de que a cada Três Segundos o DBW tem que limpar alguns Buffers. Isso garante que mesmo que o sistema esteja ocioso, o cache de buffer do banco de dados eventualmente será limpo.

No quarto, o Checkpoint, esse é aquele processo em que o DBW mais irá trabalhar, pois ele terá que limpar todos os buffers sujos no cache de buffer do banco de dados. Durante um Checkpoint, as taxas de I/O de disco serão extremamente altas e a CPU pode chegar a 100%, as sessões de usuário final também sentiram o efeito do Checkpoint, onde experimentarão um desempenho reduzido nas suas atividades. Um Checkpoint pode demorar até alguns minutos para finalizar e completar a gravação, após o Checkpoint o desempenho volta ao normal. Não é recomendado que se realize Checkpoint completo, somente em casos que se mostrem necessários. Um Checkpoint é absolutamente necessário quando um banco de dados é fechado e a instância é desligada. Quando ocorre um Shutdown o Checkpoint é chamado de forma automática. Um DBA pode forçar um Checkpoint através do comando SQL "alter system checkpoint".

Esse Checkpoint que vimos é o completo, também existe os Checkpoints parciais, onde o DBW grava os buffer sujos que contém blocos apenas de um ou mais arquivos de dados, em vez de gravar o banco de dados inteiro. Esses Checkpoints parciais ocorrem com mais frequência quando um arquivo de dados ou tablespace é colocado offline, quando um tablespace é colocado em modo de backup, quando um tablespace é configurado pora somente leitura. Esses Checkpoints são menos drásticos do que os Checkpoint completos e ocorrem automaticamente sempre que um evento relevante acontece.

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

Postagens mais visitadas deste blog

Conhecendo a arquitetura do Banco de Dados Oracle

#15 Vamos focar mais no ambiente de banco de dados mais comum, que é uma instância em um computador, abrindo um banco de dados armazenado em discos locais. Sempre que for mensionado instância, esta se referindo ao banco de dados em funcionamento. Um banco Oracle é composto por duas estruturas, uma lógica e uma física. A estrutura lógica é chamada de instância e composta por estruturas de memória e processos, a sua existência é temporária na memória RAM e CPU e fica ativa enquanto o banco Oracle estiver ligado, se desligar o banco Oracle toda a informação ou vestígios de sua existência será apagado da memória, ao ligar o banco Oracle a instância é carregada novamente na memória. Os processos que compõem a instância trabalham em segundo plano e fica ativo o tempo todo enquanto a instância estiver ativa. A estrutura física é onde fica armazenado as informações, e uma vez criado, ele existe até que o DBA deliberadamente decida exclui-lo. Quando um banco Oracle é iniciado, na me...

O Cache de Buffer do Banco de dados - Estruturas de Memória no Oracle

#21 Vamos conhecer um pouco mais sobre o Cache de Buffer de Dados. O Cache de Buffer de Dados é o local de trabalho do Oracle, é nessa área que ele executa as SQLs. A função dessa área é otimizar e melhorar o desempenho das instruções DML. O maior gargalo de um banco de dados é o I/O dos arquivos em disco. Mas antes de explicar como funciona o Cache de Buffer de Banco de dados, vamos entender rápidamente o que é bloco, desta forma você não fica perdido, os arquivos de dados que contém os registros que são as linhas da tabela, indices e outros objetos de dados são formatados em blocos de tamanho fixo, o DBA pode definir um tamanho para esses blocos ou deixar de forma automática. A quantidade de linhas por bloco é indefinida, pois, as linhas possuem comprimento variável, o comprimento desta linha dependerá do número de colunas e os tipos de informações definidos para a tabela. De acordo com tamanho das linhas, pode haver várias linhas por bloco ou uma linha pode se estender por vár...

Shared Pool - Estruturas de Memória no Oracle

#23 O Shared Pool é considerada umas das estruturas de memórias mais complexas da SGA, ela é dividida em dezenas de subestruturas e todas são gerenciadas internamente pelo Oracle. Mas nesse momento vamos citar apenas os 4 principais componentes desta estrutura, as demais serão analizadas posteriormente. Quando uma aplicação executa uma DML, vários processos internos no Oracle são realizados até o retorno do resultado para o usuário. E esses 4 componentes tem participação direta na execução da DML e com isso gerando um bom desempenho do banco de dados. Os 4 principais componentes são: - O Cache de Biblioteca - O Cache de Dicionário de Dados - A Área PL/SQL - O Cache de Resultados de Funções PL/SQL e Consultas SQL Agora, vamos conhecer um pouco mais de cada um. - O Cache de Biblioteca (library cache) Todas instruções DML enviadas pela aplicação devem ser analizadas pelo Oracle. Quem realiza essa análise é o parse, o parse converte o código escrito pelos progra...