Você está na página 1de 127

Treinamento de Tuning de Banco de

Dados

Capítulo 1 – Conceitos e Aspectos Básicos da arquitetura de Bancos de Dados

1
Objetivos

• Explicar o conceitos utilizados em banco de dados.

• Apresentar os tipos de arquiteturas/topologias de bancos de dados.

• Apresentar os tipos de acesso em banco de dados.

2
Conceitos Básicos Banco de
Dados
• Dados: são fatos do mundo real abstraídos num modelo
conceitual e/ou lógico e gravados num modelo físico

• Banco de Dados (BD):


– Representa uma coleção de dados relacionados
– É uma coleção lógica e coerente de dados com algum significado inerente
– Um BD é construído em atendimento a uma proposta específica
– Exemplos:
• Catálogo telefônico
• Biblioteca da universidade
• Planilha Eletrônica

Dados são informações brutas e não processadas que podem ser armazenadas e
manipuladas por um sistema de computador. Os dados podem ser representados por
números, textos, imagens, vídeos, áudios ou qualquer outra forma de informações
capturadas e registradas.

Um Banco de Dados (BD) é uma coleção organizada de dados relacionados que são
armazenados eletronicamente em um sistema de computador. Ele é projetado para
permitir a criação, manipulação e recuperação eficiente dos dados, fornecendo uma
estrutura e um conjunto de regras para a organização e o acesso aos dados. Um
banco de dados geralmente é usado para armazenar informações relevantes para
uma determinada aplicação ou contexto.

No Banco de Dados, os dados são organizados em tabelas, que consistem em linhas e


colunas. Cada linha na tabela representa uma entrada individual, também conhecida
como registro, e cada coluna representa um atributo específico dos dados, como
nome, idade, endereço, etc. As tabelas são usadas para representar entidades e seus
relacionamentos em um modelo de dados.

Além disso, um Banco de Dados pode incluir recursos para definir regras de

3
integridade dos dados, permitir consultas e pesquisas complexas, garantir a
segurança e a privacidade dos dados, e oferecer suporte a transações e controle de
concorrência.

Os Bancos de Dados são amplamente utilizados em diferentes áreas, como empresas,


organizações governamentais, instituições acadêmicas, setor de saúde e muito mais.
Eles desempenham um papel crucial no armazenamento, gerenciamento e
recuperação de dados, fornecendo uma base sólida para a tomada de decisões,
análises e processos de negócios.

3
Conceitos Básicos Banco de
Dados Usuários/Programadores

SISTEMA DE BANCO Programas de Aplicações / Consultas (Queries)


DE DADOS

SGBD
Programas para Processamento de consultas /
gerenciamento de dados

Software para Acesso aos Dados Armazenados

Definição dos dados Banco de dados


(metadados) armazenados

Um Sistema de Banco de Dados (SBD) é um conjunto de software, hardware e


processos que permitem a criação, organização, manipulação, armazenamento e
recuperação de dados em um Banco de Dados. Ele fornece uma interface e
ferramentas para gerenciar o acesso e a manipulação dos dados armazenados,
garantindo a integridade, segurança e eficiência do sistema.

Um SBD consiste em três componentes principais:

Software do SGBD (Sistema de Gerenciamento de Banco de Dados): O software do


SGBD é responsável por gerenciar as operações relacionadas ao banco de dados. Ele
fornece uma interface para a definição, manipulação e recuperação de dados. Além
disso, o SGBD inclui recursos para controle de acesso, garantia de integridade dos
dados, suporte a transações e execução de consultas.

Hardware: O hardware do SBD consiste nos dispositivos físicos, como servidores,


unidades de armazenamento e redes, que são usados para armazenar e processar os
dados do Banco de Dados. O hardware deve ser dimensionado adequadamente para
suportar a carga de trabalho e as necessidades de desempenho do sistema.

4
Processos: Os processos no SBD são responsáveis por executar as operações
definidas pelo software do SGBD. Isso inclui processos de gerenciamento do sistema,
como criação de tabelas, definição de esquemas e controle de acesso, bem como
processos de execução de consultas e manipulação de dados.

O SBD é projetado para fornecer recursos que permitem aos usuários criar, recuperar
e manipular dados de forma eficiente. Ele oferece recursos de segurança para
proteger os dados contra acesso não autorizado e mecanismos de backup e
recuperação para evitar a perda de dados em caso de falhas.

Além disso, o SBD permite que vários usuários acessem o banco de dados
simultaneamente, garantindo o controle de concorrência para evitar conflitos entre
as operações de diferentes usuários.

Resumindo um Sistema de Banco de Dados (SBD) é um conjunto de software,


hardware e processos que permitem a criação, organização e manipulação de dados
em um Banco de Dados. Ele fornece uma interface para os usuários interagirem com
os dados de maneira eficiente, segura e controlada.

4
Conceitos Básicos Banco de
Dados
• Todo sistema de banco de dados possui um catálogo ou
dicionário de dados - metadados

• Promove a independência entre programas e os dados

• Suporte para múltiplas aplicações

• Compartilhamento de dados e processamento de transações de


multiusuários - concorrência

No contexto de um Sistema de Banco de Dados (SBD), algumas características


importantes são o catálogo ou dicionário de dados, a independência entre programas
e dados, o suporte a múltiplas aplicações e o compartilhamento de dados, bem como
o processamento de transações multiusuários. Vou abordar cada um desses
aspectos:

Catálogo ou Dicionário de Dados: O catálogo ou dicionário de dados é uma parte


essencial de um SBD. Ele contém informações detalhadas sobre a estrutura do banco
de dados, como a definição das tabelas, atributos, relacionamentos, restrições de
integridade e outros metadados. O catálogo de dados fornece uma visão abstrata do
banco de dados e é utilizado pelo SGBD para gerenciar e operar sobre os dados.

Independência entre Programas e Dados: Um SBD promove a independência entre


programas e dados. Isso significa que as aplicações ou programas que utilizam o
banco de dados não precisam conhecer os detalhes internos de armazenamento e
organização dos dados. As alterações na estrutura do banco de dados, como
adicionar ou modificar tabelas, não afetam os programas existentes, desde que a
interface externa permaneça a mesma. Isso facilita a manutenção e a evolução do
sistema, permitindo a modificação do esquema do banco de dados sem impactar as

5
aplicações.

Suporte a Múltiplas Aplicações e Compartilhamento de Dados: Um SBD deve ser


capaz de lidar com múltiplas aplicações que acessam e compartilham os mesmos
dados. Isso permite que diferentes usuários ou sistemas acessem e atualizem os
dados de forma concorrente. O SGBD garante a consistência dos dados e controla o
acesso concorrente para evitar conflitos e garantir a integridade dos dados. Isso é
fundamental para ambientes empresariais em que diferentes departamentos ou
usuários precisam acessar os mesmos dados.

Processamento de Transações Multiusuário: Um SBD deve oferecer suporte ao


processamento de transações multiusuário. Uma transação é uma unidade lógica de
trabalho que consiste em uma sequência de operações de banco de dados, como
leituras e gravações, que devem ser executadas de forma consistente e isolada. O
SGBD garante a atomicidade, consistência, isolamento e durabilidade (ACID) das
transações, permitindo que várias transações concorram de forma segura pelos
recursos do banco de dados.

Essas características são fundamentais para o funcionamento adequado de um


Sistema de Banco de Dados, permitindo o gerenciamento eficiente dos dados, o
compartilhamento seguro e simultâneo entre diferentes usuários e aplicações, e a
independência entre programas e a estrutura dos dados.

5
Conceitos Básicos Banco de
Dados
Processamento de transações
• Uma Transação é uma coleção de operações que desempenha uma função lógica
única dentro de uma aplicação do sistema de banco de dados.

• Propriedades de uma transação (ACID): TODO SGBD


RELACIONAL
– A – atomicidade : ou todas as operações envolvidas na transação TRANSACIONAL
ocorrem, ou nenhuma delas deve ter efeito sobre o banco de dados. Tarefa do
SGBD. SUPORTA ACID

– C – consistência : ao final da execução da transação a consistência dos


dados no banco devem ter sido mantidas. Tarefa do programador.

– I – isolamento : uma transação deve ter sua execução realizada de forma


isolada em relação à execução de outras transações.

– D – durabilidade : depois que uma transação é executada com sucesso,


as modificações por ela realizadas devem ser mantidas no sistema, mesmo na
ocorrência de falhas. Tarefa do SGBD.

As propriedades ACID são um conjunto de características essenciais para garantir a


consistência, confiabilidade e integridade das transações em um sistema de banco de
dados. O termo ACID é um acrônimo que representa as seguintes propriedades:

Atomicidade (Atomicity): A propriedade de atomicidade garante que uma transação


seja tratada como uma unidade indivisível de trabalho. Isso significa que uma
transação deve ser executada na íntegra ou abortada por completo. Se alguma parte
da transação falhar, todas as alterações feitas até o momento devem ser desfeitas,
garantindo que o banco de dados retorne ao estado anterior à transação.

Consistência (Consistency): A propriedade de consistência garante que uma transação


leve o banco de dados de um estado válido para outro estado válido. Isso significa
que todas as restrições e regras de integridade do banco de dados devem ser
aplicadas e mantidas durante a execução da transação. O banco de dados deve
permanecer consistente antes e depois da transação, independentemente de falhas
intermediárias.

Isolamento (Isolation): A propriedade de isolamento garante que as transações sejam


executadas de forma independente e isolada umas das outras. Isso significa que o

6
resultado de uma transação não deve interferir no resultado de outras transações
concorrentes. Cada transação deve ser executada como se fosse a única no sistema,
mesmo quando várias transações estão ocorrendo simultaneamente.

Durabilidade (Durability): A propriedade de durabilidade garante que o resultado de


uma transação seja permanente e persista no banco de dados mesmo em caso de
falhas do sistema, como quedas de energia ou falhas de hardware. Uma vez que uma
transação tenha sido confirmada (committed), suas alterações devem ser duráveis e
permanentes, mesmo que ocorra uma falha posteriormente.

As propriedades ACID são fundamentais para garantir a confiabilidade e a integridade


das transações em um sistema de banco de dados. Elas asseguram que as transações
sejam executadas corretamente, mesmo em ambientes de alta concorrência e em
caso de falhas. Essas propriedades são garantidas pelo Sistema de Gerenciamento de
Banco de Dados (SGBD), que implementa mecanismos de controle e recuperação
para cumprir as propriedades ACID em todas as transações executadas no sistema.

6
Conceitos Básicos Banco de
Dados
Linguagem de acesso a banco de dados INSERT
UPDATE
1. SQL (Structured Query DML DELETE
Language) SELECT
MERGE SQL
– Padrão para Sistemas Gerenciadores
SERVER
de Banco de Dados Relacional CREATE TCL=DML
(SGDBR / RDBMS) SQL DDL ALTER
– Composta por DDL, DML e DCL DROP
– Regulamentado pelo comitê ANSI

GRANT
❖ Os SGDBs podem ser : DCL
REVOKE
– hierárquicos
– rede
COMMIT
– relacional TCL ROLLBACK
– Objeto-Relacional (Oracle, SQL SAVEPOINT
Server,DB2,ETC..)

ANSI = AMERICAN NATIONAL STANDARD INSTITUTE

DML (Data Manipulation Language) - Linguagem de Manipulação de Dados:

SELECT: Recupera dados de uma tabela.

INSERT: Insere novos dados em uma tabela.

UPDATE: Atualiza os dados existentes em uma tabela.

DELETE: Remove dados de uma tabela.

DDL (Data Definition Language) - Linguagem de Definição de Dados:

CREATE: Cria objetos no banco de dados, como tabelas, índices, visões, etc.
ALTER: Modifica a estrutura de um objeto existente no banco de dados.

DROP: Remove objetos do banco de dados.

7
TRUNCATE: Remove todos os dados de uma tabela.

DCL (Data Control Language) - Linguagem de Controle de Dados:

GRANT: Concede privilégios de acesso a objetos do banco de dados para usuários.

REVOKE: Revoga privilégios de acesso previamente concedidos.

TCL (Transaction Control Language) - Linguagem de Controle de Transações:

COMMIT: Confirma uma transação, tornando suas alterações permanentes no banco


de dados.

ROLLBACK: Desfaz uma transação, descartando todas as alterações feitas até o


momento.

SAVEPOINT: Define um ponto de salvamento dentro de uma transação para permitir


o rollback para esse ponto específico.

SET TRANSACTION: Define características específicas de uma transação, como


isolamento e controle de concorrência.

Essas são as principais estruturas de comandos em um SGBD. Cada uma delas tem
sua finalidade específica para manipular, definir, controlar e gerenciar os dados e
objetos dentro do banco de dados.

7
Conceitos Básicos Banco de
Dados
Linguagem de acesso a banco de dados
1.1 Linguagem de Manipulação de Dados - DML
Manipulação de dados = recuperação de informações do banco de dados e inserção, remoção e alteração de
dados no banco de dados.
A linguagem de manipulação de dados (do inglês Data-Manipulation Language – DML) é a linguagem que
viabiliza o acesso e a manipulação do dados. Podem ser:
Procedurais: o usuário especifica procedimentos para recuperar os dados que necessita.
Não-procedurais: o usuário descreve os dados que necessita.
Compõem a linguagem DML os comandos INSERT (Para inserir dados nas estruturas), UPDATE (para dados
nas estruturas) , DELETE (para eliminar dados nas estruturas), SELECT (Para realizar consultas) e MERGE
(para sincronizar dados em duas estruturas)

INSERT: O comando INSERT é usado para inserir novos registros em uma tabela
existente. Ele permite adicionar dados a uma ou mais colunas da tabela. A sintaxe
básica é a seguinte:

INSERT INTO tabela (coluna1, coluna2, ...) VALUES (valor1, valor2, ...);
Por exemplo, se tivermos uma tabela chamada "Clientes" com as colunas "ID",
"Nome" e "Email", podemos inserir um novo registro da seguinte forma:

INSERT INTO Clientes (ID, Nome, Email) VALUES (1, 'João', 'joao@email.com');

SELECT: O comando SELECT é usado para recuperar dados de uma tabela ou


visualização existente. Ele permite que você especifique as colunas que deseja
recuperar e as condições para filtrar os registros. A sintaxe básica é a seguinte:

8
SELECT coluna1, coluna2, ... FROM tabela WHERE condição;

Por exemplo, para selecionar todos os clientes cujo nome começa com a letra "A",
podemos usar o seguinte comando:

SELECT * FROM Clientes WHERE Nome LIKE 'A%';

UPDATE: O comando UPDATE é usado para modificar os dados existentes em uma


tabela. Ele permite que você atualize os valores das colunas em registros específicos,
de acordo com determinadas condições. A sintaxe básica é a seguinte:

UPDATE tabela SET coluna1 = novo_valor WHERE condição;


Por exemplo, se quisermos atualizar o email de um cliente com o ID igual a 1,
podemos usar o seguinte comando:

UPDATE Clientes SET Email = 'novoemail@email.com' WHERE ID = 1;

DELETE: O comando DELETE é usado para remover registros de uma tabela. Ele
permite que você exclua registros de acordo com determinadas condições. A sintaxe
básica é a seguinte:

DELETE FROM tabela WHERE condição;

Por exemplo, se quisermos excluir todos os clientes cujo nome é "Maria", podemos
usar o seguinte comando:

DELETE FROM Clientes WHERE Nome = 'Maria';

Esses comandos DML são fundamentais para manipular dados em um banco de


dados usando a linguagem SQL. Eles permitem a inserção, seleção, atualização e
exclusão de dados, fornecendo uma ampla gama de possibilidades para interagir com
os dados armazenados em uma tabela.

8
Conceitos Básicos Banco de
Dados
Linguagem de acesso a banco de dados

1.2 Linguagem de Definição de Dados - DDL


Um esquema de dados é especificado por uma conjunto de definições
expressas por uma linguagem especial chamada Linguagem de definição
de dados (do inglês Data-Definition Language – DDL).
O resultado da compilação dos parâmetros/comando DDL gera os dicionário
de dados (arquivo de metadados).
Compõem a linguagem DDL os comandos CREATE (Para criar estruturas),
ALTER (para alterar as estruturas) , DROP (para eliminar as estruturas) e
TRUNCATE (para limpar os dados contidos nas estruturas)

Os comandos DDL (Data Definition Language, em inglês) são usados para definir e
modificar a estrutura de um banco de dados. Eles permitem criar, modificar e excluir
tabelas, índices, restrições e outros objetos relacionados ao esquema do banco de
dados. Existem três principais comandos DDL: CREATE, ALTER e DROP. Vou explicar
brevemente cada um deles:

CREATE: O comando CREATE é usado para criar novos objetos no banco de dados.
Alguns exemplos de objetos que podem ser criados são tabelas, índices, visões e
procedimentos armazenados. A sintaxe básica é a seguinte:

CREATE objeto (coluna1 tipo, coluna2 tipo, ...);

Por exemplo, para criar uma tabela chamada "Clientes" com as colunas "ID" e
"Nome", podemos usar o seguinte comando:

CREATE TABLE Clientes (ID INT, Nome VARCHAR(50));

9
ALTER: O comando ALTER é usado para modificar a estrutura de objetos existentes no
banco de dados. Ele permite adicionar, modificar ou excluir colunas de uma tabela,
bem como fazer outras alterações nas definições dos objetos. A sintaxe básica é a
seguinte:

ALTER objeto ALTER COLUMN coluna tipo;

Por exemplo, para adicionar uma nova coluna chamada "Email" à tabela "Clientes",
podemos usar o seguinte comando:

ALTER TABLE Clientes ADD COLUMN Email VARCHAR(100);

DROP: O comando DROP é usado para excluir objetos existentes no banco de dados.
Ele permite remover tabelas, índices, visões e outros objetos relacionados ao
esquema. A sintaxe básica é a seguinte:

DROP objeto;

Por exemplo, para excluir a tabela "Clientes" do banco de dados, podemos usar o
seguinte comando:

DROP TABLE Clientes;

TRUNCATE: O comando TRUNCATE é usado para remover todos os registros de uma


tabela, mas mantendo a estrutura da tabela intacta. É uma operação mais rápida do
que a exclusão de registros usando o comando DELETE, pois não registra cada
exclusão individualmente no log de transações. A sintaxe básica é a seguinte:

TRUNCATE TABLE tabela;

Por exemplo, se desejarmos remover todos os registros da tabela "Clientes",


podemos usar o seguinte comando:

TRUNCATE TABLE Clientes;

É importante observar que o comando TRUNCATE não pode ser desfeito (não é

9
possível recuperar os registros excluídos), portanto, deve-se usá-lo com cuidado.

Esses comandos DDL (CREATE, ALTER, DROP e TRUNCATE) são utilizados para definir e
modificar a estrutura do banco de dados. Eles permitem criar objetos, alterar suas
definições, remover objetos ou excluir registros de uma tabela. Cada comando
desempenha um papel importante na administração e modelagem do banco de
dados.

9
Conceitos Básicos Banco de
Dados
Linguagem de acesso a banco de dados

1.3 Linguagem de Controle de Dados - DCL


Controle de usuários e perfis para acessos ao banco de dados.

A linguagem de controle de dados (do inglês Data-Control Language –


DCL) é a linguagem que viabiliza o controle dos acessos ao banco
de dados.
Compõem a linguagem DCL os comandos GRANT (Para atribuir
direitos de acesso as estruturas e direitos administrativos),
REVOKE (para revogar direitos dados previamente).

Os comandos DCL (Data Control Language) são responsáveis por controlar os


privilégios de acesso e segurança em um banco de dados. Os principais comandos
DCL são GRANT e REVOKE.

GRANT: O comando GRANT é usado para conceder privilégios a um usuário ou grupo


de usuários em relação a objetos do banco de dados. Ele permite definir quais
operações um usuário pode executar em determinadas tabelas, visões,
procedimentos armazenados e outros objetos do banco de dados. A sintaxe básica é
a seguinte:

GRANT privilégios ON objeto TO usuário;

Por exemplo, para conceder permissão de leitura e escrita na tabela "Clientes" ao


usuário "joao", podemos usar o seguinte comando:

GRANT SELECT, INSERT, UPDATE, DELETE ON Clientes TO joao;

10
REVOKE: O comando REVOKE é usado para revogar privilégios previamente
concedidos a um usuário ou grupo de usuários. Ele remove as permissões
anteriormente definidas. A sintaxe básica é a seguinte:

REVOKE privilégios ON objeto FROM usuário;

Por exemplo, para revogar a permissão de leitura na tabela "Clientes" do usuário


"joao", podemos usar o seguinte comando:

REVOKE SELECT ON Clientes FROM joao;

