#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
Postar um comentário