Estruturas de Memória

O Oracle utiliza a memória física do servidor para armazenar muitos itens para uma instância do Oracle.

Os executáveis do Oracle vão para a software code area.

A PGA (Program Global Area) é privativa para os processos de cada servidor e processos em segundo plano. Uma PGA é alocada para cada processo de sessão do usuário ou do servidor.

A SGA é a área de dados alocada para uma instância do Oracle.

Veremos um pouco sobre cada uma destas estruturas com mais detalhes abaixo.

SGA – System Global Area

A SGA é um grupo de estruturas compartilhadas de memória para uma instância do Oracle, compartilhada pelos usuários da instância do banco de dados. Quando uma instância é inicializada, a memória é alocada para a SGA com base nos valores especificados no parameter file.

Alguns dos parâmetros que controlam tamanho das estruturas da SGA são dinâmicos, porém, se o parâmetro SGA_MAX_SIZE for definido, o tamanho total de todas as áreas da SGA não irá exceder o valor de SGA_MAX_SIZE.

Se o SGA_MAX_SIZE não for especificado, o parâmetro SGA_TARGET é verificado, e caso o mesmo seja definido com um valor válido, o Oracle ajustará automaticamente o tamanho dos componentes da SGA, de modo que o total da memória alocada seja igual ao SGA_TARGET. Este parâmetro é dinâmico e pode ser alterado quando a instância estiver em execução. O parâmetro MEMORY_TARGET (a partir do 11g) equilibra toda a memória disponível para o Oracle entre a SGA e a PGA para otimizar o desempenho.

  • A memória na SGA é alocada em unidades de grânulos;
  • Um grânulo pode ter 4 ou 16 MB, dependendo do tamanho total da SGA;
  • Se a SGA for menor ou igual a 128 MB, um grânulo terá 4 MB; caso contrário terá 16 MB.

Buffer Cache

O Database Buffer Cache armazena os blocos de dados do disco que foram recentemente lidos para atender um comando SELECT ou que contêm blocos modificados ou adicionados por uma instrução DML.

  • A área de memória na SGA que armazena esses blocos é dinâmica;
  • Cada tamanho de bloco diferente (em casos de bases onde há tablespaces com blocos de tamanhos diferentes) exige um buffer cache próprio;
  • Os valores dos parâmetros DB_CACHE_SIZE e DB_nK_CACHE_SIZE podem ser alterados dinamicamente, sem reinicializar a instância;
  • O Oracle pode utilizar dois caches adicionais com o mesmo tamanho do bloco padrão: o KEEP buffer pool e o RECYCLE buffer pool;
  • Quando uma tabela é criada, é possível especificar o pool no qual residirão os blocos de dados da tabela por meio da BUFFER_POOL_KEEP ou BUFFER_POOL_RECYCLE dentro da cláusula STORAGE;
  • Para as tabelas mais utilizadas durante o dia, seria vantajoso colocá-las no KEEP buffer pool para minimizar o I/O necessário para recuperar os blocos contidos nas tabelas.

shared pool

É dimensionado pelo SHARED_POOL_SIZE. Contém dois subcaches importantes: Library Cache e o Data Dictionary Cache.

  • SHARED_POOL_SIZE é dinâmico, pode ser redimensionado;
  • Ao realizar o redimensionamento, deve ser respeitado o tamanho total da SGA que deve ser menor que SGA_MAX_SIZE ou SGA_TARGET;
  • O Library Cache armazena informações sobre as instruções SQL e PL/SQL executadas no banco de dados. Diversos usuários diferentes podem compartilhar a mesma instrução SQL nesta área;
  • Além da instrução SQL, a Library Cache armazena também o seu plano de execução;
  • Na segunda vez que uma instrução SQL idêntica for executada, pelo mesmo ou por outro usuário, o plano de execução já estará calculado, o que reduz o tempo de execução do comando SQL;
  • Se o tamanho da library cache for muito pequeno, os planos de execução podem ser descarregados do cache (dando lugar para novos planos), exigindo assim recarregamentos frequentes das instruções SQL. Neste caso, recomenda-se aumentar o tamanho da library cache;
  • O dicionário de dados é um conjunto de tabelas internas do banco de dados, pertencentes aos schemas SYS e SYSTEM, que contêm os metadados sobre o banco de dados, suas estruturas e privilégios e as funções dos usuários do banco de dados;
  • O Data Dictionary Cache armazena um subconjunto das colunas das tabelas do dicionário de dados depois que forem lidas pela primeira vez para o buffer cache;
  • Os blocos de dados das tabelas do dicionário de dados são sempre usados para ajudar no processamento das consultas dos usuários e de outros comandos DML;
  • Se o Data Dictionary Cache for muito pequeno, as solicitações de informações do dicionário de dados acarretarão I/O. Essas solicitações do dicionário de dados associadas à I/O são conhecidas como recursive calls e devem ser evitadas dimensionando corretamente o Data Dictionary Cache.

