Fundamentos do Banco de Dados de cache de buffer no Oracle 12c

Oracle 12c de cache de buffer do banco de dados

é tipicamente a maior parte do SGA. Ele tem dados que vem dos arquivos no disco. Porque o acesso a dados do disco é mais lenta do que a partir da memória, único propósito thedatabase do buffer cache é armazenar em cache os dados na memória para acesso mais rápido.

O cache de buffer do banco de dados pode conter dados de todos os tipos de objetos:

  • tabelas

  • índices

  • visões materializadas

  • Os dados de sistema

Na frase cache de buffer do banco de dados, o termo amortecedor refere-se a blocos de dados. UMA bloco de banco de dados é a quantidade mínima de armazenamento que a Oracle lê ou escreve. Todos os segmentos de armazenamento que contêm os dados são constituídos por blocos. Quando você solicita dados do disco, no mínimo a Oracle lê um bloco.

Mesmo se você solicitar apenas uma linha, várias linhas na mesma tabela são susceptíveis de serem recuperados. O mesmo vale se você solicitar uma coluna em uma linha. A Oracle lê o bloco inteiro, o que provavelmente tem muitas linhas e todas as colunas para essa linha.

É possível pensar que, se a sua mesa departamentos tem apenas dez linhas, a coisa toda pode ser lido na memória, mesmo se você está solicitando o nome de apenas um departamento.

Tampão estado de cache no Oracle 12c

o buffer cache controla o que bloqueia começa a ficar dependendo do espaço disponível e o estado do bloco (semelhante à forma como o pool compartilhado decide o SQL começa a ficar). O cache de buffer usa sua própria versão do algoritmo LRU.

Um bloco no cache de buffer pode estar em um dos três estados:

  • Livre: Não sendo usado para qualquer coisa

  • fixado: Atualmente está sendo acessada

  • Sujo: Bloco foi modificado, mas ainda não gravado em disco

blocos livres

Idealmente, blocos livres estão disponíveis sempre que você precisar deles. No entanto, isso provavelmente não é o caso, a menos que seu banco de dados é tão pequena que a coisa toda pode caber na memória.

O algoritmo LRU funciona um pouco diferente no cache de buffer do que ele faz no pool compartilhado. Ela marca cada bloco e, em seguida, vezes quanto tempo ele tem sido desde que foi acessada. Por exemplo, um bloco recebe um ponto de cada vez que for tocado.

Quanto maior os pontos, menos provável que o bloco será liberado da memória. No entanto, deve ser acessado com frequência ou a pontuação diminui. Um bloco tem que trabalhar duro para ficar na memória se a competição por recursos de memória é alto.

Dando a cada bloco de uma pontuação e tempo impede este tipo de situação de surgir: Um bloco é acessado fortemente no final do mês para relatórios. Sua pontuação é maior do que qualquer outro bloco no sistema. Esse bloco nunca é acessado novamente.

Ele fica lá desperdiçando memória até que o banco de dados é reiniciado ou outro bloco, finalmente, marca pontos suficientes para vencê-lo fora. Os componentes idades tempo que muito rapidamente depois que você deixou de acessá-lo.

blocos fixados

Um bloco a ser acessado é um bloco fixado. O bloco está bloqueado (ou preso) no cache de buffer para que ele não pode ser envelhecido fora do cache de buffer enquanto o processo Oracle (muitas vezes representando um usuário) está acessando.

blocos de sujos

Um bloco modificado é um bloco de sujo. Para garantir que as alterações são mantidas através paradas de banco de dados, esses blocos de sujos devem ser escritos a partir do cache para disco. Os nomes de banco de dados blocos sujos em uma lista suja ou fila de gravação.

Você pode pensar que cada vez que um bloco é modificado, ele deve ser escrito para o disco para minimizar a perda de dados. Este não é o caso - nem mesmo quando há uma cometer (Quando você salvar as alterações permanentemente)! Várias estruturas ajudar a prevenir a perda de dados.

Além disso, a Oracle tem um problema de jogo. O desempenho do sistema iria rastejar se você escreveu blocos no disco para cada modificação. Para combater isso, a Oracle desempenha as chances de que o banco de dados é pouco provável a falhar e grava blocos no disco somente em grupos maiores.

Não se preocupe, não é mesmo um risco contra perda de dados. A Oracle está recebendo o desempenho do banco de dados agora mesmo com o possível custo de uma tomada de recuperação mais longo mais tarde. Porque as falhas em sistemas devidamente geridos raramente ocorrem, é uma forma barata de ganhar algum desempenho. No entanto, não é como se a Oracle deixa blocos sujos todo sem limpeza após si.

Bloquear gravação desencadeia no Oracle 12c

O que desencadeia uma gravação bloco e, portanto, um bloco de sujo?

  • O banco de dados é emitido um comando de desligamento.

  • Um ponto de verificação total ou parcial ocorre - que é quando o sistema despeja periodicamente todos os buffers sujos no disco.

  • Um limite de tempo de recuperação, definido por você, é Met o número total de blocos de sujos provoca um tempo de recuperação inaceitável.

  • Um bloco livre é necessária e nenhum for encontrado depois de um determinado período de busca.

  • Certa linguagem de definição de dados (DDL) comandos. (Comandos DDL são instruções SQL que definem objetos em um banco de dados.)

  • A cada três segundos.

  • Outras razões. O algoritmo é complexo, e você não pode estar certo com todas as mudanças que ocorrem com cada versão do software.

O fato é que o banco de dados permanece blocos de escrita muito ocupados em um ambiente onde há um grande número mudanças.

menu