Esses comandos DCL são importantes para garantir a segurança e controlar o acesso
aos dados em um banco de dados, definindo permissões específicas para os usuários
e grupos de usuários. Lamento novamente pelo equívoco anterior em relação ao
comando COMMIT.

10
Conceitos Básicos Banco de
Dados
Linguagem de acesso a banco de dados

1.4 Linguagem de Transação de Dados – TCL (ANSI)


Controle de transações em banco de dados.

A linguagem de transação de dados (do inglês Transction-Control


Language – TCL) é a linguagem que viabiliza o controle transacional
do banco de dados.
Compõem a linguagem TCL os comandos COMMIT (Para salvar
transações realizadas), ROLLBACK (para desfazer transações
pendentes) e SAVEPOINT (Para criar e controlar transações
nomeadas).

Os comandos TCL (Transaction Control Language, em inglês) são usados para


controlar transações em um banco de dados. Eles permitem iniciar, encerrar e
desfazer transações, garantindo a integridade dos dados e a consistência das
operações. Os principais comandos TCL são COMMIT, ROLLBACK e SAVEPOINT.

COMMIT: O comando COMMIT é usado para confirmar as alterações feitas em uma


transação. Ele torna as alterações permanentes no banco de dados e as torna visíveis
para outros usuários. A sintaxe básica é a seguinte:

COMMIT;

Por exemplo, após realizar uma série de operações DML (Data Manipulation
Language), como INSERT, UPDATE ou DELETE, é necessário executar o comando
COMMIT para tornar as alterações permanentes.

ROLLBACK: O comando ROLLBACK é usado para desfazer as alterações feitas em uma


transação. Ele reverte todas as operações realizadas desde o início da transação até o
último ponto de salvamento (SAVEPOINT) ou até o início da transação. A sintaxe

11
básica é a seguinte:

ROLLBACK;

Por exemplo, se ocorrer algum erro durante uma transação, é possível executar o
comando ROLLBACK para desfazer todas as alterações realizadas até aquele ponto e
retornar ao estado anterior.

SAVEPOINT: O comando SAVEPOINT é usado para marcar um ponto específico dentro


de uma transação para onde é possível voltar posteriormente, caso necessário. Ele
permite criar pontos de salvamento intermediários durante uma transação. A sintaxe
básica é a seguinte:

SAVEPOINT nome_savepoint;

Por exemplo, durante uma transação, podemos definir um ponto de salvamento


chamado "ponto1" da seguinte maneira:

SAVEPOINT ponto1;

Posteriormente, podemos usar o comando ROLLBACK para retornar ao ponto de


salvamento "ponto1" e desfazer as alterações feitas a partir daquele ponto.

Esses comandos TCL (Transaction Control Language) são essenciais para controlar o
fluxo e a integridade das transações em um banco de dados. Eles garantem que as
alterações sejam confirmadas ou desfeitas adequadamente,

11
Conceitos Básicos Banco de
Dados - Tabelas
• Tabelas são estruturas de banco de dados para
armazenamento de dados, que utilizam mecanismos de
armazenamento, conforme visto anteriormente.
• Tabelas são semelhantes a planilhas de dados (Microsoft
Excel), que utilizam a estrutura de colunas , onde são
armazenados dados por tipos (conforme vimos em
datatypes)
• Cada conjunto individual de dados é chamado de registro,
linha ou tupla.
• Normalmente é razoável estabelecer uma ou mais colunas
que apresentem valores únicos o que é chamado Chave
Primária ou Primary Key ou PK, veremos isso no tópico
constraints.

Tabelas em bancos de dados são estruturas fundamentais para organizar e armazenar


dados de forma estruturada. Elas representam conjuntos de entidades relacionadas,
onde cada linha da tabela corresponde a um registro e cada coluna representa um
atributo ou campo do registro. As tabelas são compostas por vários componentes,
como:

Nome da Tabela: É o identificador único da tabela dentro do banco de dados. O nome


deve ser único e significativo, representando o tipo de dados que a tabela armazena.

Colunas: Também conhecidas como campos, as colunas representam os atributos dos


registros armazenados na tabela. Cada coluna possui um nome e um tipo de dados
específico, como texto, número inteiro, data, entre outros.

Linhas: Também chamadas de registros ou tuplas, as linhas representam as entradas


individuais de dados em uma tabela. Cada linha contém valores correspondentes aos
atributos definidos pelas colunas.

Chave Primária: É um atributo (ou conjunto de atributos) que identifica


exclusivamente cada registro da tabela. Ela garante a unicidade dos registros e é

12
usada para estabelecer relacionamentos com outras tabelas.

Relacionamentos: Em um banco de dados relacional, as tabelas podem estar


relacionadas entre si por meio de chaves estrangeiras. Isso permite estabelecer
ligações e associações entre os registros de diferentes tabelas, formando uma
estrutura de dados coesa.

A estrutura de uma tabela é definida pelo esquema do banco de dados. O esquema


determina o nome da tabela, as colunas, os tipos de dados, as restrições e outros
detalhes relacionados à organização dos dados. Além disso, a tabela pode ter índices
para otimizar a busca e a recuperação dos dados.

As tabelas fornecem uma estrutura lógica para armazenar e organizar dados de forma
consistente e eficiente em um banco de dados. Elas desempenham um papel
fundamental na modelagem e na manipulação de informações em um sistema de
gerenciamento de banco de dados.

12
Conceitos Básicos Banco de
Dados - Tabelas
• Tabelas podem sofrer operações de DML para tratamento e
manipulação de dados (INSERT, UPDATE, DELETE, SELECT,
MERGE).
• Tabelas podem sofrer operações de DDL para criação,
manutenção e eliminação de dados (CREATE,ALTER , DROP).
• Tabelas podem ter um ou maís índices para melhorar a
performance no acesso as mesmas, afim de evitar a
operação chamada de FULL TABLE SCAN (busca em todos
os registros da tabela por registros desejados)
• Tabelas e colunas com character set (tipos de línguas que
se deseja armazenar caracteres)
• Tabelas possuem uma propriedade chamada Collation que
determinam características de pesquisa a dados.

13
Conceitos Básicos Banco de
Dados - Índice
• Índice são estruturas de banco de dados para armazenamento de dados, visando a recuperação de dados
utilizando menor volume de leitura, com isso evitando a operação de FULL TABLE SCAN

Indíce

tabela

FULL TABLE SCAN INDEX RANGE SCAN

FULL TABLE SCAN: Nesta operação os dados são acessados serialmente do inicio ao
fim tabela sem o uso de índices, a falta de cláusula WHERE leva a essa operação, e
operações de consulta com cláusula WHERE (restrição da consulta) sem o
embasamento de um índice também promovem FULL TABLE SCAN

INDEX RANGE SCAN: Nesta operação a pesquisa ocorre usando uma cláusula WHERE
(restrição da consulta) que esteja vinculada a uma condição (uma ou mais colunas)
indexadas. Tipicamente pelo uso de operador BETWEEN ou <= ou < ou >= ou >.

Em bancos de dados, a estrutura de índices é usada para melhorar a eficiência e o


desempenho das consultas. Os índices são estruturas auxiliares que permitem
localizar rapidamente os registros de uma tabela com base em determinadas colunas.
Eles ajudam a acelerar a busca, reduzindo a quantidade de dados a serem
examinados durante a execução de consultas.

Os índices são criados em colunas específicas de uma tabela e armazenam os valores


dessas colunas ordenados de forma estruturada. Quando uma consulta é executada,
o mecanismo de banco de dados utiliza o índice correspondente para encontrar os

14
registros relevantes, evitando a necessidade de percorrer toda a tabela.

Aqui estão alguns pontos-chave sobre a estrutura de índices em bancos de dados:

Criação de Índices: Os índices são criados usando uma ou mais colunas da tabela.
Geralmente, as colunas que são frequentemente usadas em cláusulas de pesquisa,
junções ou ordenação são escolhidas para a criação de índices. A criação de índices
pode ser feita durante a criação da tabela ou posteriormente, usando comandos DDL
(Data Definition Language) específicos.

Tipos de Índices: Existem diferentes tipos de índices, dependendo do mecanismo de


banco de dados utilizado. Alguns exemplos comuns incluem índices B-tree, índices
hash e índices de texto completo. Cada tipo de índice tem suas características e
métodos de armazenamento específicos.

Manutenção de Índices: Os índices devem ser atualizados sempre que os dados da


tabela são modificados. Isso garante que os índices permaneçam atualizados e
reflitam a estrutura atual da tabela. Durante as operações de inserção, atualização ou
exclusão de registros, o mecanismo de banco de dados deve atualizar os índices
correspondentes para refletir as alterações.

Benefícios dos Índices: Os índices permitem consultas mais rápidas e eficientes, pois
reduzem o número de acessos ao disco necessário para encontrar os registros
desejados. Eles melhoram o desempenho de consultas de pesquisa, junção e
ordenação. No entanto, a criação excessiva de índices pode ter um impacto negativo
no desempenho de operações de inserção, atualização e exclusão de registros, pois
os índices também precisam ser atualizados.

Considerações ao Usar Índices: É importante considerar cuidadosamente quais


colunas devem ter índices, levando em conta as consultas mais frequentes e as
necessidades específicas do sistema. Além disso, é importante monitorar e otimizar
periodicamente os índices para garantir que estejam sendo usados de maneira
eficiente.

14
Conceitos Básicos Banco de
Dados - Índice
• Índices são estruturas muito importantes
para a saúde do banco de dados pois evitam
o excesso de operações de FULL TABLE SCAN
e com isso maximizam a recuperação de
dados , diminuindo operações de I/O
(Leitura e gravações físicas).
• São uteis particularmente para as operações
de pesquisa a dados (Comando DML –
SELECT) e de forma menos importante a
operações de alteração de dados (Comando
DML – UPDATE) e de exclusão de dados
(Comando DML – Delete). Já a inserção de
dados é afetada a cada novo índdice
associado a tabela pois o mesmo é
atualizado no momento em que a ação de
inserção é realizada.

Todo índice inicia no nível chamado raiz (root) é nele que é informado em qual lado
da arvore a informação do registro poderá ser localizada.
Após a localização (genérica) do dado é necessário passar pelo nível 1 do índice e lá
será indicada a localização do dado no nível 0 (folha).
No nível 0 o dado é localizado e indicado onde fisicamente se encontra na tabela.

15
Conceitos Básicos Banco de
Dados - Memória
Gerenciador de Memória

• Um dos principais objetivos de um Sistema de Banco de Dados é simplificar e


otimizar o acesso aos dados

• O desempenho de um SBD depende diretamente da eficiência das estrutura


usadas na representação dos dados e do quanto este sistema está apto a
operar essas estrutura de dados

• Um dos principais módulos de um SGBD é o gerenciador de memória,


responsável por fazer a interface entre o armazenamento de dados em um
nível mais baixo e as consultas e programas de aplicação submetidos ao
sistema. Ele também realiza a interface do SBD com o Sistema de Arquivos do
Sistema Operacional.

• É o gerenciador de memória quem traduz os diversos comandos DML em


comandos de baixo nível de sistemas de arquivos.

O gerenciamento de memória em um banco de dados é um conceito importante que


se refere à forma como o sistema de gerenciamento de banco de dados (SGBD) lida
com a alocação, liberação e otimização do uso de memória durante as operações de
armazenamento e recuperação de dados.

Existem duas áreas principais em que o gerenciamento de memória é aplicado em


um banco de dados: memória do sistema e memória do disco.

Memória do Sistema: A memória do sistema, também conhecida como memória


principal ou RAM (Random Access Memory), é usada para armazenar os dados e as
estruturas temporárias necessárias para as operações do banco de dados em
execução. O gerenciamento de memória do sistema envolve a alocação e a liberação
de espaço de memória conforme necessário.

Buffer Pool: O SGBD aloca uma parte da memória do sistema chamada de "buffer
pool" para armazenar páginas de dados frequentemente acessadas. Isso ajuda a
reduzir as operações de leitura e escrita no disco, pois os dados podem ser acessados
de forma mais rápida a partir da memória principal.

16
Cache de Consultas: O cache de consultas é uma área da memória utilizada para
armazenar os resultados de consultas recentes. Se uma consulta idêntica for feita
novamente, o SGBD pode recuperar os resultados diretamente do cache, evitando a
necessidade de executar a consulta novamente.

Memória do Disco: A memória do disco é a área de armazenamento em massa


permanente, como discos rígidos, onde os dados são armazenados quando não estão
em uso. O gerenciamento de memória do disco envolve a otimização do acesso a
esses dados por meio de técnicas como indexação e armazenamento eficiente de
arquivos.

Índices: Os índices são estruturas de dados adicionais usadas para acelerar a busca e
a recuperação de registros em uma tabela. Eles são armazenados em disco e
permitem que o SGBD localize rapidamente os dados relevantes sem percorrer toda a
tabela.

Organização de Arquivos: O gerenciamento de memória do disco também envolve a


forma como os dados são organizados e armazenados em arquivos no disco. Isso
pode incluir a utilização de técnicas como particionamento, fragmentação e
compactação para otimizar o uso do espaço em disco.

O objetivo do gerenciamento de memória em um banco de dados é garantir que os


dados sejam armazenados e acessados de maneira eficiente. Isso envolve a utilização
adequada da memória do sistema, como a alocação de espaço em buffer para
páginas de dados frequentemente acessadas, e a otimização do acesso aos dados no
disco, como o uso de índices para acelerar as consultas. O gerenciamento eficiente da
memória em um banco de dados é fundamental para garantir um desempenho
adequado e uma boa utilização dos recursos disponíveis.

16
Conceitos Básicos Banco de
Dados - Memória
Composição do Gerenciador de Memória

• Composição

– Gerenciamento de autorizações e integridade


• testam o cumprimento das regras de integridade e a permissão ao usuário no
acesso ao dado

– Gerenciamento de Transações
• cuida da execução das transações

– Administração de buffer
• responsável pela intermediação de dados do disco para a memória principal e pela
decisão de quais dados colocar em memória auxiliar

– Administração de arquivos
• gerencia a alocação de espaço no armazenamento em disco e as estruturas de
dados usadas para representar estas informações armazenadas em disco.

O gerenciamento de autorizações e integridade, gerenciamento de transações,


administração de buffer e administração de arquivos e grupos de arquivos são
elementos importantes em um sistema de gerenciamento de banco de dados (SGBD).
Vou explicar brevemente cada um deles:

Gerenciamento de Autorizações e Integridade:

Gerenciamento de Autorizações: Refere-se ao controle de acesso e permissões de


usuários em um banco de dados. O SGBD gerencia as autorizações para garantir que
apenas usuários autorizados possam acessar, modificar ou executar operações no
banco de dados. Isso é feito por meio da concessão e revogação de privilégios de
acordo com as políticas de segurança definidas.

Gerenciamento de Integridade: Envolve a aplicação e manutenção de restrições de


integridade nos dados do banco de dados. Isso inclui restrições de chave primária,
chave estrangeira, restrições de domínio e outras regras definidas para garantir a
consistência e a validade dos dados armazenados.

Gerenciamento de Transações:

17
O gerenciamento de transações envolve o controle e a coordenação das operações
realizadas em um banco de dados. As transações são unidades lógicas de trabalho
compostas por um conjunto de operações relacionadas, como inserções, atualizações
ou exclusões de registros. O SGBD garante a atomicidade, consistência, isolamento e
durabilidade das transações (propriedades ACID), garantindo que as operações sejam
concluídas com sucesso ou desfeitas em caso de falhas.

Administração de Buffer:

A administração de buffer está relacionada ao uso eficiente da memória principal


(buffer) para melhorar o desempenho do banco de dados. O SGBD mantém um
conjunto de páginas de dados frequentemente acessadas em memória para reduzir a
necessidade de acesso ao disco. Isso é chamado de cache de páginas ou buffer pool.
O SGBD decide quais páginas devem ser carregadas ou removidas do buffer com base
em políticas de substituição, como a política de substituição LRU (Least Recently
Used).

Administração de Arquivos e Grupos de Arquivos:

A administração de arquivos está relacionada à organização e armazenamento físico


dos dados no disco. O SGBD gerencia os arquivos que compõem o banco de dados,
incluindo a criação, expansão, exclusão e backup dos arquivos. Os arquivos podem
ser agrupados em grupos de arquivos, também conhecidos como tablespaces, que
facilitam a alocação e a organização dos dados em diferentes unidades físicas de
armazenamento.

Esses aspectos são essenciais para o bom funcionamento de um banco de dados. O


gerenciamento de autorizações e integridade garante a segurança e a consistência
dos dados. O gerenciamento de transações garante a atomicidade e a consistência
das operações. A administração de buffer melhora o desempenho ao reduzir a
necessidade de acesso ao disco. A administração de arquivos e grupos de arquivos
facilita a organização e o armazenamento dos dados físicos. Em conjunto, esses
elementos contribuem para a eficiência e a integridade de um banco de dados.

17
Conceitos Básicos Banco de
Dados - Armazenamento
Armazenamento em disco

• Arquivo de dados
– armazena os dados (o banco de dados propriamente dito)

• Dicionário de dados
– meta-dados

• Índices
– estrutura que otimizam o acesso aos itens de dados

• Estatística de dados
– armazena informações estatísticas relativas aos dados contidos no banco de dados
e as utiliza no processador de consultas para seleção de meios eficientes para
execução de consultas

Arquivos de Dados: Os arquivos de dados são a representação física dos dados


armazenados em um banco de dados. Eles contêm os registros que compõem as
tabelas, incluindo todas as informações necessárias para representar os dados de
forma estruturada. Os arquivos de dados são organizados e gerenciados pelo sistema
de gerenciamento de banco de dados (SGBD).

Dicionário de Dados: O dicionário de dados, também conhecido como catálogo do


banco de dados, é uma coleção de metadados que descreve a estrutura e as
características dos objetos do banco de dados. Ele armazena informações sobre as
tabelas, colunas, relacionamentos, índices, restrições, usuários e outros elementos
do banco de dados. O dicionário de dados é usado pelo SGBD para interpretar e
executar comandos SQL, além de garantir a integridade dos dados e a consistência
das operações.

Índices: Os índices são estruturas de dados utilizadas para acelerar a recuperação de


informações em um banco de dados. Eles são criados em colunas específicas de uma
tabela para permitir a localização rápida dos registros com base nos valores dessas
colunas. Os índices ajudam a reduzir a quantidade de dados a serem examinados
durante as consultas, melhorando o desempenho das operações de busca e junção.

18
No entanto, a criação de índices adicionais pode aumentar o espaço em disco e afetar
o desempenho de operações de inserção e atualização de dados.

Estatísticas de Dados: As estatísticas de dados são informações sobre a distribuição e


a cardinalidade dos valores nas colunas de uma tabela. Elas são usadas pelo
otimizador do SGBD para tomar decisões sobre o plano de execução das consultas. As
estatísticas de dados ajudam o otimizador a estimar o custo de diferentes planos de
execução e a escolher o mais eficiente. Essas estatísticas podem incluir informações
como o número total de linhas na tabela, a cardinalidade de valores distintos em uma
coluna e a distribuição de valores em uma coluna.

Esses conceitos são fundamentais para a compreensão e o gerenciamento de um


banco de dados. Os arquivos de dados armazenam os registros físicos, o dicionário de
dados contém informações sobre a estrutura e os objetos do banco de dados, os
índices aceleram a recuperação de dados e as estatísticas de dados auxiliam na
otimização do desempenho das consultas. Todos esses elementos trabalham em
conjunto para fornecer um ambiente eficiente e confiável para armazenar e acessar
os dados em um banco de dados.

18
Conceitos Básicos Banco de Dados
– Constraints Chave Primária
• Constraints são regras de integridade de dados que
podemos impor aos bancos de dados
transacionais, definidas por padrão definido pela
ANSI, são elas:
– Chave Primária (Primary Key ou PK). Uma ou
mais colunas que não podem ter valores
repetidos , ou seja, cada registro deve ter um
valor único para a chave escolhida. Uma tabela
só pode ter uma única chave primária. As
colunas de chave primária são obrigatórias
(constraint NOT NULL). As chaves primárias são
a base do relacionamento de um tabela.

A chave primária é um conceito importante em bancos de dados relacionais. Ela é


utilizada para identificar de forma exclusiva cada registro em uma tabela.
Explicaremos sua importância e como ela é implementada nos bancos de dados
Oracle, SQL Server e PostgreSQL:

Importância da Chave Primária:


A chave primária desempenha um papel fundamental na garantia da integridade e
consistência dos dados. Ela garante que cada registro em uma tabela tenha um
identificador único, o que facilita a identificação e a localização de registros
específicos. Além disso, a chave primária é frequentemente usada como base para
estabelecer relacionamentos entre tabelas por meio de chaves estrangeiras.

