Вы находитесь на странице: 1из 57

UCG – Administração de Dados/Banco de Dados II

Unidade I – Fundamentos de SGBD

• Sistema de Banco de Dados (SBD)

SBD = Dados (Base de Dados) + Software (SGBD) + Usuários

Usuários

SBD
Transações (programas/queries)

SGBD Gerenciador de Transações


( Transaction Manager - TM )

Gerenciador de Acesso aos Dados (Data


Manager - DM)

Definição Dados
do Armazenados
BD

Metadados Base de Dados

• Gerenciador de Dados
1. Armazenamento de Dados
2. Recuperação de Dados
3. Manutenção de Restrições de Integridade e Segurança

• Gerenciador de Transações
4. Processamento e Otimização de Transações
5. Recuperação de Falhas
6. Controle de Concorrência

• Arquitetura Básica do SGBD


DBA programadores

Comandos Comandos
DDL Privilegiados Programas
de
Aplicação
Usuário
parametrizável

Pré-Compilador

Usuários
eventuais

High-Level Compilador da
Query ling. hospedeira

Compilador Processador
DDL de Consultas

Comandos
DML Transações
compiladas

catálogo
Compilador
DML

Processador
de Acesso

Controle de
Gerenciador Concorrência/
de Dados Backup/
Recuperação

Base de Dados
Armazenada
Módulos Básicos:

1. Gerenciador de Dados: Controla o acesso aos dados da base de dados das


aplicações e do catálogo do sistema utilizando-se para tal dos serviços
providos pelo sistema operacional. Também é responsável pelo
gerenciamento dos buffers de memória;

2. Compilador de DDL: Processa as definições do bd (esquema) e armazena


as mesmas no catálogo (dicionário);

3. Processador de Consultas: Trata as operações ad-hoc; faz o parse e analisa


as operações sintaticamente; ativa o processador de transações

4. Pré-Compilador: Extrai comandos DML dos programas escritos em uma


linguagem de programação hospedeira; separa as chamadas ao bd das
demais operações;

5. Compilador de DML: Gera o código objeto das operações que devem ser
feitas sobre o bd;

6. Processador de acesso (gerenciador de transações): Gerencia a execução


de transações sobre o bd;

• Principais utilitários de um SBD


• Exportador/Importador
• Cópia de Segurança
• Monitor de desempenho
• Geradores de relatório
• Software de comunicação

• Classificação dos SGBDs


• Critério 1: modelo de Dados
• Critério 2: número de usuários
• Critério 3: número de pontos em que o SBD está contido
• Critério 4: custo
• Critério 5: tipo de utilização

• Projeto de Banco de Dados


1. Projeto Conceitual
2. Projeto Lógico
3. Projeto Físico

• Administrador de Banco de Dados


UCG - Administração de Dados/Banco de Dados II
Unidade II – Funcionalidades do SGBD

1. Integridade e Segurança

Restrições de Integridade

• São as regras que devem ser obedecidas pelos dados para que eles
sejam considerados íntegros, consistentes.

• As restrições de integridade refletem as regras do negócio que está


sendo modelado

• Um estado consistente do banco de dados obedece a todas as


restrições de integridade definidas

• Classificação das Restrições de Integridade

Quanto a natureza das restrições:


1. Intrínsecas: são as restrições de integridade definidas pelo
modelo de dados utilizado, independentemente da aplicação que está
sendo modelada

Exemplos:
1) Atributos atômicos no modelo relacional que exige primeira
forma normal;
2) Pelo menos duas entidades ligadas em uma instância de
relacionamento no MER;

2. Implícitas: são as restrições relacionadas com a aplicação que


podem ser representadas diretamente pelo modelo de dados utilizado
e que uma vez representadas no esquema do banco de dados faz
com que o SGBD automaticamente garanta a obediência a essas
restrições

Exemplos:
1) Cardinalidade mínima e máxima no MER;
2) Restrições de integridade referencial no modelo relacional;

3. Explícitas: são as restrições relacionadas com a aplicação que


não podem ser representadas diretamente pelo modelo de dados
utilizado garantindo assim a obediência automática a essas regras.
Para que as restrições de integridade desse tipo sejam garantidas é
necessário a construção de código explícito em uma das seguintes
formas:
Programas de aplicação
Procedimentos armazenados
Gatilhos
Asserções
Quanto a amplitude de aplicação das restrições:
1. Estáticas: são as restrições de integridade que se aplicam em
cada estado individual do bd

Exemplos:
1) Restrições de Domínio;
2) Restrições de cardinalidade de relacionamentos;

2. Dinâmicas: são as restrições de integridade que não se aplicam à


um estado específico do bd mas sim à transição de estados do bd.
As restrições de integridade dinâmicas normalmente são explícitas.

Exemplos:
1) O salário de um empregado não pode ser diminuído;
2) Um produto não pode ser excluído se a sua quantidade em
estoque for maior que zero;

Restrições de Segurança

• São as regras que devem ser obedecidas para garantir acessos legais
e evitar acessos ilegais

• As restrições de segurança são geralmente definidas pelo


Administrador de Banco de Dados que fica responsável pela criação
de usuários/contas e privilégios, pela autorização e revogação de
privilégios e pela auditoria e monitoração do uso do SBD pelos
usuários

• Privilégios
Privilégios de Sistema (ou de conta)
Privilégios de Objetos

• Autorização de Privilégios em SQL: GRANT


Sem Propagação/Com Propagação

• Revogação de Privilégios em SQL: REVOKE

• Visões
Criptografia

• Forma utilizada para proteger dados altamente sigilosos/vitais através


de uma codificação dos mesmos

• Técnicas de criptografia devem ter as seguintes propriedades:

1. Um usuário autorizado deve ter uma maneira simples de


codificar/decodificar os dados;

2. O esquema de criptografia não depende do segredo do


algoritmo mas de um parâmetro chamado chave
criptográfica;

3. É extremamente difícil para um intruso determinar a chave


criptográfica

Bancos de Dados Estatísticos

• Usados para prestar informações estatísticas preservando


informações individuais privativas e confidenciais

• Problema: um usuário “esperto” pode deduzir resultados


individualizados a partir de consultas aos dados estatísticos

• Técnicas para evitar dedução:

1. Proibir consultas que retornem poucos registros


2. Proibir consultas que se referem repetidamente à mesma
população
3. Introduzir no resultado das consultas estatísticas dados não
precisos, espécies de ruídos, que tornem a dedução mais
difícil
UCG - Administração de Dados/Banco de Dados II

Unidade II – Funcionalidades do SGBD

2. Armazenamento de Dados
O objetivo da função de gerenciamento do armazenamento dos dados é
garantir a persistência dos mesmos

⇒ Meios de Armazenamento

∗ Primário: memória cache, memória RAM

∗ Secundário: discos magnéticos, memória flash

∗ Terciário: fitas, cd-rom etc.

⇒ Buffer: área contígua da memória principal que pode armazenar 1


bloco do disco; a unidade de transferência do disco é o bloco

Memória Primária Memória Secundária


código objeto do
sistema

área de trabalho
local das transações

read
write
input
blocos de dados
(BUFFERS)
output

⇒ Projeto Físico: escolha da melhor alternativa para organizar


fisicamente os dados
Organização de Arquivos

⇒ Registros com tamanho fixo

Exemplo:

type Depósito = record


Nome-agencia : char(20);
Número-conta : integer;
Nome-cliente : char(20);
Valor : real;
end;

Registro 0 Perrydge 102 Hayes 400


Registro 1 Round-Hill 305 Turner 350
Registro 2 Mianus 215 Smith 700
Registro 3 Downtown 101 Johnson 500
Registro 4 Redwood 222 Lindsay 700
Registro 5 Perrydge 201 Williams 900
Registro 6 Brighton 217 Green 750
Registro 7 Downtown 110 Peterson 600
Registro 8 Perrydge 218 Lyle 700

Header
Registro 0 Perrydge 102 Hayes 400
Registro 1
Registro 2 Mianus 215 Smith 700
Registro 3 Downtown 101 Johnson 500
Registro 4
Registro 5 Perrydge 201 Williams 900
Registro 6
Registro 7 Downtown 110 Peterson 600
Registro 8 Perrydge 218 Lyle 700

Características:
• simplicidade de implementação
• implementação de pouca utilização prática
• uso de header para manter controle sobre blocos disponíveis
e blocos usados: header aponta para primeiro bloco livre do
disco alocado para o arquivo e esse bloco aponta para o
próximo e assim sucessivamente ( o mesmo raciocínio vale
para blocos ocupados)
⇒ Registros com tamanho variável
• aparece devido a existência de: campos com tamanho variável, grupos
repetitivos, campos opcionais e tipos de registros diferentes

