sexta-feira, 13 de março de 2009

domingo, 31 de agosto de 2008

Memória, Blocos, Cache? ...

Estruturas de Armazenamento

Estruturas de armazenamento são os meios pelo quais os bancos de dados são armazenados em massa por um período prolongado em algum tipo de mídia, seja ela disco rígido, cd-rom, fita magnética, memória principal, etc. Os dados precisam ser recuperados constantemente pelos usuários, para isso estas estruturas foram criadas, utilizando-se de várias técnicas para serem acessados e armazenados com segurança.

a) Hierarquia de memórias e Dispositivos de Armazenamento
No nível de armazenamento primário, a memória cache é usada pela CPU para acelerar a execução do programa. No próximo nível de armazenamento primário, está a memória DRAM, responsável por fornecer a principal área de trabalho para a CPU. No nível de armazenamento secundário, a hierarquia compreende os discos magnéticos (Hard Disk e CD-Rom) e finalmente as fitas, a mais barata nas extremidades. Estas mídias armazenam os dados em massa.

b) Armazenamento de Banco de Dados

Os bancos de dados armazenam grandes quantidades de informações por longos períodos. Estas informações, geralmente são armazenadas permanentemente em armazenamento secundário de discos magnéticos pelas seguintes razões.

a. Os bancos de dados são muito grandes e não cabem na memória principal.
b. As circunstâncias que causam a perda permanente de dados aparecem com menos freqüências nas mídias de armazenamento secundário. (o armazenamento principal é mantido somente na execução do programa).
c. O custo de armazenamento secundário é uma ordem de magnitude menor para discos que para armazenamento primário.
As técnicas que são utilizadas para armazenas grandes quantidades de dados em um disco são de extrema importância para os DBA’s, pois através delas serão escolhidas a melhor técnica de organização dos dados para se adaptar aos requisitos de uma determinada aplicação.
Os discos são divididos em trilhas de dezenas de Kbytes até 150 kbytes que armazenam grandes quantidades de informações, que, por sua vez, é dividida em blocos ou em setores menores.

c) Buffering de Blocos

Quando é necessário buscar estas informações no disco, os blocos são transferidos para a emória principal, todos endereços de blocos são conhecidos e diversos buffer’s são armazenados na memória principal para auxiliar a transferência.
Enquanto um buffer estiver sendo utilizado na memória principal, A CPU pode processar os dados contidos em outro buffer paralelamente. Isso somente é possível porque existe um rocessador de entrada e saída independente, que uma vez inicializado, também pode transferir os blocos de maneira independente.

Devido à importância e limitações de tempo, neste artigo somente serão citados estas estruturas de armazenamento. Outras estruturas de armazenamento como Registros e Tipos de Registros; Arquivos, Registros de Tamanhos fixos e Tamanhos variável; Alocação de blocos de Arquivo em Disco, Acesso paralelo em Disco Usando a Tecnologia Raid, etc, poderão ser encontradas no Livro ELMASRI, Ramez e NAVATHE, Shamkant B. Sistemas de Banco de Dados.

3.3. Índices

Os índices são estruturas que visam melhorar a performance de acesso aos dados em um banco de dados. Os índices, assim como as tabelas, podem ser implementados através de várias estruturas de armazenamento, e sua forma de utilização não é uma fórmula exata que fornece bons resultados automaticamente. É preciso saber quando e como utilizá-los.

Vamos então analisar como os índices devem ser utilizados e suas características em alguns SGBD bastante utilizados.
Embora os comandos de manipulação de dados sejam razoavelmente padronizados entre os produtos baseados em SQL, as características que envolvem os índices são menos padronizadas, pois estão mais próximas da arquitetura física do banco de dados.

A principal razão para se construir um índice é melhorar o desempenho nas consultas realizadas no banco de dados. Uma segunda razão é reforçar a unicidade entre os registros armazenados numa tabela do banco de dados.

Otimização de SGBD

Árvores B - divertido!?

Pessoal! vejam que divertido que é árvores B e como algo gráfico pode trasnformar algo complexo em algo super interessante de se aprender.

https://www.cs.tcd.ie/Jeremy.Jones/vivio/trees/B-tree.htm

(Podem aceitar a instalação do activeX)

http://slady.net/java/bt/view.php

PDF --> Árvores B

Oracle: Estrutura Lógica e Física

Artigo 1 da série “Arquitetura em posts”

Enquanto o nosso laboratório está sendo montado, aproveito para falar de teoria.

Neste artigo vou tratar as relações e os conceitos da estrutura lógica e física do Oracle que é representada na figura abaixo.




Instance

Na instância são executados processos e espaços em memória, estes permitem ao Oracle cumprir com seu papel de manter a integridade, confidencialidade e disponibilidade dos dados armazenados.