Implementação em Oracle:
No Oracle, a chave primária pode ser definida durante a criação da tabela ou
posteriormente com o comando ALTER TABLE. É comum usar a cláusula CONSTRAINT
para definir a chave primária, especificando o nome da chave e as colunas que a
compõem. Por exemplo:

19
CREATE TABLE TabelaExemplo (
ID NUMBER,
Nome VARCHAR2(50),
CONSTRAINT PK_TabelaExemplo PRIMARY KEY (ID)
);

Implementação no SQL Server:


No SQL Server, a chave primária também pode ser definida durante a criação da
tabela ou posteriormente com o comando ALTER TABLE. É usada a cláusula
CONSTRAINT para especificar o nome da chave primária e as colunas associadas. Por
exemplo:

CREATE TABLE TabelaExemplo (


ID INT,
Nome VARCHAR(50),
CONSTRAINT PK_TabelaExemplo PRIMARY KEY (ID)
);

Implementação no PostgreSQL:
No PostgreSQL, a chave primária pode ser definida durante a criação da tabela
usando a cláusula PRIMARY KEY. É possível especificar o nome da chave primária e as
colunas associadas. Por exemplo:

CREATE TABLE TabelaExemplo (


ID SERIAL PRIMARY KEY,
Nome VARCHAR(50)
);
No exemplo acima, a coluna "ID" é definida como SERIAL, o que cria
automaticamente um valor único para cada registro inserido.

Essas implementações nos bancos de dados Oracle, SQL Server e PostgreSQL


mostram que a chave primária é uma restrição fundamental para garantir a unicidade
dos registros em uma tabela. A escolha e a implementação da chave primária podem
variar de acordo com o banco de dados específico, mas o conceito geral permanece o
mesmo: garantir a identificação única de cada registro.

19
Conceitos Básicos Banco de Dados
– Constraints Chave Estrangeira
• Constraints são regras de integridade de dados que
podemos impor aos bancos de dados
transacionais, definidas por padrão definido pela
ANSI, são elas:
– Chave Estrangeira (Foreign Key ou FK). São
regras que validam valores de chaves primárias
existentes em tabelas relacionadas, uma ou
mais colunas serão colocadas na tabela
relacionada e aceitarão apenas valores
existentes na tabela relacionada.
– Uma tabela pode ter uma ou mais chaves
estrangeiras.
– Chaves estrangeiras podem ser obrigatórias
(constraint Not Null) ou opcionais.

A chave estrangeira é um conceito importante em bancos de dados relacionais. Ela é


usada para estabelecer e manter relacionamentos entre tabelas, referenciando a
chave primária de uma tabela em outra tabela. Explicaremos sua importância e como
ela é implementada nos bancos de dados Oracle, SQL Server e PostgreSQL.

Importância da Chave Estrangeira:


A chave estrangeira é fundamental para garantir a integridade referencial dos dados.
Ela estabelece um vínculo entre as tabelas, permitindo que os relacionamentos entre
os registros sejam mantidos consistentes. Através da chave estrangeira, é possível
realizar operações como junções entre tabelas e manter a consistência dos dados
relacionados.

Implementação em Oracle:
No Oracle, a chave estrangeira é definida durante a criação da tabela ou
posteriormente com o comando ALTER TABLE. É usada a cláusula CONSTRAINT para
definir a chave estrangeira, especificando o nome da chave, as colunas que a
compõem e a tabela e a coluna de referência. Por exemplo:

CREATE TABLE TabelaFilha (

20
ID NUMBER,
Nome VARCHAR2(50),
TabelaPai_ID NUMBER,
CONSTRAINT FK_TabelaFilha_TabelaPai
FOREIGN KEY (TabelaPai_ID) REFERENCES TabelaPai (ID)
);

Implementação no SQL Server:

No SQL Server, a chave estrangeira também pode ser definida durante a criação da
tabela ou posteriormente com o comando ALTER TABLE. É usada a cláusula
CONSTRAINT para especificar o nome da chave estrangeira, as colunas associadas e a
tabela e a coluna de referência. Por exemplo:

CREATE TABLE TabelaFilha (


ID INT,
Nome VARCHAR(50),
TabelaPai_ID INT,
CONSTRAINT FK_TabelaFilha_TabelaPai
FOREIGN KEY (TabelaPai_ID) REFERENCES TabelaPai (ID)
);

Implementação no PostgreSQL:

No PostgreSQL, a chave estrangeira pode ser definida durante a criação da tabela


usando a cláusula REFERENCES. É possível especificar o nome da chave estrangeira,
as colunas associadas e a tabela e a coluna de referência. Por exemplo:

CREATE TABLE TabelaFilha (


ID SERIAL,
Nome VARCHAR(50),
TabelaPai_ID INT,
CONSTRAINT FK_TabelaFilha_TabelaPai
FOREIGN KEY (TabelaPai_ID) REFERENCES TabelaPai (ID)
);

Nas implementações nos bancos de dados Oracle, SQL Server e PostgreSQL, a chave
estrangeira estabelece uma relação entre as tabelas, garantindo que os registros
relacionados sejam mantidos consistentes. A implementação específica pode variar
de acordo com o banco de dados, mas o conceito geral é o mesmo: vincular a chave

20
primária de uma tabela à chave estrangeira em outra tabela

20
Conceitos Básicos Banco de Dados
– Constraints Chave Única
• Constraints são regras de integridade de dados que
podemos impor aos bancos de dados
transacionais, definidas por padrão definido pela
ANSI, são elas:
– Chave única (unique Key ou UK). São regras
que validam valores únicos para colunas da
tabela, não possuindo nenhuma relação com
chave primária.
– Uma tabela pode ter uma ou mais chaves
unicas.
– Chaves únicas são usadas apenas em caráter de
pesquisa e também são chamadas de chaves
alternadas ou alternate keys.

A restrição de chave única, também conhecida como chave única ou unique key, é um
conceito em bancos de dados relacionais que garante que os valores em uma ou mais
colunas de uma tabela sejam exclusivos. Essa restrição é aplicada para evitar
duplicação de dados e manter a integridade dos registros. Explicaremos sua
importância e como ela é implementada nos bancos de dados Oracle, SQL Server e
PostgreSQL.

Importância da Chave Única:

A restrição de chave única é importante para evitar a inclusão de valores duplicados


em uma coluna ou conjunto de colunas, garantindo assim a unicidade dos dados. Ela
ajuda a manter a integridade dos registros e é especialmente útil quando se deseja
que determinadas colunas tenham valores únicos, mas não necessariamente
funcionem como identificadores exclusivos, como é o caso da chave primária.

Implementação em Oracle:

No Oracle, a restrição de chave única é definida durante a criação da tabela ou


posteriormente com o comando ALTER TABLE. É usada a cláusula CONSTRAINT para

21
especificar o nome da restrição e as colunas que devem ser únicas. Por exemplo:

CREATE TABLE TabelaExemplo (


ID NUMBER,
Email VARCHAR2(50),
CONSTRAINT UK_TabelaExemplo_Email UNIQUE (Email)
);

Implementação no SQL Server:

No SQL Server, a restrição de chave única pode ser definida durante a criação da
tabela ou posteriormente com o comando ALTER TABLE. É usada a cláusula
CONSTRAINT para especificar o nome da restrição e as colunas que devem ser únicas.
Por exemplo:

CREATE TABLE TabelaExemplo (


ID INT,
Email VARCHAR(50),
CONSTRAINT UK_TabelaExemplo_Email UNIQUE (Email)
);

Implementação no PostgreSQL:

No PostgreSQL, a restrição de chave única é definida durante a criação da tabela


usando a cláusula UNIQUE. É possível especificar o nome da restrição e as colunas
que devem ser únicas. Por exemplo:

CREATE TABLE TabelaExemplo (


ID SERIAL,
Email VARCHAR(50),
CONSTRAINT UK_TabelaExemplo_Email UNIQUE (Email)
);

Nas implementações nos bancos de dados Oracle, SQL Server e PostgreSQL, a


restrição de chave única é utilizada para garantir que os valores em uma ou mais
colunas sejam únicos. Isso evita a duplicação de dados e ajuda a manter a integridade
dos registros. As implementações podem variar, mas o conceito geral é o mesmo:
especificar quais colunas devem ter valores exclusivos na tabela.

21
Conceitos Básicos Banco de
Dados – Constraints Not Null
• Constraints são regras de integridade de dados que
podemos impor aos bancos de dados
transacionais, definidas por padrão definido pela
ANSI, são elas:
– Campo obrigatório (Not Null) é uma regra que
obriga que os campos possuam valores, não
validando o conteúdo dos mesmos, apenas
obrigando que algum valor seja introduzido a
coluna na tabela no momento da inserção ou
da alteração de dados.

A restrição NOT NULL é usada em bancos de dados relacionais para garantir que um
determinado campo ou coluna não possua valores nulos. Essa restrição é aplicada
para assegurar a integridade dos dados e evitar a inserção de valores vazios ou
desconhecidos em campos essenciais. Explicaremos a importância dessa restrição e
como ela é implementada nos bancos de dados Oracle, SQL Server e PostgreSQL.

Importância da Restrição NOT NULL:

A restrição NOT NULL é importante para garantir que os campos obrigatórios em uma
tabela tenham valores válidos, evitando a ocorrência de valores nulos que possam
comprometer a integridade dos dados e causar erros em consultas e operações.

Implementação em Oracle:

No Oracle, a restrição NOT NULL é definida durante a criação da tabela ou


posteriormente com o comando ALTER TABLE. É usada a cláusula CONSTRAINT para
especificar o nome da restrição e a coluna que não pode aceitar valores nulos. Por
exemplo:

22
CREATE TABLE TabelaExemplo (
ID NUMBER NOT NULL,
Nome VARCHAR2(50) NOT NULL
);

Implementação no SQL Server:

No SQL Server, a restrição NOT NULL é definida durante a criação da tabela ou


posteriormente com o comando ALTER TABLE. É usada a cláusula CONSTRAINT para
especificar o nome da restrição e a coluna que não pode conter valores nulos. Por
exemplo:

CREATE TABLE TabelaExemplo (


ID INT NOT NULL,
Nome VARCHAR(50) NOT NULL
);

Implementação no PostgreSQL:

No PostgreSQL, a restrição NOT NULL é definida durante a criação da tabela usando a


cláusula NOT NULL. É aplicada diretamente nas colunas que não podem aceitar
valores nulos. Por exemplo:

CREATE TABLE TabelaExemplo (


ID SERIAL NOT NULL,
Nome VARCHAR(50) NOT NULL
);

Nas implementações nos bancos de dados Oracle, SQL Server e PostgreSQL, a


restrição NOT NULL é utilizada para garantir que os campos obrigatórios tenham
valores válidos e não nulos. Isso ajuda a manter a integridade dos dados e a evitar
erros de consulta e operações em campos essenciais que não podem ficar vazios.

22
Conceitos Básicos Banco de
Dados
Processamento de Consultas

• Compilador DML
– traduz comandos DML em instruções de baixo nível, entendidos pelo
componente de execução de consultas. Além disso, otimiza a solicitação do
usuário.

• Pré-compilador para comandos DML


– convertem comandos DML em chamadas de procedimentos normais da
linguagem hospedeira. Interage com o compilador DML de modo a gerar o
código apropriado.

• Interpretador DDL
– interpreta os comandos DDL e os registra no dicionário de dados

• Componentes para tratamento de consultas


– executa instruções de baixo nível gerada pelo compilador DML.

No processamento de consultas em um banco de dados, existem vários componentes


e etapas envolvidos. Vou explicar sobre o compilador DML, o pré-compilador DML, o
interpretador de DDL e os componentes para tratamento de consultas que executam
instruções de baixo nível geradas pelo compilador DML:

Compilador DML:

O compilador DML é responsável por processar as consultas escritas na linguagem de


manipulação de dados (DML), como SELECT, INSERT, UPDATE e DELETE. Ele analisa a
sintaxe e a semântica da consulta e gera um plano de execução otimizado, que
descreve a melhor forma de obter os resultados desejados da consulta. O compilador
DML é responsável por traduzir a consulta em instruções de baixo nível
compreendidas pelo sistema de gerenciamento de banco de dados (SGBD).

Pré-compilador DML:

O pré-compilador DML é um componente que permite que as consultas DML sejam


escritas em um programa de aplicação, incorporando-as ao código-fonte da
aplicação. Ele analisa as consultas DML incorporadas ao código e as transforma em

23
chamadas para o SGBD. O pré-compilador DML pode fornecer recursos adicionais,
como verificação de erros de sintaxe, otimização de consultas e manipulação de
parâmetros.

Interpretador de DDL:

O interpretador de DDL (Data Definition Language) é responsável por processar as


instruções de definição de dados, como CREATE TABLE, ALTER TABLE e DROP TABLE.
Ele analisa as instruções de DDL e realiza as alterações na estrutura do banco de
dados conforme especificado. O interpretador de DDL atualiza o catálogo do banco
de dados, que contém metadados sobre as tabelas, colunas, restrições e outros
objetos do banco de dados.

Componentes para tratamento de consultas:

Após o compilador DML gerar o plano de execução otimizado, existem vários


componentes no SGBD que tratam a execução da consulta:

O otimizador de consultas analisa o plano de execução gerado e decide a melhor


estratégia para acessar os dados, como a escolha de índices, algoritmos de junção e
técnicas de ordenação.

O gerenciador de buffer gerencia o cache de páginas de dados em memória,


garantindo a leitura e escrita eficiente dos dados necessários pela consulta.

O executor de consultas é responsável por seguir o plano de execução e obter os


dados solicitados. Ele coordena as operações de acesso aos dados, processa as
junções, aplica as restrições e realiza as operações de projeção e filtragem.

O gerenciador de transações garante a consistência e a atomicidade das operações


realizadas pela consulta, controlando o início e o término das transações e
gerenciando o bloqueio de recursos.

Esses componentes trabalham em conjunto para processar e executar as consultas


em um banco de dados. O compilador DML e o pré-compilador DML lidam com a
tradução e otimização das consultas escritas pelos usuários ou incorporadas a
programas de aplicação. O interpretador de DDL processa as instruções de definição
de dados

23
Conceitos Básicos Banco de
Dados
Leitura e Gravação de Dados (Input/Output) - IO
• A leitura e gravação em banco de dados é extremamente importante e crítica pois envolve o acesso a estrturas como
disco que por sua vez trabalham em milissegundos, enquanto a memória trabalha em nanosegundos , isso por si só, já
provoca um desequilíbrio, pois cada vez que há a necessidade de buscar informações em disco, a velocidade tende a
cair vertiginosamente. Logo colocar dados em memória para que sejam acessados mais rapidamente é algo que se faz
necessário para qualquer SGBD.
• Tanto leituras como gravações podem ser lógicas (Logical Reads, Logical Writes), ou seja, feitas em memória e se
necessário em outro momento ser realizados em disco.
• A memória porém é limitada e logo em muitos momentos a leitura e principalmente a gravação deverão ser físicas
(Physical reads, Physical Writes), ou seja, feitas em disco.
• Os tipos de caminhos aos dados podem ser feitas das seguintes formas:
– Full Table Scans
– Table Access by Rowid - Index Fast Full Scans
– Sample Table Scans - Index Skip Scans
– Index Unique Scans - Index Join Scans
- Bitmap Index Single Value
– Index Range Scans - Bitmap Index Range Scans
– Index Full Scans - Bitmap Merge
- Bitmap Index Range Scans

Full Table Scan – Leitura do 1º. Ao ultimo registro em uma tabela, isso pode ocorrer
quando uma tabela não possui índices, ou o critério da pesquisa (clausula WHERE)
não possui índices adequados, ou a quantidade de registros que são recuperados
forem maiores que 4% do total de registros em uma tabela.

Table Access by Rowid – Leitura específica de um registro em um banco de dados


oracle, Rowid é o localizador único de um registro em um banco de dados,
funcionando de forma análoga as coordenadas de GPS(Latitude ,Longitude e hora),
não existem 2 rowids iguais em um mesmo banco de dados, esta é a melhor forma
de acesso em um banco de dados Oracle

Sample Table Scan – Acesso a tabela utilizando a clausula SAMPLE, limitando um


numero determinado de registros em uma pesquisa, por exemplo os 10 primeiros
registros em uma pesquisa de 100 ou mais registros.

Index Unique Scan – Acesso aos dados em uma tabela através do acesso a uma única
ocorrência em um índice. Aplicável somente em casos de índices únicos e chaves
primárias, neste caso são realizados dois acessos um ao índice e outro a tabela,
portanto são consideradas para cada registro acessado dois movimentos.

24
Index Range Scan – Acesso aos dados em uma tabela através da leitura de um ou
mais registros em um índice, com isso é feita uma leitura parcial do índice baseado
em uma faixa , por exemplo clientes com códigos entre 1 e 10. Neste caso serão lidos
10 entradas nos índices e para cada entrada será feita uma leitura aos dados

Index Full Scan – Realiza um acesso a todos os registros em um índice baseado na sua
ordenação, com isso o resultado da leitura acaba forçando uma ordenação do
resultado, incluindo na consulta uma clausula ORDER BY. Isso funciona apenas para
colunas Não nulas que sejam indexadas.

Index Fast Full Scan – Força o acesso ao índice como se fosse a tabela, isso é razoável
quando as colunas utilizadas na consulta fizerem parte do índice, neste caso , todas
as colunas usadas tem que fazer parte do índice, para utilizar este recurso é
necessário impor um ajuste ao comando através de uma HINT chamada
INDEX_FFS(table_name index_name), veremos um pouco sobre hints em otimização
básica de comandos.

Index Skip Scan – Este tipo de acesso é realizado quando uma coluna parte de um
índice não foi informado em uma pesquisa, por exemplo um índice baseado nas
colunas nome e sobrenome porem a restrição ocorre apenas usando o sobrenome.

Index Join Scan – Força o uso de múltiplos índices que atuam em conjunto para a
recuperação dos dados, ao acesso aos dados é feito utilizando-se o próprio índice

Bitmap são um tipo de índice muito utilizado em sistemas de apoio a decisão (DSS)
que utilizam índices para acessos a dados em colunas com baixa cardinalidade, ou
seja, pouca variação de valores, por exemplo a coluna sexo em uma tabela de
clientes, podemos dizer que a coluna sexo possui uma baixa cardinalidade, entenda-
se valores distintos (apenas masculino e feminino)

24
Conceitos Básicos Banco de
Dados
Tipos de Armazenamentos Físicos
• O armazenamento de dados normalmente deverá ser realizado através de dispositivos de armazenamento conhecidos
como discos, que podem ser locais, ou seja, instalados na própria máquina onde se encontra o SGBD, podendo ainda
serem acessados em um STORAGE de discos, que consiste em um armazenamento feito fora da maquina onde se
encontra o SGBD instalado.
• Alem disso o armazenamento tem a sua própria arquitetura, divididas de forma a saber:

– SAN
– NAS
– DAS
– JOBD
– ASM

• Conforme a arquitetura o acesso pode ser mais performático ou menos, dependendo da necessidade e dos
investimentos realizados.

As arquiteturas de armazenamento SAN (Storage Area Network), NAS (Network-


Attached Storage), DAS (Direct-Attached Storage), JOBD (Just a Bunch of Disks) e ASM
(Automatic Storage Management) são utilizadas para fornecer armazenamento de
dados em ambientes de TI. Explicaremos brevemente cada uma delas:

SAN (Storage Area Network):

Uma SAN é uma rede dedicada de armazenamento que conecta servidores e


dispositivos de armazenamento, como arrays de discos, por meio de uma
infraestrutura de rede de alta velocidade. Ela fornece um ambiente centralizado de
armazenamento compartilhado, permitindo que vários servidores acessem e
compartilhem os mesmos recursos de armazenamento. As SANs são escaláveis,
flexíveis e oferecem recursos avançados, como alta disponibilidade, recuperação de
desastres e migração de dados.

NAS (Network-Attached Storage):

O NAS é um sistema de armazenamento conectado a uma rede, geralmente por meio


de uma conexão Ethernet. Ele fornece compartilhamento de arquivos baseado em

25
rede, permitindo que os usuários acessem e compartilhem arquivos centralmente,
como se fossem dispositivos de armazenamento locais.

O NAS é acessado por meio de protocolos de rede, como NFS (Network File System)
ou SMB (Server Message Block). É uma solução simples de implementar e gerenciar,
adequada para armazenamento de arquivos e compartilhamento de dados em
pequenas e médias empresas.

DAS (Direct-Attached Storage):

O DAS refere-se a dispositivos de armazenamento conectados diretamente a um


servidor ou computador, sem o uso de uma rede intermediária. Esses dispositivos
podem incluir discos rígidos internos, unidades externas conectadas por USB, SAS
(Serial Attached SCSI) ou outras interfaces. O DAS fornece armazenamento local
dedicado a um único servidor ou computador, oferecendo alto desempenho e baixa
latência. É uma solução simples e econômica, mas não permite compartilhamento de
armazenamento entre vários servidores.