Exemplo:
type Contas_agência = record
Nome-agencia : char(20);
Info_conta : array [1,∞] of
record
Número-conta : integer;
Nome-cliente : char(20);
Valor : real;
end;
end;

• implementação

1. cadeia de bytes inclusão de marca (símbolo especial) indicando fim


de registro

Reg 0 Perrydge 102 Hayes 400 201 Williams 900 218 Lyle 700 ⊥
Reg 1 Round-Hill 305 Turner 350 ⊥
Reg 2 Mianus 215 Smith 700 ⊥
Reg 3 Downtown 101 Johnson 500 110 Peterson 600 ⊥
Reg 4 Redwood 222 Lindsay 700 ⊥
Reg 5 Brighton 217 Green 750 ⊥

2. representação de tamanho fixo usando espaço reservado

Reg 0 Perrydge 102 Hayes 400 201 Williams 900 218 Lyle 700 ⊥
Reg 1 Round-Hill 305 Turner 350 ⊥ ⊥ ⊥ ⊥ ⊥ ⊥ ⊥
Reg 2 Mianus 215 Smith 700 ⊥ ⊥ ⊥ ⊥ ⊥ ⊥ ⊥
Reg 3 Downtown 101 Johnson 500 110 Peterson 600 ⊥ ⊥ ⊥ ⊥
Reg 4 Redwood 222 Lindsay 700 ⊥ ⊥ ⊥ ⊥ ⊥ ⊥ ⊥
Reg 5 Brighton 217 Green 750 ⊥ ⊥ ⊥ ⊥ ⊥ ⊥ ⊥

3. representação de tamanho fixo usando pointers

Reg 0 Perrydge 102 Hayes 400


Reg 1 Round Hill 305 Turner 350
Reg 2 Mianus 215 Smith 700
Reg 3 Downtown 101 Johnson 500
Reg 4 Redwood 222 Lindsay 700
Reg 5 201 Williams 900
Reg 6 Brighton 217 Green 750
Reg 7 110 Peterson 600
Reg 8 218 Lyle 700
⇒ Blocagem de arquivos
Bloco 0 Perrydge
102 Hayes 400
201 Williams 900
218 Lyle 700
235 Simpson

Bloco 1
313 Flintstone 5654
315 Clinton 456
329 Burns 235
400 Stone 378

Bloco 2 Round Hill


305 Turner 400
385 Douglas 435
438 Taylor 255
604 Capeshaw 563

Bloco 3
555 Porter 788

Bloco 4
887 Wayne 345
903 Ford 325

Bloco 5 Mianus
215 Smith 700
333 Clayton 263
476 Pinkleton 5654



• fator de bloco: bfr = B/R


• spanned file
• unspanned file

⇒ Alocação de blocos em disco


1 Alocação contígua:
dados alocados em blocos contíguos do disco

Vantagem: leitura + rápida


Desvantagem: expansão mais complexa

2 Alocação encadeada:
bloco contém um ponteiro para outro bloco

Vantagem: expansão mais simples


Desvantagem: leitura + lenta

3 Alocação clusterizada:
conjunto de blocos contíguos (cluster) apontando para o próximo
cluster; combinação das técnicas anteriores

4 Alocação indexada:
blocos de índices apontando para blocos de dados

Vantagem: acesso randômico


Desvantagem: reorganização de indíces; maior
ocupação de espaço;

⇒ Descritor de Arquivo (header)

contém informações sobre o arquivo que são usadas pelos programas


que acessam esse arquivo:

1. endereços físicos dos dados


2. formato dos registros
• tamanho dos campos p/ registro fixo
• ordem dos campos
• tipos dos campos
• caracteres separadores p/ registro variável
• tipo do registro

⇒ Implementação de dados relacionais em arquivos


• Alternativas Básicas
Um arquivo para cada relação
Um arquivo para todas as relações
Um arquivo para várias relações
Cluster de relações
Não vincular relações e arquivos

⇒ Armazenamento de dados no Catálogo


⇒ Registros não ordenados (Heap File)

• novas inserções são colocadas no final do arquivo


• inserção muito rápida
• recuperação muito lenta pois exige busca linear acessando em média metade dos blocos de
um arquivo
• remoção muito lenta e causa desperdício de espaço (buracos) exigindo reorganização
• recuperação ordenada de alto custo pois exige sort interno ou externo

• Arquivos Relativos: não ordenados, com registro de tamanho fixo e com alocação
contígua nos blocos

⇒ Registros ordenados

• registros ordenados logicamente ou fisicamente de acordo com os valores de um conjunto


não vazio de campos do registro chamado de campo(s) de ordenação.
• campo de ordenação pode ser chave de ordenação se identificar univocamente os registros
• recuperação de dados pode usar busca binária
• recuperação ordenada pela chave é mais rápida
• inserção e remoção mais complexas devido à necessidade de manter ordenação

• Implementação

• alocação contígua de blocos


• uso de ponteiros
• uso de áreas de overflow

Bufferização e Gerenciamento de Buffer

⇒ Buffer: área contígua da memória principal que pode armazenar 1


bloco do disco; a unidade de transferência do disco é o bloco

⇒ Double Buffering: técnica que permite otimizar o uso dos buffers:


enquanto um bloco do buffer está sendo processado outro bloco
está sendo transferido para a memória

⇒ Gerenciamento de Buffer: Gerencia alocação e ocupação do buffer

A. Técnicas Utilizadas por Gerenciador de Memória Virtual Típico


⇒ Estratégia de Substituição: LRU

B. Técnicas Utilizadas por Gerenciador de Buffer do SGBD


⇒ Estratégia de Substituição: LRU, MRU
⇒ Blocos Presos
⇒ Saídas Forçadas de blocos
Operações em Arquivos

1 Recuperação de Dados
2 Atualização de Dados: inserção, alteração e exclusão

• Operações Primárias (Primitivas)

1. FIND
Busca o bloco que contém o1º registro que satisfaz o critério de
seleção e coloca-o no buffer

2. READ
copia o registro corrente do buffer para a área de trabalho do
programa

3. FIND NEXT
procura o próximo registro que satisfaz o critério de seleção e
transfere o(s) bloco(s) em que ele está contido para o buffer

4. DELETE
apaga um registro no arquivo

5. MODIFY
modifica o(s) valores de um ou mais campos do registro de buffer e
eventualmente atualiza o arquivo no disco

6. INSERT
localiza o bloco que deve receber o registro e o transfere para a
memória; inclui registro e transfere o bloco alterado para a menória
secundária

7. FIND ALL
encontra todos os registros que satisfazem o critério de seleção

8. FIND ORDERED
retorna os registros em uma ordem determinada

9. REORGANIZE
reorganizar os registros no arquivo; ex: desfragmentar

Organização de Arquivo X Método de Acesso

Maneira em que o arquivo Grupo de programas que executa


está organizado em termos operações sobre arquivos.
de registros, blocos e Exemplo: ISAM,VSAM
estruturas de acesso
Indexação

1. Motivação: Necessidade de pesquisar um pequeno subconjunto dos


registros de um arquivo que atendam a um determinada condição

2. Argumento de pesquisa (chave de busca): conjunto de atributos que


são usados para selecionar os registros a serem recuperados

3. Fatores importantes na escolha de uma técnica de indexação

3.1. Tempo de Acesso: tempo para encontrar o dado

3.2. Tempo de Inserção: tempo gasto para incluir o dado, incluindo o


tempo para localizar o local de inserção e o tempo para
reorganizar a estrutura do índice

3.3. Tempo de remoção: tempo gasto para remover o dado, incluindo


o tempo para localizar o local de inserção e o tempo para
reorganizar a estrutura do índice

3.4. Espaço adicional usado pela estrutura de índice


4. Tipos de índice

4.1. Critério 1: número de entradas de índice por valor distinto do


argumento de pesquisa

4.1.1. Índice Denso: uma entrada (registro) no índice para cada valor
distinto do argumento de pesquisa

Brighton Brighton 217 Green 750


Dowtown Downtown 101 Johnson 500
Mianus Downtown 110 Peterson 600
Perrydge Mianus 215 Smith 700
Redwood Perrydge 102 Hayes 400
Round-Hill Perrydge 201 Williams 900
Perrydge 218 Lyle 700
Redwood 222 Lindsay 700
Round-Hill 305 Turner 350

4.1.2. Índice Esparso: não apresenta uma entrada (registro) no


índice para cada valor distinto do argumento de pesquisa

Brighton Brighton 217 Green 750