A instância fica alocada na memória compartilhada (shared memory) e é a combinação do System Global Area (SGA) com os processos background Oracle.

Por ser fundamental no funcionamento do banco de dados (BD), a arquitetura e a descrição dos caches e processos da instância serão tratados em posts posteriores, por enquanto fiquemos com a visão geral que a instância é usada para gerência e acesso ao banco de dados.

Database

Segundo Loney e Bryla, “database é uma coleção de dados em disco em um ou mais arquivos em servidor de banco de dados que coleta e mantém informações relacionadas”.

Para um banco de dados (database) ser usado ele precisa ser montado, ou seja, associado a uma instância. Antes disso, os dados estão inacessíveis a qualquer usuário ou aplicação.

Separar a instância do banco é apenas uma forma didática de explicar, pois, na prática, esta separação não ocorre. No entanto, pode acontecer de haver múltiplas instâncias rodando na mesma máquina, cada uma associada ao seu banco de dados físico.

Nota do autor: costuma existir uma confusão entre banco de dados (database) e o servidor de BD. Pode-se dizer que o servidor de BD é a associação do banco de dados com a instância.

Schema

Representa a coleção de vários objetos de um usuário de banco de dados como, por exemplo, tabelas, índices, seqüências, sinônimos etc. São associados a um banco de dados na razão de vários esquemas para um BD.

Tablespace e Datafile

Um banco de dados é armazenado logicamente em uma ou mais tablespaces que, por sua vez, é armazenada fisicamente no disco em um ou mais arquivos para cada tablespace.

Segment

Os objetos do Banco (tabelas, índices, etc) são armazenados como segmentos. Existem diferentes tipos de segmentos, como:

- Data segments (segmento de dados): armazena os dados das tabelas não clusterizadas. Para tabelas particionadas, cada partição tem seu segmento de dados.

- Index segments: segmentos de índices. Vale a regra da partição.

- Undo segments (de undo): a informação deste segmento é usado para gerar a leitura consistente e, durante o recovery, o rollback de informações não “comitadas”.

- Temporary segments (temporários): usadas quando um comando SQL precisa de uma área temporária para completar a execução.

A relação é de um ou mais segmentos para um tablespace.

Extent

Cada segmento contém um ou mais extents, que são grupos de blocos de dados contíguos (ou adjacentes).

Por exemplo, quando se cria uma tabela, o BD aloca um número inicial de extents para o segmento, quando estes extents enchem, o BD automaticamente aloca um número incremental de extents. (Estes valores são configuráveis pela clausula STORAGE do comando CREATE TABLE ou ALTER TABLE ou podem ser otimamente dimensionados pelo Oracle).

É importante notar que cada extent só pode estar em um data file.

DB Block e OS Block

Blocos de banco de dados é o menor nível de granularidade e é onde as informações são armazenadas.

O DB Bloco é um múltiplo do OS Block (bloco do sistema operacional) e o tamanho é definido por uma variável (DB_BLOCK_SIZE) no momento da criação do tablespace.

Oracle: Estruturas de Memória



A parte azul do diagrama representa a estrutura de memória no Oracle, que contêm:

1. System Global Area (SGA): Compartilhada por todos os processos;

2. Program Global Area (PGA): Exclusiva de cada de processo.

No diagrama ainda temos representados processos servidores que são criados dinamicamente para atender usuários, e processos background que realizam tarefas específicas na administração e controle do BD.


Database Buffer Cache

Armazena em memória os blocos de dados recuperados do banco de dados e é onde os dados são trabalhados. Esta é uma área importante para o desempenho do BD, pois o correto dimensionamento minimizará gravações e leitura em disco.

Redo Log Buffer

Aqui ficam as informações de redo antes de serem gravadas no arquivo físico.

Estas informações servem para recuperação da instância em caso de falha. Além disso, um usuário só recebe retorno de sucesso em uma operação após o redo ter sido gravado em disco.

Shared Pool

Divide-se em dois subcaches:

1. Biblioteca: para códigos SQL e PL/SQL;

2. Dicionário de dados.

No cache de biblioteca, se um código consta no cache, a análise sintática e o plano de execução serão aproveitados; se o código não consta no cache, os procedimentos serão feitos e armazenados.

No cache de dicionário de dados estão os metadados essenciais para o funcionamento do BD (como os objetos e privilégios de usuários), estes ficam armazenados num conjunto de tabelas possuídas pelos esquemas SYS e SYSTEM.

Streams Pool

São estruturas para a utilização do Oracle Streams, recurso da versão Enterprise do Oracle, que permite a gerênci e o compartilhamento de dados e eventos em um ambiente distribuído.

Java Pool