JOBD (Just a Bunch of Disks):

O JOBD é uma configuração de armazenamento simples em que vários discos rígidos


são conectados diretamente a um servidor sem nenhuma camada intermediária,
como um controlador RAID. Cada disco é tratado como uma unidade separada e
independente. O JOBD é adequado para cenários em que a simplicidade é priorizada
sobre a redundância e a proteção dos dados. No entanto, ele não oferece os recursos
avançados de proteção e desempenho fornecidos por outras arquiteturas de
armazenamento.

ASM (Automatic Storage Management):

O ASM é uma solução de gerenciamento de armazenamento da Oracle, projetada


especificamente para bancos de dados Oracle. Ele fornece um ambiente integrado
para gerenciar e provisionar armazenamento para os bancos de dados Oracle,
combinando recursos de gerenciamento de armazenamento e sistemas de arquivos.
O ASM simplifica o gerenciamento do armazenamento em ambiente Oracle,
oferecendo alta escalabilidade, desempenho e confiabilidade.

Essas arquiteturas de armazenamento são utilizadas para atender às necessidades de


armazenamento de dados em diferentes cenários, seja em ambientes empresariais,
servidores de arquivos, bancos de dados ou sistemas individuais. Cada uma delas tem
características e benefícios específicos, e a escolha adequada depende dos requisitos
de cada aplicação e ambiente.

25
Arquitetura SQL Server

26
Conceitos Básicos Banco de
Dados – SQL Server - Instância

Em uma instância do SQL Server, existem vários componentes e conceitos


relacionados à execução de tarefas (tasks), como fila de tarefas (task queue),
execução de tarefas (parse, compilação e otimização), cache de plano (plan cache),
área de cache (buffer pool) e processos trabalhadores (worker processes) do
threadpool. Explicaremos cada um desses conceitos em detalhes:

Fila de Tarefas (Task Queue):

A fila de tarefas é uma estrutura interna do SQL Server que gerencia as tarefas a
serem executadas. Ela armazena as solicitações de tarefas recebidas pelo servidor,
como consultas, atualizações ou operações de gerenciamento. A fila de tarefas
garante que as tarefas sejam processadas de forma eficiente e equilibrada pelos
processos trabalhadores disponíveis.

Execução de Tarefas (Parse, Compilação e Otimização):

Quando uma tarefa é retirada da fila, ela passa por uma série de etapas de execução.
Primeiro, ocorre a análise (parse) da tarefa, que envolve a verificação da sintaxe e a
validação das instruções. Em seguida, a tarefa é compilada, onde o SQL Server cria

27
um plano de execução detalhado, que descreve como a tarefa será executada. Por
fim, ocorre a etapa de otimização, em que o SQL Server avalia diferentes estratégias
de execução e escolhe a mais eficiente com base em estatísticas e outras
informações disponíveis.

Cache de Plano (Plan Cache):

O cache de plano é uma área de memória no SQL Server onde os planos de execução
compilados são armazenados e reutilizados. Quando uma tarefa é compilada e
otimizada, o plano de execução resultante é armazenado no cache de plano. Isso
permite que consultas subsequentes com a mesma estrutura sejam executadas mais
rapidamente, evitando o processo de compilação e otimização novamente. O cache
de plano é atualizado e gerenciado automaticamente pelo SQL Server para otimizar o
desempenho das consultas.

Área de Cache (Buffer Pool):

A área de cache, conhecida como buffer pool, é uma parte da memória do SQL Server
que é reservada para armazenar páginas de dados frequentemente acessadas. Ela
age como uma camada intermediária entre o disco e as consultas, armazenando
dados em memória para acesso rápido. O buffer pool reduz a necessidade de acesso
ao disco, melhorando o desempenho das consultas e operações de leitura e escrita
de dados.

Processos Trabalhadores (Worker Processes) do Threadpool:

Os processos trabalhadores, também chamados de worker processes, são


responsáveis por executar as tarefas do SQL Server. Eles são componentes do
threadpool, que é uma coleção de threads que gerencia a execução simultânea de
várias tarefas. Cada processo trabalhador é atribuído a uma tarefa específica e
executa a tarefa até a conclusão. O threadpool garante a concorrência e a eficiência
na execução das tarefas, permitindo que várias tarefas sejam processadas ao mesmo
tempo.

Esses componentes e conceitos relacionados às tarefas e à execução de consultas são


fundamentais para o funcionamento eficiente do SQL Server. A fila de tarefas
gerencia a ordem e a distribuição das tarefas, a execução passa pelas etapas de
análise, compilação e otimização, o cache de plano e a área de cache melhoram o
desempenho das consultas armazenando dados em memória, e os processos
trabalhadores do threadpool garantem a execução simultânea das tarefas para um
melhor aproveitamento dos recursos do sistema.

27
Conceitos Básicos Banco de
Dados – SQL Server - Database

O Buffer Manager é um componente fundamental em uma instância do SQL Server


responsável pela gestão do cache de páginas de dados em memória, conhecido como
buffer pool. Ele tem como objetivo melhorar o desempenho do sistema reduzindo a
necessidade de acessos frequentes ao disco.

O Buffer Manager armazena no buffer pool as páginas de dados mais


frequentemente acessadas pelo SQL Server. Quando uma consulta ou operação
precisa ler ou modificar dados em uma página, o Buffer Manager verifica se a página
está presente no buffer pool. Se a página estiver lá, o acesso é realizado em memória,
evitando a necessidade de leitura ou gravação no disco, o que é muito mais lento.

O Buffer Manager utiliza uma política de substituição de páginas para gerenciar o


espaço disponível no buffer pool. Quando uma nova página de dados precisa ser
carregada no buffer pool, mas não há espaço suficiente, o Buffer Manager utiliza uma
política de substituição para selecionar uma página menos usada para liberar espaço
e dar lugar à nova página.

Além disso, o Buffer Manager também é responsável por sincronizar as alterações no


buffer pool com o disco rígido, garantindo que as modificações sejam gravadas de

28
volta de forma consistente e durável. Ele faz uso de técnicas como escrever as
alterações no disco em segundo plano, agrupando várias páginas de dados para
otimizar o desempenho e minimizar a sobrecarga de E/S.

O tamanho do buffer pool e a eficiência do Buffer Manager têm um impacto


significativo no desempenho do SQL Server. Um buffer pool maior permite armazenar
mais páginas de dados em memória, reduzindo a necessidade de acesso ao disco. No
entanto, é importante equilibrar o tamanho do buffer pool com a quantidade de
memória disponível no sistema e outras necessidades do servidor.

Em resumo, o Buffer Manager é responsável por gerenciar o cache de páginas de


dados em memória, otimizando o acesso aos dados e reduzindo a necessidade de
operações de E/S no disco, resultando em um desempenho melhorado do SQL Server.

O Buffer Manager tem uma relação essencial com os datafiles (arquivos de dados) e o
logfile (arquivo de log) em uma instância do SQL Server. Explicaremos essa relação de
forma detalhada:

1.Datafiles (Arquivos de Dados) e Buffer Manager: Os datafiles são os arquivos que


armazenam os dados das tabelas e índices de um banco de dados no SQL Server. O
Buffer Manager é responsável por gerenciar o cache de páginas de dados em
memória, conhecido como buffer pool. Quando uma página de dados precisa ser
acessada, o Buffer Manager verifica se ela está presente no buffer pool. Se estiver, o
acesso é realizado em memória, evitando a necessidade de leitura do datafile no
disco.

Quando uma página de dados é lida do disco, o Buffer Manager a armazena no buffer
pool para uso posterior. Se a página sofrer modificações, elas são feitas no buffer
pool e posteriormente gravadas de volta no datafile no disco. Dessa forma, o Buffer
Manager mantém uma cópia das páginas de dados mais frequentemente acessadas
em memória, reduzindo a necessidade de acesso ao disco rígido, o que é mais lento.

2.Logfile (Arquivo de Log) e Buffer Manager: O logfile é um arquivo que registra todas
as transações executadas em um banco de dados. Ele é usado para garantir a
integridade dos dados e permitir a recuperação do banco de dados em caso de falhas
ou transações desfeitas. O Buffer Manager também tem uma relação com o logfile.

Quando uma transação é executada, as alterações feitas nas páginas de dados são
registradas no logfile antes de serem efetivadas no datafile. Essas alterações são
gravadas no logfile de forma sequencial, permitindo que o Buffer Manager otimize a
gravação em disco. O Buffer Manager agrupa várias alterações em uma única

28
gravação sequencial no logfile, minimizando a sobrecarga de E/S e melhorando o
desempenho.

Além disso, durante a recuperação de um banco de dados após uma falha, o Buffer
Manager utiliza as informações registradas no logfile para garantir que as transações
sejam aplicadas corretamente e que o banco de dados retorne a um estado
consistente.

Em resumo, o Buffer Manager tem uma relação estreita com os datafiles e o logfile.
Ele gerencia o cache de páginas de dados em memória, evitando acessos frequentes
ao disco, melhorando o desempenho. O Buffer Manager também coordena a
gravação das alterações nos datafiles e a utilização das informações do logfile para
garantir a integridade e a recuperação adequada do banco de dados.

28
Conceitos Básicos Banco de Dados
Organização Dados – SQL Server
• Um banco de dados SQL Server possui um ou
mais Filegroups (gerenciam o agrupamento
Banco de Dados
(Database)
dos arquivos de dados). Cada objeto
(tabela,indice,etc..) é depositado em um
Filegroup. O FileGroup pode ocupar
FileGroups
fisicamente 1 ou mais arquivos de dados (Data
Files). Cada objeto armazenado se transforma
Arquivo de Dados
(Data Files)
inicialmente em pagina em uma extensão
Extensão
(Extent)
mista (que contem paginas de diferentes
tabelas) Tipicamente uma extensão ocupa
64Kb, considerando que o tamanho físico de
Paginas SQL Server cada página é de 8Kb, Logo cada extensão
(Data Pages)
contem 8 páginas. Quando uma tabela
Bloco S.O. ultrapassa 8 paginas em extensões mistas são
criadas extensões uniformes (com 8 paginas
Estruturas Lógicas Estruturas Físicas
também) para acomodar o crescimento da
tabela a partir dai e assim por diante.

No SQL Server, o armazenamento e organização de dados são gerenciados em várias


camadas hierárquicas, incluindo bancos de dados, filegroups, datafiles, extensões e
páginas.

Banco de Dados:

Um banco de dados no SQL Server é uma estrutura lógica que contém os dados e os
objetos relacionados, como tabelas, índices, procedimentos armazenados e visões.
Ele é a unidade fundamental de armazenamento e gerenciamento dos dados. Cada
banco de dados é isolado e pode ser acessado e gerenciado separadamente.

Filegroups (Grupos de Arquivos):

Os filegroups são contêineres lógicos dentro de um banco de dados, usados para


organizar os datafiles que armazenam os dados. Um banco de dados pode ter um ou
mais filegroups. Os filegroups permitem uma organização lógica dos dados, por
exemplo, agrupando tabelas relacionadas em filegroups separados. Essa estrutura
auxilia na administração do armazenamento e na implementação de políticas de
backup e recuperação diferenciadas.

29
Datafiles (Arquivos de Dados):

Os datafiles são arquivos físicos que armazenam os dados de um banco de dados.


Cada filegroup pode ter um ou mais datafiles associados a ele. Os datafiles são
distribuídos nos dispositivos de armazenamento, como discos rígidos ou matrizes de
discos (RAID). Eles são responsáveis por armazenar as páginas de dados, que são as
unidades básicas de armazenamento no SQL Server.

Extensões:

As extensões são blocos contíguos de espaço alocados dentro dos datafiles. Elas têm
um tamanho fixo e são usadas para armazenar as páginas de dados. Uma extensão
pode conter várias páginas de dados, dependendo do tamanho de cada página.

Páginas:

As páginas são as unidades básicas de armazenamento no SQL Server. Elas têm um


tamanho fixo de 8 KB e armazenam os dados reais, como as linhas de uma tabela.
Cada página contém uma estrutura de cabeçalho e o espaço para armazenamento
dos dados. As páginas são lidas e gravadas em disco pelo SQL Server, e são carregadas
no buffer pool (cache de páginas em memória) pelo Buffer Manager para melhorar o
desempenho das operações de leitura e gravação.

A organização dos dados em páginas permite um acesso eficiente aos dados no SQL
Server. As páginas são agrupadas em extents, que por sua vez são organizados em
datafiles. Os datafiles são gerenciados pelo sistema de arquivos do sistema
operacional. Os filegroups fornecem uma camada adicional de organização e
flexibilidade para o armazenamento dos dados dentro de um banco de dados.

É importante ressaltar que a organização física dos dados no SQL Server pode variar
de acordo com o tipo de tabela, índices e configurações específicas. O SQL Server
possui mecanismos de otimização e alocação de espaço que trabalham em conjunto
com esses componentes para garantir um desempenho eficiente e uma boa utilização
do armazenamento disponível.

29
Conceitos Básicos Banco de
Dados – SQL Server - Data Files
Data Files e Temp Files

Os arquivos de dados (datafiles) são as estruturas utilizadas para dar suporte ao


armazenamento das Extensões representadas pelas páginas visando o armazenamento dos
dados seja no sistema operacional. A menor unidade de armazenamento é chamada de
Pagina (SQL Server), ou em alguns SGBDS chamam de bloco (Oracle). O controle de
crescimento das páginas se dá através de extensões, com isso um objeto pode crescer
adicionando-se novas extensões e consequentemente um conjunto de páginas para cada uma
delas.

Dentro de um datafile do SQL Server, existem várias estruturas internas que


compõem a organização e alocação dos dados.

Extensões Mistas e Extensões Uniformes:

Uma extensão é um bloco contíguo de espaço alocado dentro de um datafile. No SQL


Server, existem dois tipos de extensões: extensões mistas (mixed extents) e
extensões uniformes (uniform extents).

Extensões Mistas: Uma extensão mista é uma extensão que pode conter páginas de
diferentes objetos, ou seja, de tabelas diferentes. Ela é usada quando um objeto é
criado ou quando há uma alocação pequena de espaço.

Uma extensão mista pode conter até oito páginas e é compartilhada por vários
objetos.

Extensões Uniformes: Uma extensão uniforme é uma extensão que contém apenas
páginas de um único objeto. Ela é usada quando um objeto já possui uma extensão

30
mista e requer mais espaço. Uma extensão uniforme também pode conter até oito
páginas, mas todas são alocadas para o mesmo objeto.

Gerenciamento de Espaço Livre:

O SQL Server utiliza um sistema de gerenciamento de espaço livre para alocar e


liberar espaço dentro dos datafiles. Esse sistema é responsável por manter o controle
dos espaços disponíveis e decidir onde alocar novas extensões quando necessário.
Existem três componentes principais envolvidos:

Páginas de Alocação: O SQL Server mantém um conjunto de páginas chamadas


páginas de alocação (allocation pages). Cada página de alocação rastreia as
informações sobre o espaço livre disponível em um determinado intervalo de
extensões em um filegroup. Essas páginas contêm estruturas de metadados que
indicam quais extensões estão disponíveis para alocar novos dados.

IAM (Index Allocation Map): O IAM é uma estrutura que rastreia a alocação de
extensões em um objeto, como uma tabela ou um índice. Ele registra quais extensões
são usadas e quais estão livres. O IAM é armazenado em uma página de alocação e é
consultado pelo mecanismo do SQL Server para encontrar extensões livres para
alocar novos dados.

GAM (Global Allocation Map) e SGAM (Shared Global Allocation Map): O GAM e o
SGAM são estruturas de metadados que mapeiam as extensões livres e usadas em
todo o filegroup. O GAM rastreia as extensões livres a nível de filegroup, enquanto o
SGAM rastreia as extensões mistas livres. Essas estruturas são consultadas pelo
mecanismo do SQL Server para identificar quais extensões estão disponíveis para
alocação.

Quando uma extensão é alocada para um objeto, o espaço livre é atualizado nas
estruturas de metadados correspondentes. Quando uma extensão é liberada, o
espaço é marcado como livre e fica disponível para ser reutilizado por outros objetos.

O gerenciamento de espaço livre é um processo dinâmico e contínuo no SQL Server.


O mecanismo monitora constantemente o uso e a disponibilidade de espaço livre
para otimizar a alocação e evitar a fragmentação excessiva. Isso ajuda a manter um
bom desempenho e uma utilização eficiente do armazenamento nos datafiles.

30
Conceitos Básicos Banco de
Dados – SQL Server - Data Pages
PAGE HEADER
• Páginas são estruturas de armazenamento utilizadas pelos SGBDs para
ROW 1 garantirem a persistência dos dados . Alguns bancos de dados tambem
ROW 2 chamam este componente de Bloco. O SGBD SQL Server chama este
ROW 3 componente como página. Os dados são armazenados no formato de
.... registros ou linhas (rows), ocupando a área de dados até o limite desta
... que é chamado de FREE SPACE ou área livre, usada exclusivamente para
.... operações de Atualização de dados (UPDATE). O tamanho padrão para
.... uma pagina é de 8Kb.
...
ROW n
• É A UNIDADE DE MEDIDA PARA LEITURA E GRAVAÇÃO.

3 2 1

ROW OFFSET

Uma página SQL Server possui como padrão 8192 bytes, sendo que o page header
ocupa 96 bytes e 36 bytes são reservados para o Row Offset (que controla a alocação
na página), restando 8060 bytes livres para armazenamento de dados.

Uma página no SQL Server é a unidade básica de armazenamento de dados, tendo


um tamanho fixo de 8 KB. Ela é utilizada para armazenar as linhas de uma tabela,
índice ou outros objetos de banco de dados. Cada página contém uma estrutura de
cabeçalho e o espaço de armazenamento para os dados.

A estrutura de uma página no SQL Server é composta por:

Cabeçalho da Página: O cabeçalho da página armazena informações sobre a própria


página, como o tipo da página, o número de série, o número da página, entre outros
dados de controle.

Slot Array(Row Offset): O slot array é uma tabela interna que armazena informações
sobre as linhas presentes na página. Cada linha na página tem uma entrada
correspondente no slot array, que contém o offset (deslocamento) onde a linha
começa na página.

31
Linhas de Dados: O espaço restante na página é utilizado para armazenar as linhas de
dados. Cada linha contém as informações dos campos correspondentes, como
valores de colunas. O formato e o tamanho das linhas variam dependendo da
estrutura da tabela ou índice.

Agora, vamos entender como funciona o processo de inserção de dados e atualização


de dados em uma página no SQL Server:

Inserção de Dados:

Quando ocorre uma inserção de dados em uma tabela, o SQL Server busca pela
página adequada para armazenar a nova linha. Se houver espaço livre na página, a
nova linha é inserida nesse espaço. Caso contrário, uma nova página é alocada para a
tabela, e a nova linha é adicionada a essa página.

Durante a inserção, o SQL Server atualiza o slot array da página para incluir a nova
entrada correspondente à linha inserida. O cabeçalho da página também é atualizado
para refletir as alterações.

Atualização de Dados:

Quando ocorre uma atualização de dados em uma tabela, o SQL Server localiza a
página que contém a linha a ser atualizada. A linha é então modificada no espaço de
armazenamento correspondente dentro da página.

Ao atualizar uma linha, o SQL Server pode optar por atualizar a linha diretamente na
mesma página ou, se necessário, mover a linha para outra página (operação
conhecida como page split). Essa movimentação ocorre quando a atualização excede
o espaço disponível na página atual. Nesse caso, uma nova página é alocada e parte
da linha é movida para essa nova página, deixando um espaço livre para a atualização
na página original.

Após a atualização, o cabeçalho da página e o slot array podem ser atualizados para
refletir as mudanças na página.

É importante ressaltar que, durante o processo de inserção ou atualização de dados,


o SQL Server realiza operações de travamento (lock) para garantir a consistência e a
integridade dos dados, evitando conflitos de acesso simultâneo.

Em resumo, as páginas no SQL Server são unidades de armazenamento de dados, e o


processo de inserção e atualização envolve a localização e a modificação das linhas

31
na página correspondente, atualizando o slot array e o cabeçalho da página conforme
necessário. O SQL Server utiliza estratégias como alocação de novas páginas e page
split para gerenciar o espaço disponível e acomodar as alterações nos dados.

31
Conceitos Básicos Banco de
Dados – Extensões

• Extensões são a estrutura através do qual é controlado o crescimento de uma tabela. As tabelas são criadas
inicialmente em uma pagina dentro de uma extensão mista (mixed extent), ao preencher 8 páginas , na 9ª.
Será alocada uma extensão uniforme para cada nova extensão da tabela. Isso inclui tabelas e índices.