Redo Log Buffer

O Redo Log Buffer armazena as alterações mais recentes efetuadas nos blocos de dados. Essas alterações passam pelo Redo Log Buffer antes de ir para os Redo Log Files.

Esta gravação dos registros do Redo Log Buffer para o Redo Log File acontece quando:

  • um terço do redo log buffer estiver preenchido;
  • a cada 3 segundos;
  • ocorrer um commit;
  • ocorrer um checkpoint.

Uma trasação com commit não é considerada concluída até que as entradas de redo log tenham sido gravadas com êxito nos redo log files.

Large Pool

O Large Pool é uma área opcional da SGA. É utilizada em transações com mais de um banco de dados envolvidos, buffers de mensagens para processos executando consultas paralelas, e operações paralelas de backup e recovery do RMAN.

A Large Pool disponibiliza grandes blocos de memória para operações que precisam alocá-los de uma só vez. O parâmetro LARGE_POOL_SIZE controla seu tamanho, e é um parâmetro dinâmico desde a versão 9iR2.

Java Pool

Utilizado pela Oracle JVM (Java Virtual Machine) para todos os códigos e dados Java em uma user session. Códigos e dados Java armazenados no Java Pool são semelhantes ao armazenamento de código SQL e PL/SQL na shared pool.

Streams Pool

Dimensionado pelo parâmetro STREAMS_POOL_SIZE. Guarda dados e estruturas de controle para o Oracle Streams. O Oracle Streams gerencia o compartilhamento de dados e eventos em um ambiente distribuído. Se STREAMS_POOL_SIZE for zero, a memória utilizada nas operações do Streams será alocada a partir da Shared Pool e poderá usar até 10% da Shared Pool.

PGA – Program Global Area

PGA é uma área de memória que aloca seções dinâmicas, de modo privado, para um conjunto de processos de conexão. Sua configuração depende da configuraçãoda conexão do banco de dados: servidor compartilhado (shared server) ou servidor dedicado (dedicated server).

Em um shared server, diversos usuários compartilham uma conexão com o banco de dados, minimizando o uso da memória no servidor, mas possivelmente afetando o tempo de resposta às solicitações do usuário. Neste caso a SGA guarda informações persistentes da sessão do usuário. Este ambiente é perfeito para um número muito grande de conexões simultâneas com o banco de dados, porém com solicitações raras ou de curta duração.

Em um dedicated server, cada processo de usuário estabelece uma conexão própria com o banco de dados. A PGA contém a memória da sessão para essa configuração, e também engloba uma área de classificação utilizada sempre que a solicitação de um usuário exigir uma operação de SORT, mesclagem de bitmaps ou hash join.

O parâmetro PGA_AGGREGATE_TARGET em conjunto com o WORKAREA_SIZE_POLICY podem facilitar a administração do sistema, permitindo que o DBA defina um tamanho total para todas as áreas de trabalho e deixando o Oracle gerenciar e alocar a memória entre todos os processos de usuário.

Posts relacionados:

OCP 11g – Arquitetura do Banco de Dados: Noções Básicas (parte 1)

OCP 11g – Arquitetura do Banco de Dados: Noções Básicas (parte 2)

OCP 11g – Arquitetura do Banco de Dados: Noções Básicas (parte 3)

OCP 11g – Arquitetura do Banco de Dados: Noções Básicas (parte 4)

Referência Bibliográfica

Este post, assim como todos os posts sobre Certificação OCP deste blog, são trechos do livro “OCP Oracle Database 11g – Administração II (Guia do Exame 1Z0-053)”, da editora Bookman – www.bookman.com.br
Recomendo este livro a todos que pretendem estudar para o exame. Meus posts são apenas algumas dicas para quem já está estudando por outros materiais, e por isso exige uma base de conhecimento anterior em cada um dos capitulos. Para uma referência completa de estudos é recomendado a compra do livro correspondente, bem como a documentação oficial da Oracle.