É usado em cada sessão pela Java Virtual Machine Oracle para executar os códigos Java da mesma maneira que o SQL e o PL são executados no shared pool.

Large Pool

Certas operações precisam de grandes blocos de memória, é este recurso que reserva estas áreas no momento que as operações necessitam. Um aplicativo que comumente usa esta área é o RMAN.

Oracle Armazenamentos!

Oracle: Dinâmica -> update





O desenho representa o servidor de banco de dados. O que está dentro do quadrado pontilhado é a Instância que é composta pela System Global Area (quadrados azuis) e os Processos em Background (bolas verdes e amarelas). Os arquivos são representados pelos cilindros marrons.

Para montar o BD de forma que seja utilizável pelos usuários (modo open), o servidor utilizará o Control File para saber onde estão os arquivos, e o Parameter File para alocar a memória.

Após ser validado, o usuário se conectará ao BD através de um processo servidor dedicado ou compartilhado. Um pouco sobre como a conexão acontece já foi tratado aqui.

Ao receber a solicitação de update do usuário, o BD checará se o usuário tem direito de fazer isto nesta tabela. Se não tiver, o BD retornará um erro e estará encerrada a solicitação.

Caso o usuário tenha este direito, o BD tratará o update submetido, verificando se este já se encontra na Library Cache (biblioteca para códigos) e, se já estiver, será imediatamente executado. Se não estiver, será feito a análise sintática (parse), o plano de execução, armazenamento na biblioteca de códigos, e a execução.

Na execução, o Oracle primeiramente checa se os dados necessários estão no Database Buffer Cache e, caso não estejam lá, os dados serão buscados nos datafiles e transferidos para este cache.

É feito o update.

Imediatamente é aplicado um row-level lock para impedir que outros usuários tentem alterar a mesma linha, e também é registrada a transação no Redo Log Buffer.

O usuário faz então um commit para validar a transação.

Neste momento o servidor altera o dado no Database Buffer Cache, o processo Log Writer escreve a transação no Redo Log File e é retornada a mensagem de sucesso na transação para o usuário.

Outros processos ainda vão trabalhar para direta, ou indiretamente, garantir a integridade do BD:

- O processo ARC0 transferirá o on line redo log file para a área destinada aos Archive Files a cada log switch;

- O processo DBW0 escreverá o dado do Database Buffer Cache para o Datafile;

- O CKPT auxiliará a sincronia do Database Buffer Cache com os Data Files, anotando o SCN nos Control Files.

Oracle: Armazenamento Físico






ESTRUTURA FÍSICA:
Control Files

Contêm dados sobre o próprio BD, também conhecidos como metadados, que são informações sobre a estrutura física. Sua leitura é essencial para que o software do banco de dados consiga abrir os arquivos de dados.

Estes arquivos podem ser multiplexados para dar mais segurança, mas somente um será utilizado como primário.

Os Control Files (arquivos de controle) também guardam informações utilizadas pelo RMAN (Recovery Manager), solução de backup da Oracle.

Data Files

Arquivos de armazenamento final dos dados dos usuários ou das aplicações no BD.

Lembrando o post “Estrutura Física e Lógica”, um banco de dados pode ter múltiplos tablespaces que, cada um, pode estar armazenado em um ou mais arquivos de dados. No entanto, um arquivo é associado a um único tablespace.

Redo Log Files (on line)

Se um banco de dados parar por qualquer motivo, desde que não ocorra perda de arquivos de dados, a instância poderá voltar ao estado que estava antes do travamento aplicando os Redo Log Files.

Para uma transação ser completada e retornar uma confirmação que está ok para o usuário, o processo LGW0 precisa gravá-la no arquivo de log de redo.

ARQUIVOS ADICIONAIS:
Parameter File

Defini a configuração da instância na inicialização do BD. Entre outras coisas este arquivo contém informações de:

1. Localização dos arquivos;

2. Configurações do SGA;

3. Número de usuários que podem se conectar.

Password File

Arquivo que guarda informações de autenticação do SYSDBA e SYSOPER para administração remota.

Backup Files

Cópias de segurança utilizadas para a recuperação de banco de dados quando o arquivo original é danificado.

Archive Log Files

O processo ARC0 faz o armazenamento contínuo dos Red Log Files nos Archive Log Files, com estes arquivos têm-se um histórico das alterações de um BD. Usando o backup mais este histórico pode-se recuperar um datafile perdido.


MULTIPLEXAÇÃO
A multiplexação de um arquivo para diversos discos é uma forma de proteger o BD de falhas de mídia.

Pode-se:

1. Usar um sistema automatizado com RAID ou o ASM (produto da Oracle);

2. Multiplexar manualmente, que é fazer o Oracle gravar em diversos locais arquivos de:

a. Control Files;

b. Log de redo;

c. Archive Log Files.