No SQL Server, as extensões mistas (mixed extents) e extensões uniformes (uniform


extents) são utilizadas para alocar espaço para objetos dentro de um banco de dados.

Extensões Mistas (Mixed Extents):

Uma extensão mista é um bloco contíguo de oito páginas (64 KB) que pode ser
compartilhado por múltiplos objetos. Essa extensão é usada quando um objeto é
criado ou quando há uma alocação pequena de espaço.
Quando um objeto é criado no SQL Server, a primeira alocação de espaço para esse
objeto é feita em uma extensão mista. Uma extensão mista pode conter páginas de
diferentes objetos, permitindo o compartilhamento de espaço entre eles.

Cada extensão mista possui um IAM (Index Allocation Map) que rastreia as páginas
dentro dessa extensão. O IAM informa quais páginas estão sendo usadas e quais
estão livres. À medida que o espaço dentro de uma extensão mista é alocado para
objetos específicos, ele deixa de ser compartilhado e se torna uma extensão
uniforme.

Extensões Uniformes (Uniform Extents):

32
Uma extensão uniforme é um bloco contíguo de oito páginas (64 KB) que é alocado
para um único objeto. Essa extensão é usada quando um objeto já possui uma
extensão mista e requer mais espaço.
Quando um objeto precisa de mais espaço além da extensão mista inicial, o SQL
Server aloca uma nova extensão uniforme exclusivamente para esse objeto. A
extensão uniforme alocada para um objeto só será usada por esse objeto e não será
compartilhada com outros.

As extensões uniformes são gerenciadas por meio do IAM, assim como as extensões
mistas. O IAM rastreia quais páginas pertencem a uma extensão uniforme e quais
estão livres dentro dessa extensão.

O SQL Server utiliza uma combinação de extensões mistas e uniformes para alocar
espaço para objetos dentro de um banco de dados, permitindo um uso eficiente do
espaço em disco. As extensões mistas são usadas inicialmente para alocar espaço
compartilhado entre objetos, enquanto as extensões uniformes são usadas para
alocar espaço exclusivo para objetos específicos.

32
SNI (SQL Server Server Network Conceitos Básicos
Interface)
 Protocols
Banco de Dados –


TCP/IP
Shared Memory
PARSE
SQL Server Interface  Named Pipes
(API)  Virtual Interface Adapter (VIA) SQLOS
TDS packets

✓ Language Buffer Pool


Eventos da ✓ Hash of execution plan Data Cache
Linguagem

SNI (SQL Server Client Database Engine


Network Interface)
Cmd Parser Optimizer
Plan Cache
Se o hash do Query Tree Query Plan
comando não existe O hash do comando
no Plan Cache Query Executor existe no Plan Cache?

SELECT Sim ! O Hash do comando está no Plan Cache

Parse é o processo de análise de comandos SQL , especialmente os comandos DML


para execução no banco de dados. O processo de parse conta com 3 etapas distintas
(apenas consultas realizam a 3ª etapa).

Na etapa 1 de análise são feitas 2 análises distintas, primeiro a análise sintática onde
serão avaliados os comandos sob o ponto de vista unicamente da sua sintaxe. Uma
vez que o comando esteja sintaticamente correto será feita a 2ª análise que é a
semântica, onde serão avaliadas as tabelas, colunas e as permissões de acesso. Uma
vez validada contra o dicionário de dados em memória (ou disco) o comando passa
para a 2ª. Etapa onde é agregado o plano de acesso, que consiste em determinar
como os dados serão acessados (por exemplo utilizando índices). Após esta ação o
comando será efetivamente executado.
Especificamente no caso do comando SELECT (Consulta) é realizada a 3ª etapa que
consiste em retornar as linhas consultadas para a memória e depois para o processo
que a solicitou (Cliente).

Antes de analisar um comando o SGBD irá verificar se este comando já não foi
analisado (tenha sofrido parse anteriormente), caso não tenha será feito todo o
processo listado anteriormente e isso chamamos de HARD PARSE. Caso o comando

33
seja encontrado em memória (tenha sofrido parse anterior) será feito um SOFT PARSE
que consiste em evitar a re-execução da 1ª. Etapa e partir diretamente para a etapa
de execução.

Quanto mais houver padronização na escrita dos comandos SQL e quanto mais
forem utilizadas variáveis para tratamento de valores utilizados nos comandos como
critérios de pesquisa, por exemplo, mais possibilidades de SOFT PARSE teremos para
comandos semelhantes.

Um bom critério de performance métrico de um SGBD é a taxa de SOFT PARSES /


HARD PARSES. Quanto maior a taxa , ou seja, mais próxima de 100% , melhor.

33
SQL Server Interface(API)

SNI (SQL Server Server


Conceitos Básicos Banco
Network Interface) de Dados – PARSE
 Protocols
SQLOS
 TCP/IP Database Engine
 Shared Memory Cmd Parser Optimizer
 Named Pipes
TDS pacotes Query Plan
 Virtual Interface Adapter Query Tree
(VIA)
SNI (SQL Server Client Query Executor
Network Interface)
Eventos da Linguagem
CheckPoint
Transaction
Log File Storage Engine OLE DB Buffer Pool
Transaction Manager Access Methods Data Cache

Lock and Log


manager
Data File Buffer Manager
Plan Cache

Insert, Update, Delete

O processo de parse em um banco de dados SQL Server envolve várias etapas, desde
o envio do comando usando a SNI (SQL Network Interface) até o armazenamento na
buffer pool. Vou detalhar cada etapa, incluindo o data cache e plan cache, além de
abordar o envio do comando para o database engine, os mecanismos de
gerenciamento de lock e log manager, o processo de checkpoint e a atualização do
transaction log e datafiles.

Envio do Comando usando SNI:

O processo se inicia quando o cliente envia um comando SQL para o SQL Server por
meio da SNI. A SNI é responsável por estabelecer a conexão com o servidor e
transmitir o comando SQL.

Data Cache e Plan Cache:

Antes de iniciar o parse, o SQL Server verifica se as páginas de dados necessárias para
executar o comando estão presentes no data cache. O data cache é uma parte da
memória utilizada para armazenar páginas de dados frequentemente acessadas,
melhorando o desempenho das operações de leitura.

34
Além disso, o SQL Server também verifica se o plano de execução para o comando
em questão está presente no plan cache. O plan cache armazena os planos de
execução compilados e otimizados para consultas anteriores, permitindo a
reutilização desses planos e evitando a necessidade de compilação repetida.

PASSO A PASSO:

1.O cliente envia um comando SQL para o SQL Server por meio da SNI (SQL Network
Interface).

2.O SQL Server verifica se as páginas de dados necessárias para executar o comando
estão presentes no data cache.

3.O SQL Server verifica se o plano de execução para o comando está presente no plan
cache.

4.Se o plano de execução não estiver no plan cache, o comando é enviado para o
database engine do SQL Server.

5.O command parser analisa o comando SQL, verifica a sintaxe e a estrutura corretas
e gera uma árvore de análise (parse tree) para representar o comando.

6.O query optimizer analisa a árvore de análise gerada pelo command parser e
determina a melhor estratégia de execução para o comando. Ele avalia diferentes
planos de execução considerando estatísticas, índices e outras informações
relevantes.

7.O query executor executa o plano de execução selecionado pelo query optimizer.
Ele busca os dados necessários nos datafiles, realiza operações de junção, filtro e
ordenação conforme necessário e retorna o resultado para o cliente.

8.Durante o processo de parse e execução do comando, o SQL Server utiliza


mecanismos de gerenciamento de lock (travamento) para garantir a consistência dos
dados e evitar conflitos de acesso simultâneo.

9.O Log Manager gerencia o transaction log, que registra todas as alterações feitas no
banco de dados. As alterações são registradas no log antes de serem aplicadas nos
datafiles, garantindo a durabilidade das transações e permitindo a recuperação de
dados em caso de falhas.

34
10. Periodicamente, o SQL Server realiza um processo de checkpoint para garantir
que todas as alterações registradas no transaction log sejam aplicadas nos datafiles
permanentes, atualizando-os de forma consistente.

Envio do Comando para o Database Engine:

Caso o comando não esteja presente no plan cache, ele é enviado para o database
engine do SQL Server. Nessa etapa, o comando passa por três componentes
principais: command parser, query optimizer e query executor.
Command Parser: O command parser analisa o comando SQL, verifica a sintaxe e a
estrutura corretas, e gera uma árvore de análise (parse tree) para representar o
comando.

Query Optimizer: O query optimizer analisa a árvore de análise gerada pelo command
parser e determina a melhor estratégia de execução para o comando. Ele avalia
diferentes planos de execução, considerando estatísticas, índices e outras
informações relevantes, com o objetivo de encontrar o plano mais eficiente.

Query Executor: Após a otimização, o query executor executa o plano de execução


selecionado pelo query optimizer. Ele busca os dados necessários nos datafiles,
realiza operações de junção, filtro e ordenação conforme necessário, e retorna o
resultado para o cliente.

Gerenciamento de Lock e Log Manager:

Durante o processo de parse e execução do comando, o SQL Server utiliza


mecanismos de gerenciamento de lock (travamento) para garantir a consistência dos
dados. Os locks são adquiridos e liberados conforme necessário para evitar conflitos
de acesso simultâneo e garantir a integridade das transações.

Além disso, o Log Manager é responsável por gerenciar o transaction log, que registra
todas as alterações feitas no banco de dados. O Log Manager garante a durabilidade
das transações, registrando as alterações no log antes de aplicá-las nos datafiles. Isso
permite a recuperação de dados em caso de falhas.

Checkpoint e Atualização do Transaction Log e Datafiles:

Periodicamente, o SQL Server realiza um processo de checkpoint para garantir que


todas as alterações registradas no transaction log sejam aplicadas nos datafiles
permanentes. O checkpoint grava as páginas modificadas no transaction log de volta
nos datafiles, atualizando-os de forma consistente.

34
O processo de parse em um banco de dados SQL Server é complexo e envolve várias
etapas para analisar, otimizar e executar os comandos SQL. Os mecanismos de
gerenciamento de lock, log manager e checkpoint garantem a consistência dos dados
e a durabilidade das transações.

34
Arquitetura Oracle

35
Conceitos Básicos Banco de
Dados – Oracle - Instância
INSTANCIA ORACLE

SHARED GLOBAL AREA – SGA

NK
LARGE POOL JAVA POOL BUFFER
CACHE
SERVER DATABASE BUFFER
SHARED POOL LOG BUFFER
CACHE
RECYCLE
DATA DICTIONARY POOL
CACHE

USER
LIBRARY CACHE KEEP
POOL

PROCESSOS BACKGROUND

SMON PMON DBWn CKPT LGWR ARCHn

Instância é uma das principais estruturas em um SGBD Oracle. Consiste em um


conjunto de processos e de buffers de memória (armazenadores de dados e
comandos), que visam garantir a melhor performance na recuperação de dados
(database buffer cache) e recuperação de informações (data dictionary cache) e de
comandos (library cache). Visando garantir os dados contra perdas (log buffer cache).
Os processos de segundo plano (background processes) tem por finalidade realizar
operações utilizando o armazenamento físico dos dados (database)

SMON – SYSTEM MONITOR: Responsável pelo processo de startup (carregamento da


instância em memória) ,pelo processo conhecido por recuperação de instância
(Instance Recovery), que ocorre sempre que uma instância for interrompida de forma
anormal ou por um comando chamado shutdown abort. Alem disso este processo
limpa as tablespaces temporárias e caso não encontre os arquivos ligados as
tablespaces temporárias, recria os mesmos. Processo OBRIGATÓRIO.

PMON – PROCESS MONITOR: Responsável pela monitoração das sessões e processos


em uma instância. Ao encerrar uma sessão o PMON após um tempo realiza a
liberação de todos os recursos utilizados pela mesma na instância, principalmente
liberando o processo servidor que estava associado a sessão.Processo OBRIGATÓRIO.

36
DBWR – DATABASE WRITER: Processo que escreve os dados que estão em memória
para o armazenamento físico em disco dos mesmos, este processo lê os chamados
buffers sujos (dirty buffers) que estão no database buffer cache (resultantes de
comandos (INSERT,UPDATE,DELETE e MERGE)) para os arquivos de dados (data files).
Este processo pode ser multiplexado, ou seja , pode ter mais de um processo para
melhorar a performance da escrita dos dados em disco. Processo OBRIGATÓRIO.

LGWR – LOG WRITER: Processo que escreve as transações (comandos sql) escritos no
redo log buffer nos arquivos de redo log (redo log files). Este mecanismo oferece uma
segurança contra perda de dados, já que os comandos são escritos em disco mais
rapidamente que os dados. Em caso de encerramento anormal da instância os dados
contidos nos arquivos de redo log (redo log files) serão lidos pelo processo SMON na
ação de recuperação de instância (Instance Recovery) garantindo assim que os dados
que estavam em memória e que não foram gravados sejam eferivamente
armazenados . Processo OBRIGATÓRIO.

ARCH – ARCHIVER: Processo que grava cópias dos arquivos de redo log (redo log files)
para que possam sofrer backup e possam ser usados para recuperar uma instância
caso haja perda física ou lógica do respectivo database. Processo OPCIONAL.

36
Conceitos Básicos Banco de
Dados – Database - Oracle
CONTROL FILES DATAFILES REDO LOGS

SYSTEM UNDO TEMP


GRUPO 1 GRUPO 2

control01.CT control02.CT
L L SYSTEM1.DBF UNDO01.DBF TEMP01.DBF REDOa.LOG REDOb.LOG

DATAFILES

DADO DADO INDICE

DADO01.DBF DADO02.DBF INDICE01.DBF

No Oracle Database, existem três componentes essenciais que desempenham papéis


cruciais no funcionamento e na recuperação do banco de dados: Control Files
(arquivos de controle), Data Files (arquivos de dados) e Redo Logs (registros de redo).

1.Control Files (Arquivos de Controle): Os arquivos de controle são uma parte


fundamental do Oracle Database. Eles contêm informações críticas sobre a estrutura
e o status do banco de dados. Os arquivos de controle são usados para controlar a
abertura e o fechamento do banco de dados, registrar informações sobre as
alterações no banco de dados e rastrear outros arquivos importantes, como os
arquivos de dados e os registros de redo. Geralmente, existem vários arquivos de
controle no Oracle Database, permitindo a redundância e a recuperação em caso de
falhas.

2.Data Files (Arquivos de Dados): Os arquivos de dados contêm os dados reais do


banco de dados, como tabelas, índices, visualizações e outros objetos. Esses arquivos
armazenam os registros de dados que são manipulados por operações de leitura e
gravação. Cada tabela ou índice em um banco de dados Oracle é armazenado em um
ou mais arquivos de dados. Os arquivos de dados são organizados em tablespaces,
que são unidades lógicas de armazenamento no Oracle Database. Eles são

37
responsáveis por armazenar permanentemente os dados e garantir a integridade e a
consistência dos mesmos.

3.Redo Logs (Registros de Redo): Os registros de redo são uma parte essencial do
mecanismo de recuperação do Oracle Database. Eles registram todas as alterações
feitas nos dados do banco de dados, permitindo a recuperação em caso de falhas ou
problemas de consistência. Os registros de redo são escritos em um conjunto de
arquivos de redo, que são responsáveis por armazenar esses registros
sequencialmente. Os registros de redo podem ser usados para recuperar os dados
em caso de falha, aplicando as alterações registradas nos registros de redo aos
arquivos de dados.

Os Control Files, Data Files e Redo Logs trabalham em conjunto para garantir a
integridade, a consistência e a recuperação adequada do banco de dados Oracle. Os
arquivos de controle mantêm informações sobre a estrutura e o estado do banco de
dados, enquanto os arquivos de dados armazenam os dados reais e os registros de
redo registram as alterações feitas nos dados. Esses componentes são essenciais para
garantir a confiabilidade e a disponibilidade dos dados em um ambiente Oracle.

37
Conceitos Básicos Banco de Dados
Organização Dados - Oracle
• Um banco de dados Oracle possui um ou mais
Banco de Dados
(Database) tablespaces (gerenciam o agrupamento dos
arquivos de dados). Cada objeto
(tabela,indice,etc..) é depositado em uma
Tablespace tablespace. A tablespace pode ocupar
fisicamente 1 ou mais arquivos de dados (Data
Files). Cada objeto armazenado se transforma
Segmento
(Segment)
Arquivo de Dados
(Data Files)
em um segmento. Inicialmemte um segmento
ocupa uma extensão e esta condensa um
numero especifico de blocos que irão
Extensão
(Extent)
armazenar logicamente os dados. Tipicamente
uma extensão ocupa 64Kb, considerando um
bloco típico de 8Kb, logo uma extensão padrão
Bloco Oracle
Bloco S.O. possui 8 blocos Oracle
(Data Blocks)

Estruturas Lógicas Estruturas Físicas

A estrutura de armazenamento do Oracle Database é composta por vários


componentes que trabalham juntos para armazenar e gerenciar os dados de forma
eficiente.

Oracle Database:

O Oracle Database é o sistema de gerenciamento de banco de dados relacional


desenvolvido pela Oracle Corporation. Ele é composto por vários componentes,
incluindo o mecanismo de armazenamento, o otimizador de consultas, o processador
SQL e outros, que trabalham em conjunto para fornecer um ambiente seguro,
escalável e confiável para o armazenamento e recuperação de dados.

Tablespace:

Um tablespace é uma unidade lógica de armazenamento no Oracle Database. É uma


coleção de um ou mais arquivos de dados que armazenam as tabelas, índices,
visualizações e outros objetos de um banco de dados. Cada tablespace é composto
por segmentos.

38
Segmento:

Um segmento é uma unidade lógica de armazenamento dentro de um tablespace. Ele


representa uma coleção de objetos relacionados, como uma tabela, um índice ou um
cluster. Cada objeto em um banco de dados Oracle tem um segmento
correspondente que contém os dados físicos do objeto.

Extensão:

Uma extensão é uma unidade física de armazenamento que compõe um segmento.


Ela consiste em um ou mais blocos Oracle contíguos. Quando um segmento precisa
crescer, o Oracle Database aloca uma nova extensão para armazenar os dados
adicionais.

Blocos Oracle:

Um bloco Oracle é a menor unidade de armazenamento no Oracle Database. Cada


bloco tem um tamanho fixo (geralmente 8 KB) e contém um conjunto de registros de
dados. Os blocos Oracle são usados para armazenar os dados das tabelas, índices,
registros de redo e outras estruturas do banco de dados.

Arquivos de Dados:

Os arquivos de dados são os arquivos físicos que armazenam os blocos Oracle. Eles
são associados aos tablespaces e contêm os dados reais das tabelas e índices do
banco de dados. Os arquivos de dados são gerenciados pelo sistema operacional,
mas são acessados e manipulados pelo Oracle Database.

Blocos do Sistema Operacional:

Os blocos do sistema operacional são a menor unidade de armazenamento no


sistema operacional em que o Oracle Database está sendo executado. Eles têm um
tamanho fixo determinado pelo sistema operacional. O Oracle Database lê e grava
dados nos blocos Oracle, que são mapeados para os blocos do sistema operacional
pelo sistema de arquivos.

Essa é a estrutura básica de armazenamento do Oracle Database, onde os dados são


organizados em tablespaces, segmentos e blocos Oracle. Os arquivos de dados
contêm os blocos Oracle, que, por sua vez, são mapeados para os blocos do sistema
operacional pelo sistema de arquivos. Essa estrutura permite o gerenciamento
eficiente dos dados, proporcionando desempenho, segurança e confiabilidade ao
Oracle Database.

38
Conceitos Básicos Banco de
Dados – Oracle - Data Files
Data DATAFILE
Files e Temp Files

Os arquivos de dados (datafiles) são as estruturas utilizadas para dar suporte aos blocos
DATAFILE HEADER
visando o armazenamento dos dados seja no sistema operacional, ou no ASM. A menor
SEGMENTO E 1A. unidade de armazenamento em um data file é chamada de Bloco (Oracle), ou em alguns
EXTENSAO
SGBDS chamam de página (SQL Server , DB2). O controle de crescimento dos blocos se dá
2A.EXTENSAO
através de extensões, com isso um objeto pode crescer adicionando-se novas extensões e
ESPAÇO LIVRE consequentemente um conjunto de blocos para cada uma delas.

A estrutura de um datafile no Oracle é fundamental para armazenar os dados de um


banco de dados.

Header do Datafile:

O header do datafile é uma estrutura que armazena informações sobre o próprio


datafile, como nome, tamanho, número de blocos, versão, entre outros metadados.

Extents:

Um datafile é composto por um ou mais extents. Um extent é uma sequência de


blocos contíguos que é alocada para armazenar dados de tabelas, índices ou outros
objetos do banco de dados.