Downtown 101 Johnson 500
Mianus Downtown 110 Peterson 600
Mianus 215 Smith 700
Redwood Perrydge 102 Hayes 400
Perrydge 201 Williams 900
Perrydge 218 Lyle 700
Redwood 222 Lindsay 700
Round-Hill 305 Turner 350
4.2. Critério 2: tipo do argumento de pesquisa

4.2.1. Índice Primário: o argumento de pesquisa é o conjunto de


atributos que determina a ordenação lógica
seqüencial dos registros no arquivo

a) Índice Primário simples (argumento = chave primária:


define ordenação e unicidade)

1 Regina Ferreira 1000 3


2 Carolina Carvalho 2000 1

10 José Moreira 1000 1

1 11 Juliano Álvarez 3000 2


11 12 Pedro Silva 2500 2

191 20 Maria Sales 2000 4

1001 1001 Vânia Teixeira 1500 5


1011 1002 Cláudio Soares 1000 3

1010 Felipe Pinheiro 2000 4

1011 João Gomes 3000 5


1012 Manoel Temer 2000 1
b) Índice Primário cluster (argumento = chave cluster:
define apenas ordenação)

2 Carolina Carvalho 2000 1

10 José Moreira 1000 1


1
1
1
1012 Manoel Temer 2000 1
2
1

1001 Vânia Teixeira 1500 5


1002 Cláudio Soares 1000 5
4.2.2. Índice Secundário: argumento de pesquisa não define ordenação e
pode ou não definir unicidade

a) definindo unicidade

1
2
3 9 Adriana
4 5 André
5 13 Antônio
6 8 Bruno
7
8 6 Carlos
15 Cláudia
3 Dario
17 Denise

21 Eliane
9 11 Fábio
10 16 Gilda
11 2 Juliano
12
13 24 Marcela
14 10 Maria Clara
15 20 Maria Tereza
16 1 Mauro

4 Milton
23 Murilo
18 Nadir
14 Nair
17
18 12 Urbano
19 7 Vani
20 19 Vania
21 22 Zilda
22
23
24
b) não definindo unicidade

3 Adriana
5 André
1 Antônio
6 Bruno

2 Carlos
3 Cláudia
4 Dario
8 Denise

6 Eliane
1 8 Fábio
2 4 Gilda
3 1 Juliano
4
5 6 Marcela
6 5 Maria Clara
7 2 Maria Tereza
8 5 Mauro

5 Milton
1 Murilo
6 Nadir
3 Nair

6 Urbano
3 Vani
8 Vania
3 Zilda
5. Índice com Múltiplos Níveis
2
2 5
8
15 8
24 12

15
21

24
29

35 35
39 36
44
51 39
41
2
35 44
55 46
85
51
55 52
63
71 55
80 58

63
66

71
78

85 80
82

85
89
Hashing

Conceito e definição
É uma técnica de armazenar e recuperar os dados em um arquivo que
utiliza uma função matemática para, a partir do valor de um conjunto
de atributos do arquivo (hash key), calcular diretamente o endereço
físico em que o dado está armazenado.

Formalmente H: K→E onde:


K é o conjunto de valores possíveis para a hash key e
E é o espaço de endereçamento para um item de dado

Exemplo 1: Arquivo de clientes onde:


K é o nome do cliente e
E são 26 buckets de blocos de endereçamento e
H é uma função que mapeia nomes iniciando com a i-ésima letra
do alfabeto para o i-ésimo bucket

Bucket 1 Adriana 10 Adriana


Alexandre 3 Maria
Antônio 100 Márcia
50 Silvia

Bucket 2 Bruno 35 Alexandre


5 Mauricio
17 Antônio
6 Bruno

Bucket 3 Carlos 2 Carlos


Cláudia 30 Cláudia
40 Felipe
8 Plínio

67 Eliane
Bucket 13 Maria 84 Maria
Márcia 42 Gilda
Maria 13 Maria

64 Marcela
53 Maria Clara
Bucket 26 Zilma 28 Ronaldo
57 Zilma
Exemplo 2: Arquivo de clientes onde:
K é o nome da agência;
E são 10 buckets de blocos de endereçamento;
H é uma função do tipo n mod m onde n é a soma das
representações binárias dos caracteres de uma chave e m é o
número de buckets alocados

Bucket 0

Bucket 1

Bucket 2

Brighton
Round Hill

Bucket 4 Redwood Brighton 217 Green 750


Downtown 101 Johnson 500
Downtown 110 Peterson 600
Mianus 215 Smith 700
Perrydge 102 Hayes 400
Bucket 5 Perrydge Perrydge 201 Williams 900
Perrydge Perrydge 218 Lyle 700
Perrydge Redwood 222 Lindsay 700
Round Hill 305 Turner 350

Bucket 6

Bucket 7 Mianus

Bucket 8 Downtown

Bucket 9
Características
a) Evita percorrer uma estrutura de índice na recuperação de registro

b) Endereço de registro é calculado usando uma função que usa como


argumento o valor de um campo do registro

c) Possibilidade de Colisões

d) Possibilidade de deixar espaços desocupados no arquivo

Escolha de função hashing

Uma função hashing ideal deveria Ter as seguintes características:

1) distribuir uniformente os registros no espaço de endereçamento


2) minimizar as colisões

Tratamento de Colisões

a) Endereçamento Aberto: encontrar e ocupar o próximo endereço vago

b) Encadeamento: uso de registros de overflow (lista encadeada)

c) Hashing Múltiplo: uso de uma segunda função hashing

Tipos de Endereçamento

a) Hashing Aberto: a função hashing calcula o endereço de um bucket de


endereçamento que aponta para o endereço que contém o dado desejado

b) Hashing Fechado: a função hashing calcula diretamente o endereço do


bloco de um bucket de dados que contém o dado desejado. Essa técnica
permite um endereçamento mais direto porém exige uma sobrecarga de
trabalho no caso de remoção de dados.

c) Hashing Estático: uma função hashing pré-definida mapeia um


número pré-definido de buckets, isto é, o espaço de endereçamento é
fixo. A utilização de hashing estático pode ocasionar alguns problemas
relacionados com o crescimento do arquivo de dados: degradação de
desempenho, desperdício de espaço e necessidades de reorganizar a
estrutura de hashing.

d) Hashing Dinâmico: a função hashing é modificada dinamicamente


para acompanhar o crescimento/encolhimento do arquivo.
Exemplo de técnica de Hashing Dinâmico: Hashing Extensível

Características do hashing extensível:


• Os buckets de dados são divididos e agrupados à medida
que o banco de dados cresce e encolhe;
• A reorganização de buckets é feita em um bucket de cada
vez;
• A função hashing deve Ter propriedades desejáveis de
uniformidade e aleatoriedade
• A função hashing deve gerar um conjunto de valores de
endereços bastante grande, por exemplo inteiros binários de
b bits (assim se b=32 bits então o espaço de endereçamento
é de 232 buckets).
• O espaço de endereçamento não é utilizado de uma vez. Os
buckets de endereçamento são criados sob demanda, `a
medida que os registros vão sendo inseridos no arquivo.
Usa-se i bits, 0 ≤ i ≤ b para se endereçar uma tabela de
endereços de buckets de endços, sendo que i cresce ou
diminui dinamicamente.

2( i-ij ) i1

prefixo de hashing
i
00 i2
01
10
11
Tabela de endereços
de buckets i3

nome_agência h(nome_agencia)
Brighton 0010 1101 1111 1011 0010 1100 0011 0000
Clearview 1101 0101 1101 1110 0100 0110 1001 0011
Downtown 1010 0011 1010 0000 1100 0110 1001 1111
Mianus 1000 0111 1110 1101 1011 1111 0011 1010
Perrydge 1111 0001 0010 0100 1001 0011 0110 1101
Redwood 1011 0101 1010 0110 1100 1001 1110 1011
Round Hill 0101 1000 0011 1111 1001 1100 0000 0001

(Perrydge, 102, Hayes, 400)


(Round Hill, 305, Turner, 350)
(Downtown, 101, Johnson, 500)
(Redwood, 222, Lindsay,700)
prefixo de hashing 0
0
0

prefixo de hashing
0
0 0
Perrydge,102...
Round Hill,305...

prefixo de hashing
1
0 1
1 Round Hill, 305...

1
Perrydge,102...
Downtown,101...

1
Round Hill,305...

prefixo de hashing
2
00 2
01 Downtown,101...
10 Redwood,222...
11
2
Perrydge,102...

1
Round Hill,305...
Brighton,217...
prefixo de hashing
3
000 3
001 Mianus,215...
010
011
100 3
101 Downtown,101...
110 Redwood,222...
111
3
Perrydge,102...
Clearview,117...
Indexação X Hashing

a) Indexação

Vantagens
• mais flexível
• melhor desempenho para determinadas consultas (ex: consulta
ordenada)
• melhor aproveitamento de espaço

Desvantagens
• mais lenta na recuperação (considerando apenas a hash-key)
• reorganizações podem ser mais frequentes

b) Hashing

Vantagens
• mais rápida na recuperação pela hash-key

Desvantagens
• mais lenta na recuperação (considerando outros tipos de
recuperação)
• espaço de endereçamento geralmente é fixo
• alteração de hash-key pode exigir remoção e inserção

Critérios de escolha entre indexação e hashing

• Custo de Reorganização
• Freqüência de inserção e remoção de registros
• Otimização de tempo médio de acesso ou otimização de tempo de
acesso no pior caso
• Tipos de Consulta esperadas
UCG - Administração de Dados/Banco de Dados II
Unidade II – Funcionalidades do SGBD

3. PROCESSAMENTO E OTIMIZAÇÃO DE CONSULTAS


Motivação
• Estrutura do BD é pouco flexível e
• Operações sobre o BD são variadas e
• Existem diversas maneiras de se executar uma transação

Otimização de Consulta: processo de escolha de um alternativa


adequada de uma estratégia de execução de uma transação

• Estratégia de execução define um plano de acesso aos dados e de


armazenamento de resultados intermediários
• Tarefa pode envolver o usuário que construiu a transação e/ou o
SGBD
• Esquema geral:

Consulta em linguagem de alto nível

PARSE

Forma intermediária

OTIMIZADOR

Plano de Execução

Gerador de Código
Executável

Código Executável

Processador de
Transações

Resultado

Tipos de Otimização:
• Baseada em Regras Heurísticas (Otimização por Regras)
Regras Pré-definidas para escolha de plano de acesso
Mudança na ordem de execução de operações baseada na
equivalência de expressões da álgebra relacional
• Baseada em Estimativas sistemáticas de custos (Otimização por
Custos)
Comparação de custo entre várias estratégias de execução
Escolha de estratégia de menor custo
• Combinação das anteriores

A. Otimização por Regras

A1) Principais regras de equivalência de operações de Álgebra


Relacional

2. Cascateamento de seleção
σc1 AND σc2 AND ... AND σcn (R) ≡ σc1 (σc2 ... (σcn (R))
3. Comutatividade de seleção
σc1 (σc2 (R)) ≡ σc2 (σc1 (R))
4. Cascateamento de projeção
πlista1 (πlista2 (...(πlista1 (R))...)) ≡ πlista1 (R)
5. Permuta de seleção por Projeção
πA1,A2,...,An (σc (R)) ≡ σc (πA1,A2,...,An(R))
desde que a condição c envolva apenas atributos em A1,...,An

6. Comutatividade de Junção (ou de Produto Cartesiano)


R|X|cS ≡ S|X|cR
7. Permuta de seleção por junção (ou por produto cartesiano)
σc (R|X|S) ≡ (σc (R))|X|S) Se c ∈ R e c ∉ S

8. Permuta de projeção por Junção


πL (R|X|cS) ≡ (πA1,A2,...,An (R)) |X|c(πB1,B2,...,Bn (S))
Se L=A1,...,An,B1,...,Bn e c só envolve apenas atributos de L
A2) Principais regras de conversão de forma intermediária

Executar operações de seleção tão cedo quanto possível


Expressão 1:
πagencia_nome,ativos(σcliente_cidade=”Goiânia”(Cliente |X| Deposito |X| Agencia))

Expressão 2:
πagencia_nome,ativos ((σcliente_cidade=”Goiânia”(Cliente)) |X| Deposito |X| Agencia)

Substituir expressões da forma σc1 Λ c2 (E) por σc1 (σc 2 (E))


Expressão 1:
πagencia_nome,ativos(σcliente_cidade=”Goiânia” Λ saldo >1000(Cliente |X| Deposito) |X|
Agencia)

Expressão 2:
πagencia_nome,ativos (σcliente_cidade=”Goiânia”(σsaldo>1000”(Cliente) |X| Deposito) |X|
Agencia)

Executar operações de projeção tão cedo quanto possível


Expressão 1:
πagencia_nome,ativos(σcliente_cidade=”Goiânia”(Cliente) |X| Deposito |X| Agencia)

Expressão 2:
πagencia_nome,ativos((πagencia_nome(σcliente_cidade=”Goiânia” (Cliente)) |X| Deposito |X|
πagencia_nome,ativos (Agencia)))

Trocar a ordem de operações de junção

Expressão 1:
πagencia_nome,ativos(σcliente_cidade=”Goiânia”(Cliente) |X| Deposito |X| Agencia)

Expressão 2:
πagencia_nome,ativos(σcliente_cidade=”Goiânia”(Cliente) |X| Agencia |X| Deposito)

Expressão 3:
πagencia_nome,ativos(σcliente_cidade=”Goiânia”(Cliente) |X| (Deposito |X| Agencia))
A3) Rotinas de acesso para operação de seleção

Seleção baseada em um único critério de busca (seleção simples):

1. Pesquisa Linear
2. Pesquisa Binária
3. Uso de índice primário ou hashing para recuperar um registro
4. Uso de índice primário para recuperar vários registros
5. Uso de índice cluster para recuperar vários registros
6. Uso de índice secundário

Seleção baseada em + de um critério de busca (seleção conjuntiva):

7. Seleção conjuntiva usando um dos métodos anteriores de 1 a 6


8. Seleção conjuntiva usando índice composto
9. Seleção conjuntiva usando intersecção de ponteiros

A4) Rotinas de acesso para operação de Junção

1. Laços aninhados
2. Uso de índice
3. Junção por intercalação (Merge-Join)
4. Uso de hashing (Hash-Join)

A5) Algumas Regras Heurísticas para escolha de rotinas de acesso

1. Usar índice ou hashing para seleção sempre que possível


2. Usar junção por intercalação sempre que possível
3. Ao utilizar junção por laços aninhados colocar no laço externo a
tabela com menor número de blocos
4. Usar índice cluster na junção sempre que possível
B. Otimização por Custo

• Estimativa e comparação de execução de diferentes estratégias e


escolha daquela que tiver menor custo

• Premissas:
⇒ Análise de um número limitado de estratrégias
⇒ Uso de informações estatísticas (estimativas)
⇒ Mais adequada para query compiladas

B1) Composição de Custos de uma consulta

• Custo de acesso à memória secundária


• Custo de armazenamento de resultados intermediários
• Custo de computação (processamento) em memória
• Custo de comunicação em rede

B2) Informações usadas para cálculo de custos

• Tamanho do arquivo:
⇒ número de registros (nr )
⇒ número de blocos (nb)
⇒ fator de bloco (f b)
⇒ tamanho de registro (s r)

• Organização do arquivo:
⇒ ordenado ou não ordenado
⇒ disponibilidade de índice
⇒ arquivo com hashing

• Dados de índice disponíveis


⇒ tipo: primário,secundário,clustering
⇒ número de níveis do índice: (x)

• Nº de valores distintos de um atributo A em uma relação r: V(A,r)

• Seletividade de um atributo A em uma relação r: s=(nr / V(A,r))


B1) Funções de custo para operação de seleção

1. Pesquisa Linear:
C= nb (se campo de pesquisa não define unicidade) ou
C= nb/2 (se campo de pesquisa define unicidade)

2. Pesquisa Binária

C= log2 nb + (s/ f b) - 1

3. Uso de índice primário ou hashing para recuperar um


registro

C= x + 1 (p/ índice) ou C=1 (p/hashing)

4. Uso de índice primário para recuperar vários registros

C= x + nb/2 (p/ operações de desigualdade)

5. Uso de índice cluster para recuperar vários registros

C= x + (s/ f b)

6. Uso de índice secundário

C= x + s (p/ atributos que não definem unicidade) ou


C= x + 1 (p/ atributos que definem unicidade)
B2) Funções de custo para operação de Junção (R |X| S)

1. Laços aninhados

C= nbr + (nbr * nbs) + ((|R |X| S|) / f b)

onde fb é o fator de bloco do arquivo resultante


(assumindo dois buffers de memória)

2. Uso de índice (R|X|S)


R.A=S.B

C= nbr + (|R| * (XS.B + S S.B)) + ((|R |X| S|) / f bRes)


(para índice secundário)

C= nbr + (|R| * (XS.B + (S S.B/ f bS)) + ((|R |X| S|) / f bRes)


(para índice clustering)

C= nbr + (|R| * (XS.B + 1)) + ((|R |X| S|) / f bRes)


(para índice primário)

3. Junção por intercalação (Merge-Join)

C1= nbr + nbs + ((|R |X| S|) / f bRes)


(para arquivos classificados)

C2= K * ((nbr * log2 nbr)+ (nbs * log2 nbs)) + C1


(para arquivos não classificados)

4. Uso de hashing

C= nbr + (|R| * h)) + ((|R |X| S|) / f bRes)


(para hashing; h é uma constante)
Exemplos:

1) Dados:
Relação: Empregados(mat, nome, depto, ....)

Operação 1: SELECT *
FROM Empregados
WHERE mat = 10

Operação 2: SELECT *
FROM Empregados
WHERE depto > 5

Estatísticas:

⇒ Nr = 10000
⇒ Nb = 2000
⇒ índice primário sobre atributo mat
⇒ número de níveis do índice sobre mat: xmat = 4
⇒ índice secundário sobre atributo depto
⇒ número de níveis do índice sobre depto: xdepto = 2 com 4
blocos no nível 1 (folhas da árvore-B)
⇒ valores distintos de depto: 125
⇒ seletividade de depto: sdepto = 10000/125 = 80

Opções:

Operação 1:
a) pesquisa linear: C = nb/2 = 2000/2 = 1000

b) pesquisa binária:
C = log2 nb + (smat/ fb) - 1 = log2 2000 + (1/ 50) - 1

c) pesquisa por índice mat: C= xmat + 1 = 5

Operação 2:
a) pesquisa linear: C = nb = 2000

b) pesquisa por índice depto:


C = xdepto + sdepto = 2 + (10000/2) + (4/2) = 5004

obs: supondo que o número de registros de


empregado com depto > 5 seja metade do total
Exemplos:

2) Dados:
Relação: Empregados(mat, nome, depto, ....)
Departamentos(dnum,dnome,gerente,...)

Operação 1: SELECT nome,dnome


FROM Empregados
WHERE depto = dnum

Operação 2: SELECT nome,dnome


FROM Empregados
WHERE gerente = mat

Estatísticas:

⇒ Nrd = 125; Nre = 10000


⇒ Nbd = 13; Nbe = 2000;
⇒ índice primário sobre atributo dnum
⇒ número de níveis do índice sobre dnum: xdnum = 1
⇒ índice primário sobre atributo mat
⇒ número de níveis do índice sobre mat: xmat = 4
⇒ índice secundário sobre atributo gerente
⇒ número de níveis do índice sobre gerente: xgerente = 2
⇒ valores distintos de gerente: 125
⇒ seletividade de gerente: sgerente = 1
⇒ índice secundário sobre atributo depto
⇒ número de níveis do índice sobre depto: xdepto = 2 com 4
blocos no nível 1 (folhas da árvore-B)
⇒ valores distintos de depto: 125
⇒ seletividade de depto: sdepto = 10000/125 = 80
⇒ fator de bloco para resultado da junção: f bRes= 4
⇒ Buffer com capacidade para dois blocos
Opções:

Operação 1:

a) laços aninhados: C = nbr + (nbr * nbs) + ((|R |X| S|) / f bres)


C = nbe + (nbe * nbd ) + (nre / f bRes)
C = 2000 + (2000 * 13) + (10000/4)
C = 30.500
b) laços aninhados: C = nbs + (nbs * nbr) + ((|R |X| S|) / f bres)
C = nbd + (nbd * nbe ) + (nre / f bRes)
C = 13 + (2000 * 13) + (10000/4)
C = 28513
c) uso de índice dnum:
C= nbr + (|R| * (Xs.b + 1)) + ((|R |X| S|) / f bRes)
C = nbe + (nre * (Xdnum + 1) + (nre / f bRes)
C = 2000 + (10000 * 2) + (10000/4)
C = 24500
d) uso de índice depto:
C= nbr + (|R| * (Xs.b + S s.b)) + ((|R |X| S|) / f bRes)
C = nbd + (nrd * (Xdepto + S depto) + (nre / f bRes)
C = 13 + (125 * (2 + 80)) + (10000/4)
C = 12763

Operação 2:
a) laços aninhados: idem operação 1
b) uso de índice gerente:
C= nbr + (|R| * (Xs.b + 1)) + ((|R |X| S|) / f bRes)
C = nbe + (nre * (Xgerente + 1) + (nre / f bRes)
C = 2000 + (10000 * 3) + (125/4)
C = 34500
c) uso de índice mat:
C= nbr + (|R| * (Xs.b + 1)) + ((|R |X| S|) / f bRes)
C = nbd + (nrd * (Xmat+ 1) + (nre / f bRes)
C = 13 + (125 * 5) + (125/4)
C = 670
UCG – Banco de Dados II
Unidade II – Funcionalidades do SGBD

4. Gerenciamento de Transações
Transação
• Unidade de Trabalho em um SBD; É uma seqüência de operações
que realizam uma operação atômica sobre o SBD

• Estrutura
BEGIN TRANSACTION (cabeçalho)
CORPO DA TRANSAÇÃO (operações)
COMMIT/ROLLBACK
END TRANSACATION (rodapé)

• Programa ≠ Transação

• Funcionamento Básico da Transação


1. Aceitar Mensagem de Entrada
2. Efetuar Processamento no BD
3. Enviar Mensagem(ns) de Saída

• Operações Básicas
1. Input(X)
2. Read(X,xi) I/O
3. Write(X, xi)
4. Output(X)
5. Atribuição
6. Desvios
7. Condição
8. Repetição

• Propriedades Necessárias da Transação (ACID)


1. Atomicidade: os efeitos de uma transação devem ser
atômicos

2. Consistência: os efeitos de uma transação devem


preservar a consistência do BD

3. Isolabilidade: os efeitos de uma transação que ocorre


concorrentemente com outras transações
devem ser equivalentes aos efeitos da
transação ocorrendo isoladamente

4. Durabilidade: os efeitos de uma transação devem ser


duráveis (persistentes)
4.1 Recuperação de Falhas

• Fato: Sistemas de Computação Falham

• Tipos de Falha:
1. Falhas causadas por erros lógicos na transação
Ex: Divisão por zero, overflow etc

2. Falhas causadas por erros lógicos de sistema


Ex: Deadlock de transações

3. Falhas causadas por interrupção do funcionamento do sistema


Ex: Queda de energia

4. Falhas causadas por defeitos físicos em dispositivos de


hardware
Ex: Aterramento de disco

5. Falhas causadas por catástrofes


Ex: Incêndio, Inundação etc

6. Falhas causadas por erros/defeitos provocados (sabotagem)


Ex: Vírus

⇒ Problema: Como garantir atomicidade e consistência das transações na presença


de falhas

• Princípo Básico: Manter redundância de dados para recuperar falhas


⇒ Cópia de segurança (backup)
⇒ LOG (jornalização antes e depois)

• Estados da transação

parcialmente compromissada
compromissada

ativa

falhada abortada
• Dados contidos no LOG
1. Registro de início da transação <Ti starts>
2. Registro de atualização de dados < Ti,Xi,Va,Vd>
3. Registro de compromissamento <Ti commit>
4. Registro de rollback <Ti rollback>

• Modo de gravação das transações

1. Modificação Adiada: as modificações feitas pela


transação são gravadas no log mas as
operações de modificação no BD são
adiadas até que a transação seja
parcialmente compromissada

2. Modificação Imediata: permite a gravação de


modificações no banco de dados
enquanto a transação se encontra no
estado ativo

• Tratamento de Falhas

1. Falhas Lógicas na Transação


a) Se a transação consegue detectar a falha
b) Se a transação não consegue detectar a falha
b1) modificação adiada: nenhuma ação é necessária
b2) modificação imediata: examinar o log e fazer UNDO na
transação

2. Falhas Lógicas no Sistema/Interrupção do Sistema

1) modificação adiada: examinar o log e fazer REDO em transações


compromissadas

2) modificação imediata: examinar o log e fazer UNDO nas transações não


compromissadas e REDO nas transações
compromissadas

Problema: Tempo gasto para examinar o LOG

Alternativa: CheckPoint
• Checkpoint: gravação forçada de dados contidos nos buffer de log e de
dados para meio estável com a finalidade de estabelecer um ponto de
referência para futuras operações de undo e redo.

Passos:
1. Forçar gravação dos buffers de log em disco
2. Gravar um registro de checkpoint no log
3. Forçar gravação dos buffers de dados em disco
4. Gravar o endereço do registro de checkpoint em um
arquivo de reinicialização

tc tf
tempo

T1

T2

T3

T4

T5

Procedimento de Recuperação:

1. Iniciar lista UNDO com todas as transações contidas


no checkpoint (transações em curso)
2. Inicializar lista REDO vazia
3. Ler o LOG a partir do checkpoint
⇒ Ao encontrar uma registro BEGIN TRANSACTION
acrescenta a transição à lista UNDO
⇒ Ao encontrar COMMIT inclui-se a transação na
lista REDO e retira-se da lista UNDO
4. Ler o LOG de trás para frente refazendo as
transações de lista REDO e desfazendo as da lista
UNDO

3. Falhas Físicas
Prevenção: Replicação/Espelhamento de Hardware
Recuperação: Utilização de Cópia de Segurança e de LOG
⇒ Paginação com Imagem

1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10

. . .
. . .
. . .

Tabela de Tabela de
páginas imagem páginas do disco páginas corrente

1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10

. .
. . .
. . .
.
Tabela de Tabela de
páginas imagem páginas corrente
⇒ Características Principais

Técnica de recuperação não baseada em LOG


Tabela de páginas imagem nunca é alterada
Tabela de páginas corrente pode ser alterada em operações WRITE
Operações INPUT e OUTPUT utilizam tabela de páginas corrente para
localizar página do banco de dados no disco
ésima
⇒ Resumo da Execução WRITE(X,xj) considerando que X reside na i
página do disco
ésima
1. Se i página não está na memória principal, então executa
INPUT(X)
2. Se esta é a primeira gravação executada na iésima página por essa
transação, então modifique a tabela de págiunas corrente da
seguinte maneira:
a. Encontre uma página livre no disco
b. Remova a página encontrada da lista de páginas livres
c. Modifique a tabela de páginas corrente para que a iésima entrada
aponte para a página encontrada no passo 2a
3. Atribua o valor de xj para X na página de buffer

⇒ Esquema de recuperação
1. Quando a transação é compromissada:
1.1 as páginas de buffer contidas na memória principal que
tenham sido alteradas pela transação são gravadas no meio
não volátil

1.2 a tabela de páginas corrente é gravada no meio não volátil

1.3 o apontamento da página imagem é substituído, isto é, o


endereço anterior da página imagem é substituído pelo
endereço da página corrente gravada no passo anterior

2. Na presença de uma falha antes do passo 1.3, a recuperação se


dá simplesmente pela sobreposição da tabela de páginas corrente
na memória principal pela tabela de páginas imagem existente no
meio não volátil

⇒ Comparação de paginação com imagem com recuperação por log


Vantagens
1. Evita-se sobrecarga devido a gravação do log
2. Recuperação mais rápida

Desvantagens
1. Fragmentação de dados
2. Necessidade de esquema para coleta de lixo
3. Grande dificuldade para trabalhar com transações concorrentes
⇒ Gerenciamento de Buffer e Recuperação de Falhas

área de trabalho
local das transações
buffer do sistema armazenamento

código objeto do
sistema

buffer do log blocos de log

buffer de dados blocos de dados

Fatos:
Custo de saída de um bloco de log para o armazenamento não
volátil é suficientemente alto para que seja desejável gravar
múltiplos registros de log de uma vez
Se o sistema falha os registros de log são perdidos
A substituição pelo gerenciador de buffer de um bloco de dados na
memória principal pode deixar o bd em estado inconsistente se
houver uma falha

Conseqüências:
Uma transação T só pode entrar em estado compromissado depois
que o registro de log <T commit> tenha sido gravado em meio
estável
Antes que um registro de log <T commit> possa ser gravado no
dispositivo estável, todos os registros de log pertencentes a
transação T devem ser gravados naquele dispositivo
Antes que um bloco de dados da memória principal seja gravado
no banco de dados (dispositivo não volátil), todos os registros de
log pertencentes aos dados daquele bloco precisam Ter sido
gravados no dispositivo estável
5. Controle de Concorrência

Princípio da Isolabilidade: uma transação correta executando


isoladamente leva o bd de um estado consistente para outro estado
consistente

Sistemas com Multiprogramação: Transações executam de forma


intercalada para compartilhar recursos do sistema

Problemas em transações intercaladas e concorrentes

1. Atualização Perdida

Exemplo: Transações T1 e T2 que fazem reservas em um vôo onde:


X = nº de vagas no vôo

T1 T2

READ(X)
X := X-1
READ(X)
X := X-1

WRITE(X)
WRITE(X)

Tempo

2. Atualização Temporária

Exemplo: Transações T1 e T2 que fazem reservas em um vôo onde:


X = nº de vagas no vôo e
Y = nº de lugares reservados no vôo

T1 T2

READ(X)
X := X-1
WRITE(X)
READ(X)
X := X-1
WRITE(X)
READ(Y)
Y := Y+1
TRANSAÇÃO FALHA
ROLLBACK
READ(Y)
Y := Y +1
WRITE(Y)
Tempo
Causas dos problemas:

1. Uma transação enxerga um valor obsoleto de um item de dado


2. Um transação atualiza um item de dado baseada em um valor obsoleto

Solução: Controle de Concorrência

Escalonamento
Um escalonamento S de n transações é um ordenamento seqüencial de operações
dessas transações tal que, para cada transação T que participa do escalonamento S,
se uma operação i é executada antes de uma operação j em S.

Escalonamento Serial
Um escalonamento é serial se todas as operações de uma transação que participa
desse escalonamento são executadas uma após a outra sem que nenhuma outra
operação de qualquer outra transação que participe do escalonamento seja
executada entre elas, ou seja, as operações de duas ou mais transações não são
executadas de forma intercalada.

Um escalonamento serial não apresenta problemas de concorrência, mas por outro


lado não aproveita o compartilhamento de recursos.

Escalonamentos Equivalentes e Serializáveis quanto ao conflito

Conflito:
Seja um escalonamento S em que existam duas operações op1 e op2
consecutivas, pertencentes a T1 e T2 respectivamente. Dizemos que op1 e
op2 conflitam se elas se referem ao mesmo item de dado e pelo menos uma
delas é uma operação WRITE.

Escalonamento Equivalentes quanto ao Conflito:

Um escalonamento S1 é equivalente quanto ao conflito a um escalonamento


S2, se for possível inverter sucessivamente a ordem de operações não
conflitantes em S1 obtendo-se a mesma sequência de operações existente
em S2.

Exemplo:

S1 S2

T1 T2 T1 T2

READ(A) READ(A)
WRITE(A) WRITE(A)
READ(A) READ(B)
WRITE(A) WRITE(B)
READ(B) READ(A)
WRITE(B) WRITE(A)
READ(B) READ(B)
WRITE(B) WRITE(B)
Escalonamento Serializável quanto ao Conflito:

Um escalonamento S1 não serial envolvendo um conjunto de transações é


serializável quanto ao conflito se for equivalente quanto ao conflito a um
escalonamento serial envolvendo o mesmo conjunto de transações.

Escalonamentos Equivalentes e Serializáveis quanto à Visão

Sejam dois escalonamentos S1 e S2 que envolvam o mesmo conjunto de transações.


Esses escalonamentos são equivalentes quanto à visão se satisfizerem as seguintes
condições:

a) Para cada item de dado Q, se uma transação Ti lê o valor inicial de Q no


escalonamento S1, então Ti também lê o valor inicial de Q no
escalonamento S2;

b) Para cada item de dado Q, se a transação Ti executa READ(Q) no


escalonamento S1 e Q tiver sido produzido por alguma transação Tk em
S1, então o mesmo acontece em S2;

c) Para cada item de dado Q, se houver alguma transação Ti em S1 que


executa a operação WRITE(Q) final (última) no escalonamento S1, o
mesmo acontece com S2.

Nos dois escalonamentos as mesmas transações lêem o mesmos valores


originais dos itens de dados (a e b) e produzem os mesmos valores finais
desses itens

Exemplo:

S1 S2

T1 T2 T3 T1 T2 T3

READ(Q) READ(Q)
WRITE(Q) WRITE(Q)
WRITE(Q) WRITE(Q)
WRITE(Q) WRITE(Q)

Escalonamento Serializável quanto à Visão

É um escalonamento não serial equivalente quanto à visão a um


escalonamento serial

Teste de Seriabilidade de Escalonamento quanto ao conflito

Grafo de precedência: Grafo orientado G(V,A) onde V é o conjunto de vértices


consistindo de todas as transações que compõem o escalonamento e A é o conjunto de
arestas. Cada aresta Ti → Tk representa uma das situações seguintes:

Ti executa WRITE(Q) antes que Tk execute READ(Q)


Ti executa READ(Q) antes que Tk execute WRITE(Q)
Ti executa WRITE(Q) antes que Tk execute WRITE(Q)
Protocolos de controle de concorrência baseados em técnicas de bloqueio (lock)

A idéia básica desses protocolos é definir um status (variável) que, associado a um


item de dado, pode determinar as operações que podem ser executadas sobre tal
item de dados, com os seguintes objetivos:

Não permitir que uma transação enxergue um item de dado que está
prestes a ser atualizado por outra transação
Não permitir que uma transação altere o valor de um item de dado que já
foi lido (visto) por outra transação

Tipos de Bloqueio

a) Binário (exclusão mútua)


a.1 Bloqueado (locked)
a.2 Não Bloqueado (unlocked)

Protocolo de Bloqueio Binário

1) Uma transação T deve executar uma operação LOCK sobre um


item de dado antes de executar uma operação READ ou WRITE

2) Uma transação T que não conseguir executar a operação LOCK


fica em estado de espera

3) Uma transação T deve executar uma operação UNLOCK para


liberar o bloqueio sobre um item de dado

Vantagem: simplicidade
Desvantagem: baixo nível de concorrência

b) Multi-modo
b.1 Exclusivo (X)
b.2 Compartilhado (S)
b.3 Não bloqueado
T1 X S -
T2
X não não sim
S não sim Sim
- sim sim sim

Protocolo de Bloqueio Multi-Modo


1) Uma transação T deve executar uma operação LOCK-S ou
LOCK-X sobre um item de dado antes de executar uma operação
READ

2) Uma transação T deve executar uma operação LOCK-X sobre


um item de dado antes de executar uma operação WRITE

3) Uma transação T que não conseguir executar uma operação


LOCK-S ou LOCK-X entra em estado de espera

4) Uma transação T deve executar uma operação UNLOCK para


liberar o bloqueio sobre um item de dado

Vantagem: menos restritivo (maior grau de concorrência)


Desvantagem: não garante seriabilidade
Exemplo:
S1

T1 T2

LOCK-S(A)
READ(A)
UNLOCK(A)
LOCK-X(B)
READ(B)
UNLOCK(B)
LOCK-X(A)
READ(A)
A := A + B
WRITE(A)
UNLOCK(A)
LOCK-X(B)
READ(B)
B := B + A
WRITE(B)
UNLOCK(B)

Fato: Escalonamento S1 obedece as regras do protocolo mas não é


serializável

Problema: Qualquer transação que libera um bloqueio e depois continua,


podendo fazer outros bloqueios, sempre corre o risco de
produzir resultados incorretos

Solução: Protocolo de bloqueio em duas fases

Protocolo de bloqueio em duas fases (two-phase locking)

Teorema: Se todas as transações obedecerem as regras


abaixo, então todas os escalonamentos não seriais
envolvendo essas transações são serializáveis

1) Antes de operar sobre qualquer item de dado, a


transação primeiro adquire um bloqueio
adequado sobre aquele objeto

2) Após liberar o bloqueio, a transação não mais


adquire bloqueios

Fases:
crescimento: bloqueios são feitos
encolhimento: bloqueios são liberados
Explicação:
Se uma transação estiver na fase de encolhimento
significa que ela já realizou todos as operações que
teria de fazer sobre o bd sem interferência
indesejável de outras transações, já que antes dessa
fase a transação possuía os locks
Observação:
O teorema estabelece condições suficientes para
estabelecer a seriabilidade mas não estabelece
condições necessárias.
Escalonamento S1 modificado para atender protocolo 2PL

S1

T1 T2

LOCK-S(A)
READ(A)
LOCK-X(B)
LOCK-X(B)
READ(B)
B := B + A
WRITE(B)
UNLOCK(A)
UNLOCK(B)
READ(B)
LOCK-X(A)
READ(A)
A := A + B
WRITE(A)
UNLOCK(A)
UNLOCK(B)

Exemplo de escalonamento que não obedece ao protocolo de bloqueio


em duas fases e ainda assim é serializável:

S2

T1 T2

LOCK-S(F)
READ(F)
UNLOCK(F)
LOCK-S(G)
READ(G)
LOCK-X(F)
READ(F)
F := G + 1
WRITE(F)
UNLOCK(F)
UNLOCK(G)
LOCK-X(H)
H := F + 1
WRITE(H)
UNLOCK(H)
c) Outros protocolos

Idéia básica: outros protocolos menos restritivos podem ser usados se


existirem informações disponíveis sobre as transações.

Exemplo: Protocolo baseado em grafo de ordenação de

Premissa: conhece-se a ordem em que os


itens são usados pelas transações

Requisito: construção do grafo (árvore) de precedência do


banco de dados

B C

D F

G H E

I
J

Protocolo: Usa-se apenas bloqueios exclusivos

1) O primeiro bloqueio feito por uma transação pode ser feito


sobre qualquer item de dado
2) Uma transação, a partir do segundo bloqueio em diante,
somente poderá bloquear um item de dado se ela já tiver o
bloqueio do pai desse item na árvore
3) Itens de dados podem ser desbloqueados a qualquer momento
4) Um item de dado que tenha sido bloqueado e desbloqueado
por uma transação não pode ser subsequentemente
rebloqueado pela transação

T1 T2 T3 T4

LOCK-X(B)
LOCK-X(D)
LOCK-X(H)
UNLOCK(D)
LOCK-X(E)
UNLOCK(E)
LOCK-X(D)
UNLOCK(B)
LOCK-X(B)
LOCK-X(E)
UNLOCK(H)
LOCK-X(G)
UNLOCK(D)
LOCK-X(D)
LOCK-X(H)
UNLOCK(D)
UNLOCK(H)
UNLOCK(E)
UNLOCK(B)
UNLOCK(G)
Bloqueio Pépetuo (Deadlock)

1) Protocolos de Prevenção

1.1) Bloqueio Antecipado

Idéia: Exigir que a transação bloqueie todos os itens que ela precisa
antecipadamente, de uma só vez. Se a transação não puder obter
algum bloqueio então ela é abortada
Efeito: Transações não concorrem por recursos
Desvantagens:
Limitação excessiva de concorrência
Livelock (inanição/starvation)

1.2) Re-escalonamento de transações

Idéia: Ordenar as transações de forma que duas transações não sejam


processadas de forma concorrente, se as exigências de seus dados
conflitarem.
Efeito: Transações não concorrem por recursos
Desvantagens:
Limitação excessiva de concorrência
Necessidade de conhecimento prévio das exigências de dados
das transações

1.3) Bloqueio ordenado de itens

Idéia: Ordenar todos os itens de dados no bd e assegurar-se que uma


transação bloqueie os itens nessa ordem.
Efeito: Transações não concorrem por recursos
Desvantagens:
A lógica da transação pode não condizer com a ordem necessária
dos bloqueios
Difícil aplicação prática

1.4) Espera ou Morre (WAIT-DIE)

Idéia: Nesse protocolo uma transação mais antiga, ao tentar bloquear


algum recurso já bloqueado por uma transação mais recente, entra
em estado de espera. Se for mais nova ela é abortada e
reinicializada.
Efeito: Transações não concorrem por recursos
Desvantagens: Pode haver reinicializações freqüentes

1.5) Mata ou Espera (WOUND-WAIT)

Idéia: Nesse protocolo uma transação mais antiga, ao tentar bloquear


algum recurso já bloqueado por uma transação mais recente,
aborta a transação mais recente. Se for mais nova ela entra em
estado de espera.
Efeito: Transações não concorrem por recursos
Desvantagens: Pode haver reinicializações freqüentes
2) Protocolos de Detecção

Idéia: Ao invés de se gastar esforços tentando prevenir deadlocks, basta


detectá-los e resolvê-los
Modo de detecção: Grafo de espera (WAIT-FOR GRAPH)
Vantagens:
Menos sobrecarga em situações com poucos deadlocks
Maior possibilidade de concorrência
Desvantagens:
Maior sobrecarga em situações com muitos deadlocks
Dificuldade para se estabelecer o momento de aplicar o algoritmo
de detecção

3) Protocolos de Recuperação

Idéia: Uma vez detectado um deadlock, abortar e desfazer uma ou mais


transações para romper esse deadlock
Passos:
Selecionar uma vítima
⇒ Critérios: transações com menos prioridade, transações com
menor custo para serem desfeitas etc

Desfazer transações (rollback)


Problema:
Livelock

Protocolos de controle de concorrência baseados em ordenação de tempo

A idéia básica desses protocolos é garantir seriabilidade através do controle de quais


operações são permitidas sobre um item de dados, de acordo com a ordem
cronológica de submissão das transações.

Premissas:
1. Não se usa bloqueios

2. Usa-se timestamps para as transações:

Uma transação T recebe um timestamp no momento


em que ela é gerada - TS(T)
Associa-se a cada item de dado X dois timestamps:

READ-TS(X): Maior timestamp entre todos os


timestamps das transações que
conseguiram ler X com sucesso

WRITE-TS(X): Maior timestamp entre todos os


timestamps das transações que
conseguiram gravar X com sucesso

3. O escalonamento de um conjunto de transações que resultar


da aplicação do protocolo é equivalente a algum
escalonamento serial específico e não a algum
escalonamento serial como no protocolo de bloqueio em
duas fases
Protocolo:

1. Se uma transação qualquer T estiver executando uma operação


WRITE sobre um item de dado X e TS(T) < READ-TS(X) então
a transação deve ser abortada e reinicializada

2. Se uma transação qualquer T estiver executando uma operação


WRITE sobre um item de dado X e TS(T) ≥ READ-TS(X) então a
transação é executada e WRITE-TS(X) é atualizada com TS(T)

3. Se uma transação qualquer T estiver executando uma operação


WRITE sobre um item de dado X e TS(T) < WRITE-TS(X) então
a transação não é executada e o processamento continua

4. Se uma transação qualquer T estiver executando uma operação


WRITE sobre um item de dado X e TS(T) ≥ WRITE-TS(X) então
a transação é executada e WRITE-TS(X) é atualizada com
TS(T)

5. Se uma transação qualquer T estiver executando uma operação


READ sobre um item de dado X e TS(T) < WRITE-TS(X) então
a transação deve ser abortada e reinicializada

6. Se uma transação qualquer T estiver executando uma operação


READ sobre um item de dado X e TS(T) ≥ WRITE-TS(X) então a
transação é executada e READ-TS(X) é atualizada com TS(T)

7. Se uma transação qualquer T estiver executando uma operação


READ sobre um item de dado X então a transação é executada
e READ-TS(X) é atualizada com TS(T)

Observações:
1. As condições do protocolo devem ser testadas na ordem em que
foram colocadas

2. READ-TS(X) e WRITE-TS(X) são usadas para aumentar o grau


de concorrência

3. Nem todos os escalonamentos serializáveis em protocolo 2PL


são serializáveis em protocolos de ordenação de tempo e vice-
versa

4. Se as operações forem efetivadas imediatamente, o livelock


pode acontecer e também pode ser necessário o rollback em
cascata

T1 T2

READ(B)
READ(B)
B:=B-50
WRITE(B)
READ(A)
READ(A)
DISPLAY(A+B)
A:=A+50
WRITE(A)
DISPLAY(A+B)
Técnicas de Validação

Utilidade: aumentar o grau de concorrência em ambientes em que a maioria


das transações é apenas de consulta

Fases da transação:
1) fase de leitura
2) fase de validação
3) fase de gravação

Marcadores de Tempo:
1) START(T) – início da fase 1
2) VALIDATION(T) – início da fase 2
3) FINISH(T) – fim da fase 3

Protocolo:
No teste de validação uma transação Tj requer que, para todas as
transações Ti com TS(Ti) < TS(Tj), uma das duas condições
seguintes sejam satisfeitas:

1) FINISH(Ti) < START(Tj)


2) O conjunto de itens de dados gravados por Ti é disjunto do
conjunto de dados lidos por Tj e START(Tj) < FINISH(Ti) <
VALIDATION (Tj)

Exemplo:

T1 T2

READ(B)

READ(B)
B:=B-50
WRITE(B)
READ(A)
A:=A+50
WRITE(A)
READ(A)
DISPLAY(A+B)
DISPLAY(A+B)

Protocolo baseado em Multiversões


Idéia básica: aumentar o grau de concorrência mantendo várias versões de um
item de dado

Exemplo: item X (versões X1 , X2 , ... , Xk)

READ-TS(Xi): é o maior de todos os timestamps das transações que leram


Xi com sucesso

WRITE-TS(Xi): é o maior de todos os timestamps das transações que


escreveram Xi com sucesso

⇒ O timestamp de uma transação é comparado com os timestamps das


diferentes versões do item que ela pretende manipular
⇒ Uma versão apropriada que mantém a seriabilidade é escolhida, se for
possível
⇒ Toda vez que uma transação T executa uma operação WRITE(X), uma
nova versão Xk+1 do item é criada, com WRITE-TS(Xk+1 ) igual a TS(T)
⇒ Toda vez que uma transação T executa uma operação READ(Xi), o valor
de READ-TS(Xi) recebe o maior valor entre READ-TS(Xi) e TS(T)

Protocolo:

1. Transação T executa WRITE(X)

Determina-se a versão Xi de X com maior WRITE-TS entre


todas as versões de X tal que WRITE-TS(Xi) seja menor ou
igual a TS(T).

Se TS(T) < READ-TS (Xi)


Então
Abort(T)
Rollback(T)
Senão
Cria nova versão Xj
READ-TS(Xj) ← TS(T)
WRITE-TS(Xj) ← TS(T)

2. Transação T executa READ(X)

Determina-se a versão Xi de X com maior WRITE-TS entre


todas as versões de X tal que WRITE-TS(Xi) seja menor ou
igual a TS(T) e retorne Xi para a transação

Vantagens:

Maior concorrência
Leitura consistente

Desvantagens:

Maior complexidade
Maior consumo de área de armazenamento
Granularidade Múltipla e Bloqueios de Intenção
Existem situações em que é necessário bloquear um conjunto de itens de dados
ao invés de um único item.

É desejável um mecanismo que permita múltipla granularidade de tratamento


dos dados em que as granularidades menores sejam aninhadas em
granularidades maiores

BD

A1 An

Fi Fj Fk Fn

ri1 rin rj1 rjn rk1 rkn rn1 rn

Considerando os tipos de bloqueio compartilhado (S) e exclusivo(X) e


considerando que um bloqueio desse tipo em um nó da árvore implica em um
bloqueio implícito de todos os nós descendentes na árvore, temos as seguintes
situações:
1. Para bloquear um nó temos de verificar se o mesmo já se encontra
bloqueado e se o tipo de bloqueio desejado é compatível com o tipo de
bloqueio feito anteriormente;
2. Verificar se um dos nós existentes entre o nó a ser bloqueado e a raiz
está bloqueado
3. Verificar se um nó descendente do nó a ser bloqueado não está
bloqueado em modo incompatível

Para evitar uma sobrecarga de trabalho pode-se usar novos tipos de bloqueio,
chamados bloqueios de intenção:
1. Bloqueio de intenção compartilhado (IS)
2. Bloqueio de intenção de exclusividade (IX)
3. Bloqueio partilhado com intenção de exclusividade (SIX)

IS IX S SIX X
IS sim sim sim sim não
IX sim sim não não não
S sim não sim não não
SIX sim não não não não
X não não não não não

Protocolo:
1. Os bloqueios de nós da árvore devem respeitar a matriz de
compatibilidade
2. O primeiro bloqueio feito pela transação deve ser o do nó raiz
3. Um nó Q pode ser bloqueado por uma transação T no modo S ou IS
apenas se os pais de Q estiverem bloqueados por T em modo IX ou IS
4. Um nó Q pode ser bloqueado por T no modo X, SIX ou IX apenas se os
pais estiverem bloqueados por T no modo IX ou SIX
5. Uma transação T deve obedecer ao protocolo de bloqueio em duas
fases
6. Uma transação T pode desbloquear em nó Q apenas se nenhum dos
filhos de Q estiverem correntemente bloqueados

Exemplos:
1. Ta deve ler o registro ri1 do arquivo Fi
⇒ bloquear bd, área A1 e arquivo Fi no modo IS
⇒ bloquear ri1 no modo S

2. Tb deve modificar o registro rin do arquivo Fi


⇒ bloquear bd, área A1 e arquivo Fi no modo IX
⇒ bloquear ri1 no modo X

3. Tc deve ler todos os registros de Fi


⇒ bloquear bd, área A1 no modo IS
⇒ bloquear Fi no modo S

4. Td deve ler todos os dados do bd


⇒ bloquear bd no modo S

5. Te deve modificar todos os registros de Fi


⇒ bloquear bd, área A1 no modo IX
⇒ bloquear F1 no modo X

6. Tf deve modificar alguns arquivos da área A1


⇒ bloquear bd no modo IX, a área A1 no modo SIX
⇒ bloquear arquivos no modo X

Vantagens:
⇒ Aumenta grau de concorrência e reduz carga de bloqueios no caso de
aplicativos onde existem um misto de transações curtas que manipulam
poucos itens e transações longas que manipulam muitos itens

Desvantagens:
⇒ Maior complexidade
⇒ Possibilidade de deadlock