Blocks:

Cada extent é composto por um conjunto de blocos. Um bloco é a unidade básica de


armazenamento de dados no Oracle e possui um tamanho fixo de 8 KB (ou 16 KB em
alguns cenários específicos). Os blocos são numerados sequencialmente dentro do

39
datafile.

Segmentos:

Os segmentos são as estruturas que armazenam os dados de tabelas, índices,


tablespaces temporários e outros objetos no Oracle. Cada segmento é associado a
um ou mais extents em um ou mais datafiles.

Extent Map:

O extent map é uma estrutura que rastreia quais extents pertencem a cada segmento
dentro do datafile. Ele contém informações sobre os extents alocados e livres para
cada segmento.

Data Blocks:

Os data blocks são os blocos que armazenam efetivamente os dados das tabelas,
índices e outros objetos. Cada bloco pode conter várias linhas de dados, dependendo
do tamanho das linhas e do espaço disponível no bloco.

Segment Header:

O segment header é uma estrutura localizada no início do segmento e contém


informações sobre o segmento, como tipo de segmento, tamanho total, número de
blocos alocados, entre outros metadados.

Freelist:

O freelist é uma lista de extents livres dentro do datafile que podem ser alocados
para novos dados ou extensões. Ele é utilizado para gerenciar o espaço livre
disponível no datafile.

Bitmaps:

Os bitmaps são estruturas utilizadas para controlar o espaço livre e ocupado dentro
do datafile. Existem dois tipos de bitmaps: bitmap de alocação de extent (extent
allocation bitmap) e bitmap de alocação de bloco (block allocation bitmap). Esses
bitmaps indicam quais extents e blocos estão alocados ou livres.

File Control Blocks (FCBs):

Os File Control Blocks são estruturas de controle que mantêm informações sobre o

39
datafile, como o estado de leitura/escrita, status de backup, número de blocos
alocados, entre outros detalhes.

Essa é uma visão geral da estrutura de um datafile no Oracle. É importante


mencionar que os datafiles são organizados em tablespaces, que são unidades lógicas
de armazenamento no Oracle. Cada tablespace pode conter um ou mais datafiles,
permitindo a expansão do armazenamento conforme necessário.

O gerenciamento dos datafiles, extents e espaço livre é realizado automaticamente


pelo Oracle, que trata da alocação, liberação e gerenciamento de espaço para
garantir um armazenamento eficiente e seguro dos dados.

39
Conceitos Básicos Banco de
Dados – Oracle - Data Blocks
BLOCK HEADER
BLOCK DIRECTORY
• Blocos são estruturas de armazenamento utilizadas pelos SGBDs para
FREE SPACE garantirem a persistência dos dados . Alguns bancos de dados tambem
chamam este componente de Página. O SGBD Oracle chama este
ROW n
componente como bloco. Os dados são armazenados no formato de registros
....
ou linhas (rows), ocupando a área de dados até o limite desta que é chamado
...
de FREE SPACE ou área livre, usada exclusivamente para operações de
....
Atualização de dados (UPDATE). O tamanho padrão para um bloco é de 8Kb
....
mas pode variar de 2 a 32Kb.
...
ROW 3ROW 1
3
ROW 3ROW 2
• É A UNIDADE DE MEDIDA PARA LEITURA E GRAVAÇÃO.
ROW 3ROW 1

ROWID TAMANHO
ROW OVERHEAD NUM COLUNAS VALOR COLUNA
(CHAINED) COLUNA

Estrutura de um Data Block Oracle:


Um data block no Oracle é a unidade básica de armazenamento de dados. Cada data
block possui um tamanho fixo de 8 KB (ou 16 KB em alguns cenários específicos) e é
composto por várias estruturas. As principais estruturas em um data block são:

Cabeçalho de Bloco (Block Header): O cabeçalho de bloco contém informações sobre


o próprio bloco, como o número de sequência, o tipo de bloco, o número de espaço
livre, entre outros metadados.

Diretório de Transações (Transaction Directory): O diretório de transações rastreia as


alterações feitas no bloco por transações concorrentes. Ele registra informações
como o ID da transação, o tipo de alteração (inserção, atualização ou exclusão) e os
pontos de salvamento (SCNs - System Change Numbers) para fins de recuperação.

Vetor de Bits de Espaço Livre (Free Space Bitmap): O vetor de bits de espaço livre
registra quais áreas do bloco estão disponíveis para a inserção de novos dados. Cada
bit no vetor representa um espaço de tamanho fixo dentro do bloco, indicando se
está ocupado (0) ou livre (1).

40
Slots de Linhas (Row Slots): Os slots de linhas são espaços dentro do bloco que
armazenam as linhas de dados. Cada slot contém um cabeçalho de slot, que mantém
informações sobre o comprimento da linha e a posição da linha dentro do bloco.

Processo de Inserção em um Bloco Oracle:


Quando ocorre uma inserção de dados em um bloco Oracle, o processo segue os
seguintes passos:

Verificação de Espaço Livre: O Oracle verifica o vetor de bits de espaço livre para
encontrar um espaço livre suficiente no bloco.

Alocar Espaço para a Nova Linha: O Oracle encontra um slot de linha livre no bloco e
aloca espaço suficiente para armazenar a nova linha de dados.

Atualizar o Vetor de Bits de Espaço Livre: O Oracle atualiza o vetor de bits de espaço
livre para refletir a alocação do novo espaço.

Inserir a Nova Linha: A nova linha de dados é inserida no espaço alocado dentro do
bloco. O cabeçalho do slot de linha é atualizado com as informações relevantes sobre
a nova linha.

Processo de Atualização em um Bloco Oracle:


Quando ocorre uma atualização de dados em um bloco Oracle, o processo segue os
seguintes passos:

Localizar a Linha para Atualização: O Oracle busca o slot de linha que contém a linha a
ser atualizada dentro do bloco.

Verificar Espaço Disponível: O Oracle verifica se há espaço suficiente dentro do bloco


para a atualização. Se o espaço atual não for suficiente, a atualização pode resultar
em um "Chained Row" (linha encadeada), onde parte da linha é movida para outro
bloco.

Atualizar a Linha: O Oracle modifica os dados da linha dentro do bloco, mantendo o


cabeçalho do slot de linha atualizado com as informações alteradas.

Atualizar os Pontos de Salvamento: O Oracle atualiza o diretório de transações com o


ponto de salvamento (SCN) da transação de atualização.

É importante ressaltar que, durante os processos de inserção e atualização, o Oracle


também realiza operações de travamento (lock) para garantir a consistência dos
dados e evitar conflitos entre transações concorrentes.

40
Resumindo a estrutura de um data block Oracle é composta por várias estruturas,
incluindo cabeçalho de bloco, diretório de transações, vetor de bits de espaço livre e
slots de linhas. Os processos de inserção e atualização envolvem a alocação de
espaço dentro do bloco, atualização das estruturas relevantes e modificação dos
dados da linha. O Oracle realiza esses processos de forma eficiente, garantindo a
integridade e consistência dos dados no banco de dados.

40
Conceitos Básicos Banco de
Dados – Oracle - Parse
PARSE de comandos SQL
EXEMPLO: SELECT * FROM EMP
1. Analisar 3. Extrair (Select)
SGA SGA
Shared Pool Database Buffer Shared Pool Database Buffer

Datafiles Datafiles
Cliente Processos Cliente Processos
Servidor Servidor

2. Executar Retorna as
SGA linhas
Shared Pool Database Buffer

Datafile
Client Processos s
e Servidor

Parse é o processo de análise de comandos SQL , especialmente os comandos DML


para execução no banco de dados. O processo de parse conta com 3 etapas distintas
(apenas consultas realizam a 3ª etapa).

Na etapa 1 de análise são feitas 2 análises distintas, primeiro a análise sintática onde
serão avaliados os comandos sob o ponto de vista unicamente da sua sintaxe. Uma
vez que o comando esteja sintaticamente correto será feita a 2ª análise que é a
semântica, onde serão avaliadas as tabelas, colunas e as permissões de acesso. Uma
vez validada contra o dicionário de dados em memória (ou disco) o comando passa
para a 2ª. Etapa onde é agregado o plano de acesso, que consiste em determinar
como os dados serão acessados (por exemplo utilizando índices). Após esta ação o
comando será efetivamente executado.
Especificamente no caso do comando SELECT (Consulta) é realizada a 3ª etapa que
consiste em retornar as linhas consultadas para a memória e depois para o processo
que a solicitou (Cliente).

Antes de analisar um comando o SGBD irá verificar se este comando já não foi
analisado (tenha sofrido parse anteriormente), caso não tenha será feito todo o
processo listado anteriormente e isso chamamos de HARD PARSE. Caso o comando

41
seja encontrado em memória (tenha sofrido parse anterior) será feito um SOFT PARSE
que consiste em evitar a re-execução da 1ª. Etapa e partir diretamente para a etapa
de execução.

Quanto mais houver padronização na escrita dos comandos SQL e quanto mais
forem utilizadas variáveis para tratamento de valores utilizados nos comandos como
critérios de pesquisa, por exemplo, mais possibilidades de SOFT PARSE teremos para
comandos semelhantes.

Um bom critério de performance métrico de um SGBD é a taxa de SOFT PARSES /


HARD PARSES. Quanto maior a taxa , ou seja, mais próxima de 100% , melhor.

PASSO A PASSO:

1.O cliente envia um comando SQL para o Oracle Database.

2.O Oracle recebe o comando SQL e o submete ao Parser.

3.O Parser realiza a análise léxica, que consiste na identificação e validação dos
componentes básicos do comando, como palavras-chave, identificadores, operadores
e símbolos.

4.O Parser realiza a análise sintática, que verifica se a estrutura do comando está
correta de acordo com as regras da linguagem SQL. É verificado se os elementos
estão em sequência correta e se não há erros de sintaxe.

5.O Parser gera uma árvore de análise sintática, conhecida como árvore de análise
(parse tree) ou árvore sintática abstrata (AST), que representa a estrutura hierárquica
do comando.

6.O Oracle verifica se os objetos referenciados no comando (tabelas, colunas, índices,


etc.) existem e se o usuário tem as permissões necessárias para acessá-los.

7.O Oracle realiza a análise semântica, que envolve a validação das regras e restrições
semânticas do comando. São verificados tipos de dados, coerência entre tabelas
relacionadas, restrições de integridade, entre outros aspectos.

8.O Oracle gera um plano de execução otimizado para o comando. O otimizador de


consultas analisa o comando, estima a melhor maneira de executá-lo e escolhe o
plano de execução mais eficiente em termos de tempo e recursos.

41
9.O plano de execução otimizado é armazenado em uma área chamada Shared Pool
(pool compartilhado) na memória, para possível reutilização posterior, evitando a
necessidade de análise e otimização repetidas do mesmo comando.

10.Com base no plano de execução, o Oracle executa o comando SQL, buscando os


dados necessários nos segmentos de armazenamento (datafiles) e aplicando as
operações especificadas no comando.

11.Durante a execução do comando, o Oracle realiza o gerenciamento de locks


(travamentos) para garantir a consistência dos dados e a coordenação entre
transações concorrentes.

12.O Oracle registra as alterações feitas pelos comandos DML (Data Manipulation
Language) no redo log, que é um registro sequencial das operações realizadas no
banco de dados. Isso permite a recuperação dos dados em caso de falhas.

13.Periodicamente, o Oracle realiza o processo de checkpoint, que grava as


alterações registradas no redo log nos datafiles permanentes, garantindo a
durabilidade das transações e a consistência do banco de dados.

41
Arquitetura PostgreSQL

42
Conceitos Básicos Banco de
Dados – Instância PostgreSQL

Instância é uma das principais estruturas em um SGBD Postgres. Consiste em um


conjunto de processos e de buffers de memória compartilhados – Shared Memory
(armazenadores de dados e comandos), que visam garantir a melhor performance na
recuperação de dados (shared buffers) e recuperação de comandos (catalog cache).
Visando garantir os dados contra perdas (WAL Buffers). Os processos utilitários
(utility Process) tem por finalidade realizar operações utilizando o armazenamento
físico dos dados (database)

Shared Buffers: Maior porção de memória alocada em uma instância postgres, é


composta de páginas recém acessadas em disco e depositadas em memória, estas
páginas são mantidas em memória a medida que são utilizadas. Ao serem alteradas
pelos comandos de Insert, Update , Delete e Merge ,as paginas tornam-se sujas e
dessa forma precisam ser escritas em disco a medida que o tempo passa e a
necessidade de armazenar os dados de forma permanente aumentam. Todos os
dados no postgres são carregados por padrão neste buffer.

WAL Buffers: conhecidos como write a head log (WAL), este buffer armazena os
comandos correspondentes as transações que foram realizadas, por garantia de
recuperação do banco de dados contra perdas físicas e lógicas de dados.

43
CLOG Buffers: Contem informações de transações que sofreram commit e as que
sofreram algum tipo de cancelamento (abort), Armazena 2 bits para cada transação
indicando se sofreu commit, foi abortada ou está em andamento.

LOCK Space: Área de controle de bloqueios de tabelas (table lock) e de estruturas de


memória (latch locks).

43
Conceitos Básicos Banco de
Dados - Instância

Postmaster: Processo DAEMON que inicia processos servidores para cada requisição
de conexão

A área de memória compartilhada (shared memory)


1) Shared Buffers: Area de memoria que contem buffers (paginas) de 8kb para leitura
e ou gravação
2) WAL Buffers: Usado para armazenar as transações que estão ocorrendo no banco
de dados
3) Process Array: Contem informações dos processos que estão acontecendo no
banco de dados

Processos: Existem uma série de processos críticos de Segundo plano sendo


executados os quais descreveremos abaixo:

1) BGwriter: Escreve os buffers sujos nos arquivos de dados (Data Files)


2) WAL writer: Escreve as transações que sofreram commit dos buffers WAL (WAL
buffers) para os segmentos WAL (WAL segments)
3) Archiver: copia os segmentos WAL (WAL segments) para a area de arquivamento

44
WAL (Archived WAL area)
4) Checkpointer: Processo que garantirá a realização do Checkpointna sequencia de
todas as transações listadas nos xlogs ao ponto que todos os arquivos de dados (data
files) tenham sido atualizado para refletir as informações armazenadas no log. É
disparado a cada 5 minutos.
5) Stats Collector: Coleta estatísticas pela relação e bloco.
6) Autovacuum: remove as linhas mortas da tabela e as reorganiza
7) LOG writer: envia mensagens de log para os arquivos de log de erro (Error Log
Files)

- WAL – Write Ahead Log

44
Conceitos Básicos Banco de
Dados - Database

Processos Background Physical Database

Postmaster: Processo DAEMON que inicia processos servidores para cada requisição
de conexão

Processos: Existem uma série de processos críticos de Segundo plano sendo


executados os quais descreveremos abaixo:

1) BGwriter: Escreve os buffers sujos nos arquivos de dados (Data Files)


2) WAL writer: Escreve as transações que sofreram commit dos buffers WAL (WAL
buffers) para os segmentos WAL (WAL segments)
3) Archiver: copia os segmentos WAL (WAL segments) para a area de arquivamento
WAL (Archived WAL area)
4) Checkpointer: Processo que garantirá a realização do Checkpointna sequencia de
todas as transações listadas nos xlogs ao ponto que todos os arquivos de dados (data
files) tenham sido atualizado para refletir as informações armazenadas no log. É
disparado a cada 5 minutos.
5) Stats Collector: Coleta estatísticas pela relação e bloco.
6) Autovacuum: remove as linhas mortas da tabela e as reorganiza
7) LOG writer: envia mensagens de log para os arquivos de log de erro (Error Log
Files)

45
- WAL – Write Ahead Log

Em um banco de dados encontramos 4 estruturas de arquivos que são importantes:

Arquivos Físicos (physical data files):


1) Data files: contem todos os dados em um banco de dados
2) WAL segments: Contem as transações que sofreram Commit
3) Archived WAL: Contem os logs das transações (transaction logs)
4) Error log files: Contem as mensagens , incluindo erros

45
Conceitos Básicos Banco de Dados
Organização Dados - Postgres
Banco de Dados
• Um banco de dados Postgres possui um ou
(Database) mais tablespaces (gerenciam o agrupamento
dos arquivos de dados e diretórios). Cada
objeto (tabela,indice,etc..) é depositado em
Tablespace Diretório
uma tablespace e fisicamente em um arquivo
de dados. A tablespace pode ocupar
Arquivo de Dados
fisicamente 1 ou mais arquivos de dados (Data
Tabela / Indice
(Data Files) Files), conforme o numero de tabelas e ou
indices que possuir. Cada objeto armazenado
se transforma em um arquivo de dados.
Inicialmente uma tabela ocupa um arquivos de
Paginas Postgres
(Page Blocks)
Bloco S.O. dados (data files) e esta aloca especifico de
páginas que irão armazenar logicamente os
Estruturas Lógicas Estruturas Físicas dados. Uma página típica tem 8Kb, a medida
que um arquivo de dados precisa de mais
espaço este aumenta mais página por vez.

A estrutura de armazenamento no PostgreSQL envolve vários componentes, desde o


database até as páginas de blocos do sistema operacional.

Database (Banco de Dados):

Um database no PostgreSQL é uma coleção de objetos, como tabelas, índices,


funções e procedimentos armazenados. Cada database é isolado e contém seus
próprios objetos e dados.

Tablespace (Espaço de Tabelas):

Um tablespace é uma unidade lógica de armazenamento no PostgreSQL, onde os


objetos de um database são armazenados. Cada tablespace é associado a um
diretório no sistema de arquivos do servidor.

Tabela/Índice:

Uma tabela no PostgreSQL é uma estrutura que armazena os dados organizados em


linhas e colunas. Os índices são estruturas adicionais que melhoram o desempenho

46
das consultas ao permitir a recuperação rápida dos dados com base em
determinados critérios.

Páginas PostgreSQL:

As páginas no PostgreSQL são unidades de armazenamento físico, tendo um tamanho


fixo de 8 KB. As tabelas e índices são divididos em páginas, e os dados são
armazenados nessas páginas de forma eficiente.

Diretório:

Um diretório no PostgreSQL é uma pasta no sistema de arquivos do servidor onde


são armazenados os arquivos de dados e outros arquivos relacionados a um database
ou tablespace específico.

Arquivos de Dados:

Os arquivos de dados no PostgreSQL são os arquivos físicos que armazenam as


páginas do database, tabelas, índices e outros objetos. Cada tabela e índice possui
um ou mais arquivos de dados associados.

Páginas de Blocos do Sistema Operacional:

As páginas de blocos do sistema operacional são unidades de armazenamento


utilizadas pelo sistema operacional para gerenciar o armazenamento em disco. Essas
páginas são gerenciadas pelo sistema operacional e podem ser utilizadas para
armazenar os arquivos de dados do PostgreSQL.

No PostgreSQL, a estrutura de armazenamento é gerenciada internamente pelo


sistema, e o acesso aos dados é feito por meio de consultas SQL. O PostgreSQL utiliza
algoritmos e estruturas de dados eficientes para armazenar e recuperar os dados de
forma rápida e confiável.

É importante mencionar que o PostgreSQL também oferece recursos avançados de


gerenciamento de armazenamento, como tablespaces com diferentes esquemas de
armazenamento, controle de acesso, compressão de dados, particionamento de
tabelas, entre outros recursos, que permitem uma configuração flexível e otimizada
do armazenamento dos dados.

46
Conceitos Básicos Banco de
Dados – Paginas (Page Blocks)

ESQUEMA PAGINA • Páginas são estruturas de armazenamento


utilizadas pelos SGBDs para garantirem a
PAGINA 1 Pd_lsn Pd_checksum Pd_flags Pd_lower Pd_upper persistência dos dados . Alguns bancos de dados
HEADER PAGINA
Pd_pagesize_
Pd_special
version
Pd_prune_xid (PAGE HEADER) tambem chamam este componente de Bloco O
PAGINA 2 1 2 3 .....
SGBD Postgres chama este componente como
Alocação REGISTRO página. Os dados são armazenados no formato de
Registro 1 (ROW) registros ou linhas (rows), ocupando a área de
PAGINA 3 dados até o limite desta que é chamado de FREE
PONTEIROS SPACE ou área livre, usada exclusivamente para
LINHA operações de Atualização de dados (UPDATE). O
Alocação
(LINE POINTERS) tamanho padrão para um bloco é de 8Kb.
Alocação
Registro 2
Registro 3 ROW 3
ESPAÇO LIVRE
(FREE SPACE)
PAGINA N ROW 2 ROW 1 • É A UNIDADE DE MEDIDA PARA LEITURA E
GRAVAÇÃO.

A estrutura de uma página no PostgreSQL é fundamental para entender como os


dados são armazenados internamente.

Header da Página:
O header da página é uma estrutura que armazena informações sobre a própria
página, como o tipo de página, o número de sequência, o número de itens na página,
entre outros metadados.

Item Offset Array:


O item offset array é uma estrutura que armazena os deslocamentos dos itens
presentes na página. Cada item é um registro individual que pode representar uma
linha de dados ou um índice.

Free Space:
O espaço livre é a porção da página que não está ocupada por itens. É onde novos
registros podem ser inseridos. O espaço livre é controlado por meio de um ponteiro
que indica o fim do espaço livre disponível.

Item Data:

47
Os itens de dados são os registros individuais armazenados na página. Cada item
contém os dados de uma linha de uma tabela ou índice. Eles são organizados
sequencialmente na página.

Line Pointer Array:


O line pointer array é uma estrutura que aponta para os itens de dados na página. Ele
mapeia cada item de dados com o seu respectivo deslocamento e tamanho.

Optional Header Data:


O optional header data é uma seção opcional que pode conter informações
adicionais, dependendo do tipo de página. Por exemplo, em uma página de índice,
pode haver uma estrutura de índice B-tree específica.

A estrutura de uma página PostgreSQL tem um tamanho fixo de 8 KB. Cada página é
identificada por um número de bloco e é a unidade básica de leitura/gravação no
PostgreSQL. As páginas são organizadas em extensões que, por sua vez, são alocadas
nos arquivos de dados.

O PostgreSQL utiliza um sistema de gerenciamento de páginas eficiente para


controlar a alocação, liberação e acesso aos dados armazenados. As páginas são
gerenciadas pelo sistema para garantir a integridade dos dados e a eficiência das
operações de leitura e gravação.

Ao realizar operações de inserção, atualização ou exclusão de dados, o PostgreSQL


manipula as páginas para acomodar as mudanças necessárias, reorganizando os itens
de dados e atualizando os metadados correspondentes.

A compreensão da estrutura de uma página no PostgreSQL é essencial para entender


como os dados são armazenados e como o sistema gerencia o acesso e a
manipulação desses dados de forma eficiente.

DETALHAMENTO HEADER PAGINA:

Aqui estão as descrições dos campos mencionados em relação à estrutura de uma


página PostgreSQL:

1.pd_len (Comprimento da Página): O campo pd_len armazena o comprimento total


da página em bytes. Ele indica o tamanho ocupado pela página, incluindo os dados
reais, os metadados e quaisquer áreas de espaço livre.

2.pd_checksum (Checksum): O campo pd_checksum contém o valor checksum (soma

47
de verificação) da página. Ele é usado para verificar a integridade dos dados durante a
leitura da página. O valor checksum é calculado com base no conteúdo da página e é
usado para detectar possíveis erros de corrupção.

3.pd_flags (Flags): O campo pd_flags armazena flags ou indicadores que fornecem


informações adicionais sobre a página. Essas flags podem indicar o tipo da página,
como uma página de dados ou uma página de índice, e também podem indicar se há
itens removidos ou seções especiais na página.

4.pd_lower e pd_upper (Limites Inferior e Superior): Os campos pd_lower e


pd_upper definem os limites inferior e superior da área de espaço livre na página.
Esses valores indicam onde começa e termina o espaço livre disponível para inserção
de novos registros.

5.pd_special (Seção Especial): O campo pd_special é usado para armazenar


informações especiais associadas à página. Em algumas páginas, esse campo é usado
para armazenar informações específicas do tipo de página, como informações de
metadados para índices B-tree.

6.pd_pagesize_version (Tamanho da Página e Versão): O campo pd_pagesize_version


armazena informações sobre o tamanho da página e a versão da estrutura da página.
Ele registra o tamanho em bytes da página e a versão da estrutura usada para
interpretar os dados da página corretamente.

7.pd_prune_xid (Identificador de Transação de Podagem): O campo pd_prune_xid


mantém o identificador de transação (XID) que indica a transação mais antiga que
removeu um item da página. Essa informação é usada para operações de limpeza
(podagem) para garantir que os itens removidos sejam realmente eliminados e
liberem espaço para reutilização.

Esses campos são parte da estrutura da página no PostgreSQL e são usados para
armazenar metadados, controlar o espaço livre, identificar o tipo de página e garantir
a integridade dos dados. Com base nesses campos, o PostgreSQL pode gerenciar o
armazenamento, a recuperação e a manipulação eficiente dos dados armazenados
em uma página PostgreSQL.

47
Conceitos Básicos Banco de
Dados – PostrgreSQL - Parse

Parse é o processo de análise de comandos SQL , especialmente os comandos DML


para execução no banco de dados. O processo de parse conta com 3 etapas distintas
(apenas consultas realizam a 3ª etapa).

Na etapa 1 de análise é feita a análise sintática onde serão avaliados os comandos


sob o ponto de vista unicamente da sua sintaxe. Uma vez que o comando esteja
sintaticamente correto será feita a 2ª fase da análise que é a semântica, onde serão
avaliadas as tabelas, colunas e as permissões de acesso. Uma vez validada contra o
dicionário de dados em memória (ou disco) o comando passa para a 3ª. Etapa onde
são feitas eventuais reescritas de comandos SQL, como no caso de visões em que a
consulta é reescrita para o select básico da visão mais as solicitações especificas do
comando original. Na etapa 4 o otimizador de planos de acesso através de
informações coletadas em estatísticas escolhe o melhor plano de execução a ser
utilizado para o comando passando-se assim para a etapa 5 onde o executor que irá
realizar a operação de SQL podendo no caso do comando SELECT realizar uma etapa
adicional de fetch que é a recuperação dos dados e envio dos mesmos para o cliente
que solicitou a execução do comando.

Antes de analisar um comando o SGBD irá verificar se este comando já não foi

48
analisado (tenha sofrido parse anteriormente), caso não tenha será feito todo o
processo listado anteriormente e isso chamamos de HARD PARSE. Caso o comando
seja encontrado em memória (tenha sofrido parse anterior) será feito um SOFT PARSE
que consiste em evitar a re-execução da 1ª. Etapa e partir diretamente para a etapa
de execução.

Quanto mais houver padronização na escrita dos comandos SQL e quanto mais
forem utilizadas variáveis para tratamento de valores utilizados nos comandos como
critérios de pesquisa, por exemplo, mais possibilidades de SOFT PARSE teremos para
comandos semelhantes.

Um bom critério de performance métrico de um SGBD é a taxa de SOFT PARSES /


HARD PARSES. Quanto maior a taxa , ou seja, mais próxima de 100% , melhor.

48
Aspectos Físicos de
Armazenamento
Relacionados a Bancos de Dados
(Leitura Complementar)

49
Conceitos Básicos Banco de
Dados
O que é RAID

• RAID (REDUNDANT ARRAY OF INEXPENSIVE DISKS) é uma tecnologia de


armazenamento em que os discos são dispostos em um nível de raid que vai
de 0 a 10, cada nivel promove vantagens e desvantagens no armazenamento
e principalmente na perda de informações.
• RAID pode ser implementado por HARDWARE (mais eficiente) ou por
SOFTWARE (mais portavel).
• Para banco de dados RAID é de grande importância pois pode evitar
problemas em caso de falhas de discos como restore de backup e pode ainda
evitar perdas de informações.

50
Conceitos Básicos Banco de
Dados
Níveis de RAID

• 0 Striped array sem tolerância de falhas


• 1 Disk mirroring
• Agrupamento RAID (i.e., 1 + 0, 0 + 1, etc.)
• 3 Parallel access array com paridade de disco dedicada
• 4 Striped array com discos independentes e uma paridade de disco dedicada
• 5 Striped array com discos independentes e distribuídas em paridade
• 6 Striped array com discos independentes e distribuídas em dupla paridade

51
Conceitos Básicos Banco de
Dados
RAID 0
0

RAID
Controller

Host

Raid 0 (Redundant Array of Independent Disks 0), também conhecido como striping,
é uma técnica de armazenamento que envolve a combinação de vários discos rígidos
em um único volume lógico. Ao contrário de outros níveis de RAID, o RAID 0 não
oferece redundância ou capacidade de recuperação de falhas. Em vez disso, seu
objetivo principal é melhorar o desempenho do sistema.

No RAID 0, os dados são divididos em blocos e distribuídos igualmente em vários


discos rígidos. Isso permite que as operações de leitura e gravação sejam executadas
simultaneamente em todos os discos, aumentando significativamente a taxa de
transferência. A velocidade geral do sistema é aprimorada, uma vez que vários discos
estão trabalhando em paralelo para acessar e gravar dados.

Principais usos do RAID 0:

Armazenamento de dados temporários ou não críticos: Como o RAID 0 não fornece


redundância, é adequado para armazenar dados que não são essenciais ou que
podem ser facilmente recuperados de outras fontes.

Aplicações de edição de vídeo e áudio: O RAID 0 é amplamente utilizado em

52
ambientes de produção de mídia, onde grandes arquivos precisam ser
processados ​em tempo real. A alta taxa de transferência do RAID 0 permite uma
edição mais rápida e suave.

Jogos e aplicativos que exigem carregamento rápido: O RAID 0 pode acelerar o tempo
de carregamento de jogos e aplicativos pesados, pois permite que os dados sejam
acessados ​mais rapidamente.

Vantagens do RAID 0:

Melhor desempenho: O RAID 0 oferece um desempenho significativamente maior em


comparação com um único disco rígido. As operações de leitura e gravação são
distribuídas em vários discos, resultando em tempos de acesso mais curtos e maior
taxa de transferência.

Aproveitamento total da capacidade de armazenamento: Em um RAID 0 com dois


discos rígidos idênticos, por exemplo, a capacidade total é a soma das capacidades
individuais. Isso significa que todo o espaço disponível nos discos é utilizado para
armazenamento de dados.

Desvantagens do RAID 0:

Falta de redundância: Uma das principais desvantagens do RAID 0 é que ele não
oferece tolerância a falhas. Se um dos discos rígidos falhar, todos os dados
armazenados no RAID 0 podem ser perdidos. Portanto, é essencial fazer backup
regular dos dados.

Aumento do risco de perda de dados: Como não há redundância, a perda de qualquer


um dos discos rígidos resultará na perda de todos os dados do RAID 0. Isso significa
que a confiabilidade geral do sistema é menor em comparação com configurações
RAID que fornecem redundância.

Dificuldade de migração: Devido à forma como os dados são distribuídos entre os


discos, migrar um RAID 0 para outro conjunto de discos pode ser complicado. É
necessário copiar todos os dados para os novos discos e reconstruir o RAID 0 a partir
do zero.

52
Conceitos Básicos Banco de
Dados
RAID 1
0

RAID
Controller

Host

RAID 1 (Redundant Array of Independent Disks 1), também conhecido como


espelhamento, é uma técnica de armazenamento que envolve a replicação de dados
em dois ou mais discos rígidos. Ao contrário do RAID 0, o RAID 1 oferece
redundância, o que significa que os dados são copiados em tempo real para garantir a
disponibilidade e a segurança dos dados.

No RAID 1, todos os discos rígidos armazenam exatamente as mesmas informações.


Quando ocorre uma operação de gravação, os dados são escritos simultaneamente
em todos os discos. Isso garante que, se um dos discos falhar, os dados ainda estejam
disponíveis nos outros discos. O sistema continuará funcionando normalmente com a
falha de um disco, sem perda de dados ou interrupção de serviço.

Principais usos do RAID 1:

Proteção de dados críticos: O RAID 1 é amplamente utilizado quando a segurança e a


disponibilidade dos dados são essenciais. É ideal para armazenar informações
importantes, como bancos de dados, arquivos de sistema e documentos
empresariais.

53
Servidores e sistemas de armazenamento: Em ambientes corporativos, o RAID 1 é
comumente implementado em servidores e sistemas de armazenamento para
garantir a confiabilidade dos dados. Se um disco falhar, a operação do sistema
continua sem interrupções.

Backup de dados: O RAID 1 pode ser usado como uma forma de backup redundante.
Os dados são gravados em discos duplicados, o que fornece uma cópia de segurança
imediata e confiável.

Vantagens do RAID 1:

Redundância e disponibilidade de dados: Com a duplicação dos dados em tempo real,


o RAID 1 oferece alta disponibilidade. Se um disco falhar, os dados ainda estão
acessíveis nos discos restantes, sem interrupção do serviço.

Recuperação fácil de falhas de disco: Substituir um disco defeituoso em um RAID 1 é


relativamente simples. Basta remover o disco defeituoso e substituí-lo por um novo.
O sistema irá reconstruir automaticamente os dados no novo disco.

Desvantagens do RAID 1:

Custo de armazenamento: O RAID 1 requer o dobro do espaço de armazenamento


necessário para armazenar os dados. Por exemplo, se você tiver dois discos de 1 TB
em RAID 1, a capacidade total será de apenas 1 TB, pois o segundo disco é usado
para espelhar o primeiro.

Desempenho de leitura não aprimorado: Embora o RAID 1 ofereça alta


disponibilidade e segurança, ele não melhora o desempenho de leitura, já que os
dados estão duplicados em todos os discos. O desempenho de gravação também
pode ser um pouco afetado devido à necessidade de gravar os dados em todos os
discos.

Em resumo, o RAID 1 oferece redundância e segurança dos dados, garantindo a


disponibilidade contínua em caso de falha de disco. É amplamente utilizado em
ambientes que requerem alta confiabilidade, como servidores e sistemas de
armazenamento. No entanto, é importante considerar o custo adicional de
armazenamento e a possível diminuição do desempenho de leitura.

53
Conceitos Básicos Banco de
Dados
RAID 0+1
RAID 1

Block 1

Block 4

RAID 2
Block RAID 0
Block 3
0 Block 41
5
Controller

Block 2

Host Block 5

RAID 0+1 (também conhecido como RAID 10) é uma combinação dos níveis RAID 0 e
RAID 1. Ele oferece tanto desempenho quanto redundância, aproveitando as
vantagens de ambos os níveis de RAID. No RAID 0+1, os dados são distribuídos em
discos rígidos em um arranjo RAID 0 e, em seguida, esses conjuntos de dados são
espelhados em um arranjo RAID 1.

A configuração do RAID 0+1 geralmente requer um mínimo de quatro discos rígidos,


organizados em dois conjuntos idênticos de dois discos. Cada conjunto de dois discos
é configurado como um RAID 0, onde os dados são divididos em blocos e distribuídos
entre os discos para obter um desempenho otimizado. Em seguida, os dois conjuntos
RAID 0 são espelhados em um RAID 1, onde os dados são duplicados em tempo real
em ambos os conjuntos para fornecer redundância.

Principais usos do RAID 0+1:

Ambientes empresariais críticos: O RAID 0+1 é amplamente utilizado em ambientes


empresariais onde o desempenho e a proteção dos dados são fundamentais. Ele
oferece alta velocidade de leitura/gravação e tolerância a falhas, tornando-o
adequado para servidores de bancos de dados, sistemas de armazenamento de alto

54
desempenho e aplicativos exigentes.

Aplicações que exigem desempenho e segurança: O RAID 0+1 é adequado para


aplicativos que necessitam de desempenho rápido e simultaneidade de
leitura/gravação, juntamente com a proteção dos dados. Isso inclui ambientes de
edição de vídeo profissional, processamento de transações financeiras e aplicativos
de computação de alto desempenho.

Vantagens do RAID 0+1:

Melhor desempenho: O RAID 0+1 combina as vantagens do RAID 0, oferecendo um


desempenho rápido e eficiente de leitura/gravação, com as vantagens do RAID 1,
fornecendo redundância e proteção dos dados.

Alta tolerância a falhas: O RAID 0+1 pode suportar a falha de um ou mais discos,
dependendo da configuração. Se um disco falhar em um conjunto RAID 0, a
redundância do RAID 1 garante a continuidade dos dados. A substituição do disco
defeituoso é relativamente simples e não afeta a operação do sistema.

Desvantagens do RAID 0+1:

Custo de armazenamento: O RAID 0+1 requer o dobro do espaço de armazenamento


necessário para armazenar os dados, devido à duplicação dos discos em um arranjo
RAID 1. Isso pode resultar em um custo maior em relação a configurações RAID
apenas de desempenho.

Complexidade de configuração: Configurar um RAID 0+1 requer um número mínimo


de quatro discos rígidos e um planejamento cuidadoso para organizar os conjuntos
RAID 0 e o espelhamento RAID 1. Isso pode tornar a configuração inicial mais
complexa em comparação com outros níveis de RAID.

Em resumo, o RAID 0+1 combina desempenho e redundância, oferecendo alta


velocidade de leitura/gravação e proteção dos dados. É uma opção popular em
ambientes empresariais críticos que exigem desempenho e segurança
simultaneamente. No entanto, é importante considerar o custo adicional de
armazenamento e a complexidade de configuração ao implementar um RAID 0

54
Conceitos Básicos Banco de
Dados
RAID 0+1
RAID 1

Block 1 Block 1

Block 4 Block 4

RAID RAID 0
Controller

Block 2 Block 2

Host Block 5 Block 5

Este tipo de RAID possui um melhor custo beneficio pois mescla a performance do
RAID 0 e a segurança do RAID 1. Recomendado para maior parte dos componentes
de banco de dados. Neste caso ocorre o fatiamento primeiro (RAID 0) e o
espelhamento (RAID 1) em sequencia.

55
Conceitos Básicos Banco de
Dados
RAID 1+0

RAID 0

1
Block 2

Block 4
5

RAID RAID 1
Block 3
0 Controller

1
Block 2

Host Block 4
5

RAID 0+1 (também conhecido como RAID 10) é uma combinação dos níveis RAID 0 e
RAID 1. Ele oferece tanto desempenho quanto redundância, aproveitando as
vantagens de ambos os níveis de RAID. No RAID 0+1, os dados são distribuídos em
discos rígidos em um arranjo RAID 0 e, em seguida, esses conjuntos de dados são
espelhados em um arranjo RAID 1.

A configuração do RAID 0+1 geralmente requer um mínimo de quatro discos rígidos,


organizados em dois conjuntos idênticos de dois discos. Cada conjunto de dois discos
é configurado como um RAID 0, onde os dados são divididos em blocos e distribuídos
entre os discos para obter um desempenho otimizado. Em seguida, os dois conjuntos
RAID 0 são espelhados em um RAID 1, onde os dados são duplicados em tempo real
em ambos os conjuntos para fornecer redundância.

Principais usos do RAID 0+1:

Ambientes empresariais críticos: O RAID 0+1 é amplamente utilizado em ambientes


empresariais onde o desempenho e a proteção dos dados são fundamentais. Ele
oferece alta velocidade de leitura/gravação e tolerância a falhas, tornando-o
adequado para servidores de bancos de dados, sistemas de armazenamento de alto

56
desempenho e aplicativos exigentes.

Aplicações que exigem desempenho e segurança: O RAID 0+1 é adequado para


aplicativos que necessitam de desempenho rápido e simultaneidade de
leitura/gravação, juntamente com a proteção dos dados. Isso inclui ambientes de
edição de vídeo profissional, processamento de transações financeiras e aplicativos
de computação de alto desempenho.

Vantagens do RAID 0+1:

Melhor desempenho: O RAID 0+1 combina as vantagens do RAID 0, oferecendo um


desempenho rápido e eficiente de leitura/gravação, com as vantagens do RAID 1,
fornecendo redundância e proteção dos dados.

Alta tolerância a falhas: O RAID 0+1 pode suportar a falha de um ou mais discos,
dependendo da configuração. Se um disco falhar em um conjunto RAID 0, a
redundância do RAID 1 garante a continuidade dos dados. A substituição do disco
defeituoso é relativamente simples e não afeta a operação do sistema.

Desvantagens do RAID 0+1:

Custo de armazenamento: O RAID 0+1 requer o dobro do espaço de armazenamento


necessário para armazenar os dados, devido à duplicação dos discos em um arranjo
RAID 1. Isso pode resultar em um custo maior em relação a configurações RAID
apenas de desempenho.

Complexidade de configuração: Configurar um RAID 0+1 requer um número mínimo


de quatro discos rígidos e um planejamento cuidadoso para organizar os conjuntos
RAID 0 e o espelhamento RAID 1. Isso pode tornar a configuração inicial mais
complexa em comparação com outros níveis de RAID.

Em resumo, o RAID 0+1 combina desempenho e redundância, oferecendo alta


velocidade de leitura/gravação e proteção dos dados. É uma opção popular em
ambientes empresariais críticos que exigem desempenho e segurança
simultaneamente. No entanto, é importante considerar o custo adicional de
armazenamento e a complexidade de configuração ao implementar um RAID 0

56
Conceitos Básicos Banco de
Dados
RAID 1+0
RAID 0

Block 1 Block 2

Block 4 Block 5

RAID RAID 1
Controller

Block 1 Block 2

Host Block 4 Block 5

57
Conceitos Básicos Banco de
Dados
0 4

1
6 5
9

RAID 1
?
Controller

3
Host 7 7
11
O Disco intermediario falhou:
Calculo da Paridade 4 + 6 + 1 + 7 = 18 0123
4 518
67

Disco de Paridade

58
Conceitos Básicos Banco de
Dados
RAID 3

Block RAID0
Block
Controller
Block 1
Paridade
Gerada
Block 2
Host
Block 3
P0123

RAID 3 é um nível de RAID (Redundant Array of Independent Disks) que se concentra


na velocidade de transferência de dados e na tolerância a falhas. No RAID 3, os dados
são distribuídos entre os discos, com um disco dedicado para armazenar as
informações de paridade.

No RAID 3, pelo menos três discos são necessários para criar um conjunto RAID. Os
dados são divididos em blocos e gravados nos discos de dados, enquanto o disco de
paridade armazena as informações de paridade calculadas a partir dos dados nos
outros discos. Essas informações de paridade permitem a reconstrução dos dados em
caso de falha de um disco.

Principais usos do RAID 3:

Aplicações de streaming de mídia: O RAID 3 é frequentemente usado em ambientes


que exigem streaming contínuo de mídia, como produção de áudio e vídeo. A alta
velocidade de transferência de dados do RAID 3 permite que múltiplos fluxos de
mídia sejam reproduzidos simultaneamente.

Armazenamento de dados que exigem alta taxa de transferência: O RAID 3 é

59
adequado para armazenamento de dados que requerem transferência rápida, como
bancos de dados intensivos em leitura/gravação ou aplicativos que envolvem
processamento em tempo real.

Ambientes onde a tolerância a falhas é necessária: O RAID 3 fornece tolerância a


falhas, pois é capaz de reconstruir os dados caso ocorra uma falha em um dos discos.

Vantagens do RAID 3:

Alta taxa de transferência: O RAID 3 oferece uma alta taxa de transferência de dados,
permitindo acesso rápido e eficiente aos arquivos armazenados.

Tolerância a falhas: Em caso de falha de um dos discos, os dados podem ser


reconstruídos usando as informações de paridade armazenadas no disco dedicado.
Isso permite a recuperação dos dados e a continuidade do sistema.

Desvantagens do RAID 3:

Desempenho limitado para operações de leitura/gravação simultâneas: Devido à


necessidade de gravar as informações de paridade em um único disco dedicado, o
RAID 3 pode apresentar um gargalo de desempenho durante operações de
leitura/gravação simultâneas.

Falta de flexibilidade: O RAID 3 requer um número mínimo de discos e a configuração


não permite a expansão do conjunto sem reconfiguração completa do sistema.

Menor eficiência de armazenamento: O RAID 3 tem uma eficiência de


armazenamento inferior a outros níveis de RAID, já que um disco inteiro é dedicado
às informações de paridade.

Portanto o RAID 3 é adequado para ambientes que requerem alta taxa de


transferência e tolerância a falhas. É comumente usado em aplicações de streaming
de mídia e armazenamento de dados que exigem acesso rápido. No entanto, o
desempenho pode ser afetado durante operações de leitura/gravação simultâneas e
a eficiência de armazenamento é menor em comparação com outros níveis de RAID.

59
Conceitos Básicos Banco de
Dados
RAID 4 Block 0
Block 4

Block 1
Block 5

Paridade
RAID0 Block 2
Block 0 Block
Gerada
Controller Block 6
P0123
Block 3
Host
Block 7

P0123
P4567

RAID 4 é um nível de RAID (Redundant Array of Independent Disks) que se concentra


em combinar desempenho e tolerância a falhas. No RAID 4, os dados são distribuídos
entre os discos, com um disco dedicado para armazenar as informações de paridade.

No RAID 4, os dados são divididos em blocos e gravados nos discos, enquanto o disco
de paridade armazena as informações de paridade calculadas a partir dos dados nos
outros discos. A diferença em relação ao RAID 3 é que, no RAID 4, as informações de
paridade são armazenadas em um único disco, em vez de serem distribuídas em
discos separados.

Principais usos do RAID 4:

Ambientes que exigem alto desempenho de leitura: O RAID 4 é adequado para


aplicações que envolvem leituras intensivas, como servidores de arquivos e bancos
de dados que exigem acesso rápido aos dados.

Armazenamento de dados de uso misto: O RAID 4 é eficiente para armazenar dados


de uso misto, como aplicativos que envolvem tanto leituras quanto gravações, pois
permite operações de leitura concorrentes.

60
Ambientes que exigem tolerância a falhas: O RAID 4 oferece tolerância a falhas,
permitindo a recuperação dos dados em caso de falha de um dos discos.

Vantagens do RAID 4:

Desempenho de leitura aprimorado: O RAID 4 oferece um desempenho aprimorado


de leitura, pois permite a leitura simultânea de vários blocos de dados de diferentes
discos.

Tolerância a falhas: Em caso de falha de um dos discos, os dados podem ser


reconstruídos usando as informações de paridade armazenadas no disco dedicado.
Isso permite a recuperação dos dados e a continuidade do sistema.

Desvantagens do RAID 4:

Gargalo de desempenho em operações de gravação: Devido à necessidade de gravar


as informações de paridade em um único disco dedicado, o RAID 4 pode apresentar
um gargalo de desempenho durante operações de gravação, pois todas as gravações
devem passar pelo disco de paridade.

Menor eficiência de armazenamento: O RAID 4 tem uma eficiência de


armazenamento menor em comparação com outros níveis de RAID, uma vez que um
disco inteiro é dedicado às informações de paridade.

Dificuldade na expansão do conjunto: A expansão do conjunto RAID 4 pode ser


complexa, pois requer a reconfiguração completa do sistema.

Resumindo o RAID 4 é adequado para ambientes que exigem alto desempenho de


leitura e tolerância a falhas. É comumente usado em servidores de arquivos e bancos
de dados que precisam de acesso rápido aos dados. No entanto, o desempenho de
gravação pode ser afetado e a eficiência de armazenamento é menor em comparação
com outros níveis de RAID.

60
Conceitos Básicos Banco de
Dados
RAID 5 Block 0
Block 4

Block 1
Block 5

Paridade
Parity
RAID4 Block 2
Block 0
4 Block 0
Generated
Gerada
Controller Block 6
P4
0516
273
Block 3
Host
P4567

P0123
Block 7

RAID 5 é um nível de RAID (Redundant Array of Independent Disks) que oferece uma
combinação de desempenho, capacidade de armazenamento e tolerância a falhas.
No RAID 5, os dados e as informações de paridade são distribuídos entre vários discos
no conjunto RAID.

No RAID 5, os dados são divididos em blocos e gravados nos discos, juntamente com
as informações de paridade. Cada bloco de dados tem sua própria informação de
paridade, que é calculada com base nos dados dos outros discos. Essas informações
de paridade permitem reconstruir os dados em caso de falha de um dos discos.

Principais usos do RAID 5:

Servidores de arquivos e aplicativos de armazenamento em rede: O RAID 5 é


amplamente utilizado em servidores de arquivos e em sistemas de armazenamento
em rede, onde o desempenho e a tolerância a falhas são fundamentais. Ele oferece
capacidade de armazenamento eficiente e desempenho adequado para aplicações
que envolvem leitura/gravação simultânea.

61
Aplicações empresariais e bancos de dados: O RAID 5 é adequado para armazenar
dados empresariais, como bancos de dados, sistemas de gerenciamento de
relacionamento com o cliente (CRM) e sistemas de gerenciamento de recursos
empresariais (ERP).

Ambientes que exigem tolerância a falhas: O RAID 5 fornece tolerância a falhas,


permitindo a recuperação dos dados em caso de falha de um dos discos.

Vantagens do RAID 5:

Capacidade de armazenamento eficiente: O RAID 5 oferece uma eficiência de


armazenamento maior em comparação com outros níveis de RAID, pois apenas um
disco é necessário para armazenar as informações de paridade.

Desempenho adequado para operações de leitura/gravação: O RAID 5 oferece um


bom equilíbrio entre desempenho e segurança. Ele permite operações de
leitura/gravação simultâneas em vários discos, resultando em um desempenho geral
satisfatório.

Tolerância a falhas: Em caso de falha de um dos discos, os dados podem ser


reconstruídos usando as informações de paridade distribuídas nos outros discos. Isso
permite a recuperação dos dados sem interrupção do serviço.

Desvantagens do RAID 5:

Desempenho reduzido durante a reconstrução: Durante a reconstrução dos dados


após uma falha de disco, o desempenho do RAID 5 pode ser reduzido, pois os dados
precisam ser reconstruídos usando as informações de paridade distribuídas nos
demais discos.

Risco de falha múltipla: Se ocorrerem falhas em mais de um disco antes que a


reconstrução seja concluída, pode haver perda total dos dados. A probabilidade de
falha múltipla aumenta à medida que o tempo de reconstrução se prolonga.

Expansão limitada do conjunto RAID: A expansão de um conjunto RAID 5 existente


pode ser desafiadora, pois requer a reconfiguração completa do sistema.

Resumindo o RAID 5 é adequado para ambientes que exigem uma combinação de


capacidade de armazenamento eficiente, desempenho satisfatório e tolerância a

61
falhas. É comumente utilizado em servidores de arquivos, bancos de dados e
sistemas de armazenamento em rede. No entanto, é importante considerar o risco de
falha múltipla e o desempenho reduzido durante a reconstrução dos dados.

PERCENTUAL DE PERDAS ENTRE OS RAIDS:

Aqui está um resumo dos percentuais de perda de capacidade para cada nível de
RAID mencionado:
1.RAID 0: No RAID 0, não há redundância de dados, o que significa que não há
proteção contra falhas. Portanto, se um dos discos falhar, todos os dados
armazenados no RAID 0 podem ser perdidos. Nesse caso, o percentual de perda é de
100% dos dados.

2.RAID 1: No RAID 1, os dados são espelhados em discos separados. Isso significa que
cada dado é replicado em um segundo disco, oferecendo proteção contra falhas.
Nesse caso, o percentual de perda é de 50% da capacidade total, pois metade da
capacidade é usada para espelhar os dados.

3.RAID 10 (RAID 0+1): O RAID 10 combina as características do RAID 0 e RAID 1. Os


dados são distribuídos em conjuntos RAID 0 e, em seguida, espelhados em outro
conjunto RAID 0. No caso de falha de um disco, os dados podem ser recuperados
usando o espelhamento. Nesse caso, o percentual de perda é de 50% da capacidade
total, pois metade da capacidade é usada para espelhar os dados.

4.RAID 3: No RAID 3, os dados são distribuídos em vários discos, com um disco


dedicado para armazenar as informações de paridade. O percentual de perda de
capacidade é de aproximadamente 1 / n, onde "n" é o número total de discos no
conjunto. Por exemplo, em um RAID 3 com 4 discos, aproximadamente 25% da
capacidade total é usada para armazenar informações de paridade.

5.RAID 4: No RAID 4, os dados são distribuídos em vários discos, com um disco


dedicado para armazenar as informações de paridade. O percentual de perda de
capacidade é o mesmo que no RAID 3, aproximadamente 1 / n, onde "n" é o número
total de discos no conjunto.

6.RAID 5: No RAID 5, os dados e as informações de paridade são distribuídos em


vários discos. O percentual de perda de capacidade é de aproximadamente 1 / n,
onde "n" é o número total de discos no conjunto. Portanto, em um RAID 5 com 4
discos, aproximadamente 25% da capacidade total é usada para armazenar
informações de paridade.

61
Lembre-se de que esses valores são aproximados e podem variar dependendo de
fatores como tamanho dos discos e configurações específicas do sistema.

61
Conceitos Básicos Banco de
DadosRAID 6
• Duas falhas de disco em um conjunto de RAID gera uma indisponibilidade de
dados e perda de dados em sistema de paridade única, como o RAID-3, 4, e 5
• Aumenta o número de unidades de um array e aumenta a capacidade do disco
para uma maior probabilidade de dois discos falharem em um conjunto de
RAID
• RAID-6 protege contra a falha de dois discos por ter dupla paridade
• Paridade horizontal que é a mesma que a paridade RAID-5
• Paridade diagonal é calculada pelo conjunto de bloco de dados pelo conjunto de
membros RAID
• Par ou ímpar, e Reed-Solomon são dois algoritmos comumente utilizados para
calcular a paridade de RAID-6

RAID 6 (Redundant Array of Independent Disks 6) é um nível de RAID que oferece alta
tolerância a falhas e proteção de dados, mesmo em casos de múltiplas falhas de
disco. Ele é projetado para fornecer uma camada adicional de segurança em
comparação com o RAID 5, ao usar dois discos dedicados para armazenar
informações de paridade.

No RAID 6, os dados são distribuídos em vários discos, assim como as informações de


paridade. A distribuição dos dados e das informações de paridade é organizada de
forma a proporcionar redundância e tolerância a falhas. Com o uso de dois discos de
paridade, o RAID 6 é capaz de tolerar a falha simultânea de até dois discos sem perda
de dados.

Principais usos do RAID 6:

Armazenamento de dados críticos: O RAID 6 é amplamente utilizado em ambientes


que exigem alta segurança e proteção dos dados, como servidores de banco de
dados, sistemas de armazenamento de missão crítica e aplicativos empresariais que
lidam com informações sensíveis.

62
Armazenamento de grande capacidade: Devido à tolerância a falhas aprimorada e à
capacidade de usar discos de maior capacidade, o RAID 6 é uma escolha popular para
sistemas que requerem grande capacidade de armazenamento, como servidores de
arquivos e sistemas de backup.

Vantagens do RAID 6:

Alta tolerância a falhas: O RAID 6 pode suportar a falha simultânea de até dois discos
sem perda de dados. Isso proporciona uma camada adicional de proteção e
segurança, reduzindo o risco de perda de dados.

Recuperação de dados aprimorada: Em caso de falha de um ou dois discos, os dados


podem ser reconstruídos usando as informações de paridade armazenadas nos discos
dedicados. A recuperação dos dados é possível mesmo durante o processo de
reconstrução.

Maior confiabilidade: Com a presença de dois discos de paridade, o RAID 6 oferece


uma maior confiabilidade em comparação com o RAID 5. A probabilidade de falha
múltipla é significativamente reduzida, proporcionando maior tranquilidade ao
usuário.

Desvantagens do RAID 6:

Maior sobrecarga de gravação: Devido ao uso de dois discos para armazenar


informações de paridade, o RAID 6 pode ter um desempenho ligeiramente inferior ao
RAID 5 em termos de gravação. A sobrecarga adicional de gravação é necessária para
calcular e escrever as informações de paridade nos discos dedicados.

Custo de armazenamento: O RAID 6 requer dois discos adicionais para armazenar


informações de paridade, o que aumenta o custo total do sistema em comparação
com configurações RAID que usam menos discos.

Complexidade de configuração: Configurar e gerenciar um conjunto RAID 6 pode ser


mais complexo em comparação com configurações RAID mais simples. Requer
planejamento cuidadoso e conhecimento técnico para garantir a configuração correta
e a recuperação adequada em caso de falha.

Resumindo o RAID 6 é uma escolha ideal para ambientes que exigem alta tolerância a
falhas e proteção avançada de dados. É amplamente utilizado em sistemas de
armazenamento de dados críticos e aplicativos empresariais que necessitam de

62
segurança adicional. Embora o RAID 6 ofereça vantagens significativas em termos de
tolerância a falhas, é importante considerar a sobrecarga de gravação e o custo
adicional de armazenamento ao optar por essa configuração RAID.

62
Conceitos Básicos Banco de
Dados
COMPARATIVO RAIDS
Min %Eficiencia
RAID Custo Performance Leitura Performance Escrita
Discos armazenamento

Muito bom para leitura sequencial ou


Muito boa
0 2 100 Baixo randomica

Boa
Menor que um disco uniico , toda
Boa Melhor do que um unico disco
1 2 50 alto gravação deve ser feita 2 vezes.

(n-1)*100/n Ruim para escritas randomicas e muito


Bom para Leituras Randomicas e muito
onde n= numero de bom para escritas de grande volume
3 3 Moderado bom para leituras sequenciais
discos sequenciais

Mediana pata escrita randomica


(n-1)*100/n
Muito Bom para Leituras Randomicas e Lento para calculo de paridade
onde n= numero de
5 3 Moderado bom para leituras sequenciais Mediana para bom em escrita
discos
sequencial

(n-2)*100/n
Moderado porem Muito Bom para Leituras Randomicas e Bom para pequenas escritas
6 4 onde n= numero de
mais que o RAID 5 bom para leituras sequenciais randomicas
discos

1+0
e 4 50 alto Muito bom Bom
0+1

A escolha do melhor tipo de RAID para bancos de dados depende de vários fatores,
como a importância da disponibilidade dos dados, o desempenho necessário e a
tolerância a falhas desejada. Vou apresentar algumas opções comuns para bancos de
dados:

RAID 10 (RAID 0+1): O RAID 10 é frequentemente considerado uma excelente opção


para bancos de dados. Ele combina as vantagens do RAID 0 (desempenho) e do RAID
1 (tolerância a falhas). Os dados são distribuídos em conjuntos RAID 0, fornecendo
alto desempenho de leitura/gravação. Além disso, eles são espelhados em outro
conjunto RAID 0, proporcionando redundância e alta disponibilidade. O RAID 10 é
ideal para bancos de dados que exigem alto desempenho e proteção de dados
críticos.

RAID 5: O RAID 5 também é uma opção comum para bancos de dados. Ele oferece
um bom equilíbrio entre capacidade, desempenho e tolerância a falhas. Os dados e
as informações de paridade são distribuídos entre os discos, permitindo recuperação
em caso de falha de um disco. No entanto, o RAID 5 pode ter um desempenho
ligeiramente inferior em gravações intensivas, devido à sobrecarga de gravação para

63
calcular as informações de paridade.

RAID 6: O RAID 6 é uma escolha interessante para bancos de dados que exigem alta
tolerância a falhas. Ele oferece proteção adicional em comparação com o RAID 5, pois
usa dois discos de paridade. Isso permite a recuperação de dados mesmo em casos
de falha simultânea de dois discos. No entanto, o RAID 6 pode ter uma sobrecarga de
gravação maior e um custo adicional de armazenamento devido aos discos extras de
paridade.

É importante considerar os requisitos específicos do seu banco de dados, como o


tamanho dos arquivos, a intensidade de leitura/gravação, a importância da
disponibilidade dos dados e o orçamento disponível. Recomenda-se avaliar as
características de cada opção de RAID, bem como as necessidades do seu ambiente,
para tomar a melhor decisão. Em muitos casos, o RAID 10 é considerado a melhor
opção para bancos de dados críticos, devido ao seu alto desempenho e redundância.

QUAL É O MELHOR TIPO DE RAID PARA DATAFILES E LOGFILES DE BANCO DE DADOS:

Quando se trata de acesso aleatório aos datafiles e acesso sequencial aos logfiles, é
importante considerar as características específicas de cada tipo de acesso ao
escolher o tipo de RAID.

Para o acesso aleatório aos datafiles, onde as operações de leitura/gravação são


frequentes e não necessariamente sequenciais, o RAID 10 (RAID 0+1) continua sendo
uma opção recomendada. O RAID 10 oferece alto desempenho de leitura/gravação e
tolerância a falhas, tornando-o adequado para bancos de dados com acesso
aleatório. A combinação de conjuntos RAID 0 para melhorar o desempenho e o
espelhamento RAID 1 para aprimorar a segurança dos dados é vantajosa nesse
cenário.

Já para o acesso sequencial aos logfiles, onde as operações são geralmente


sequenciais, o RAID 5 pode ser uma opção apropriada. Como o acesso aos logfiles
tende a ser sequencial, a sobrecarga de gravação do RAID 5 é mitigada. O RAID 5
oferece uma boa combinação de desempenho e tolerância a falhas, o que pode ser
adequado para as necessidades de acesso sequencial aos logfiles.

No entanto, é importante considerar outros fatores, como o tamanho e a carga de


trabalho do banco de dados, além das necessidades específicas da aplicação. Em
alguns casos, pode ser preferível utilizar o mesmo tipo de RAID (por exemplo, RAID
10) para ambas as situações de acesso, se o desempenho e a segurança dos dados
forem de extrema importância.

63
Em última análise, a escolha do RAID depende da combinação de fatores específicos
do seu ambiente, como a natureza das operações, a carga de trabalho, o tamanho
dos arquivos e os requisitos de disponibilidade e segurança dos dados. Recomenda-se
avaliar esses fatores em conjunto com as características de cada tipo de RAID para
determinar a melhor opção para o seu caso.

63

Você também pode gostar