Está en la página 1de 245

Ps Graduao em Banco de Dados e

Businness Inteligence com nfase em


Software Livre
Arquitetura e Administrao de Banco
de Dados
Prof Msc. Roberto Schaefer
Professor Mst. Roberto Schaefer

SGBD Sistema ou Software


Gerenciador de Banco de Dados
Conjunto de aplicativos com objetivo de permitir a
criao, manipulao e gerenciamento de bancos
de dados.
Controla os objetos dos bancos de dados

Professor Mst. Roberto Schaefer

SGBD Sistema Gerenciador de Banco de Dados


SGBD Proprietrio
Oracle
SQL Server
DB2
SGBD Livre (Free)
MySQL
Postgre

Professor Mst. Roberto Schaefer

Objetos dos Bancos de Dados


Tabelas
ndices
Views
Procedures
Functions
Triggers

Professor Mst. Roberto Schaefer

Professor Mst. Roberto Schaefer

Evoluo das Arquiteturas


Evoluo dos SGBD
Perodo

Fato Marcante

Exemplo de Recurso

At 1960

Sistema de Arquivo
Arquivos Indexados
Arquivos Integrados

ISAM
VSAM

Anos 60

Modelo Hierrquico
Modelo de Rede

IMS (IBM)
DMS (UNISYS)
IDMS (CA)

Dcada
de 70

Modelo Relacional (Codd)

DB2 (IBM)

Dcada
de 80

Modelo Relacional Estendido


(Objeto-Relacional)

INFORMIX
ORACLE

Dcada
Modelo Orientado Objeto
de 90 at BD Inteligente
hoje

Professor Mst. Roberto Schaefer

JASMINE
CACH
KRISIS
OBJECTSTORE

Arquitetura de um SGBD
Alterao
esquema

Consultas

Alteraes

Avaliador de
Consulta

Gerente
Memria

Gerente de
transao

Dados e
Metadados

Professor Mst. Roberto Schaefer

Estrutura de armazenamento de Dados

O SGBD recupera os dados em estruturas que chamamos de Pginas,


que so listas sequenciais.
As pginas de dados so blocos de informaes com o tamanho que
varia conforme o SGBD. Elas so utilizados para leitura e gravao dos
dados.
Os dados so armazenados em 2 arquivos distintos, o de DATA e o de
LOG (Transactions Log). Esses arquivos gravam seus dados em forma
de lista sequencial duplamente encadeada.
Seus ndices so armazenados em um 3 arquivo e so lidos em
forma de rvore binria ou em sequncia.

Professor Mst. Roberto Schaefer

Os SGBDs armazenam
seu dados em 2 reas
distintas:
l
rea de Dados
l
rea dos
Transactions Log
ou, simplesmente,
rea de Log ou TLog
Toda transao com os
dados feita na rea
de LOG
Dados

Professor Mst. Roberto Schaefer

Alterao
esquema

Consultas

Alteraes

Avaliador de
Consulta

Gerente
Memria

Dados e
Metadados

Gerente de
transao

ndice

T-Log
9

Os dados passam em definitivo para a rea de


DADOS somente aps sua confirmao
l

Os dados ficam armazenados na rea de LOG


sempre que for feita uma transao de Insert ou
Delete ou Update
Na aplicao deve ser aberta uma transao para
que isso ocorra de forma correta
Aps a transao, se tudo tiver ocorrido de forma
correta, deve-se fazer uso do comando COMMIT
caso contrrio devemos voltar a transao ao seu
estado anterior atravs do comando ROLLBACK

Professor Mst. Roberto Schaefer

10

O Commit funciona da seguinte forma:


l

Os dados considerados corretos so transferidos da


rea de Log para a rea de Dados e apagados da
rea de Log
Se no for aberta uma transao na aplicao o
Commit automtico, impossibilitando o
cancelamento da transao com o Rollback
Se no for feito o Commit a rea de Log cresce
indiscriminadamente

Professor Mst. Roberto Schaefer

11

ndices
l

Os ndices so tabelas com


determinados dados
ordenados
Os ndices so utilizados para
facilitar o acesso aos dados
Os ndices so criados por
tabela
Cada tabela pode ter N
ndices
Toda chave primria (PK)
indexada de forma automtica
pelo SGBD
l O MySQL cria o ndice
PRIMARY
Dados

Professor Mst. Roberto Schaefer

Alterao
esquema

Consultas

Alteraes

Avaliador de
Consulta

Gerente
Memria

Dados e
Metadados

Gerente de
transao

ndice

T-Log

12

Dados

PK
Log

Indice

Professor Mst. Roberto Schaefer

FK

rvore Binria

13

ndices
De um ponto de vista conceitual os ndices so
compostos por uma chave de ndice e de um
conjunto de ponteiros
Uma chave de ndice o ponto de referncia do
ndice
Os ponteiros apontam para a localizao dos dados
identificados pela chave de ndice

Professor Mst. Roberto Schaefer

14

ndices Unique
Refere-se a um ndice, onde todas as linhas do ndice
deve ser exclusiva
Ou seja, a mesma linha no pode ter valores no-NULL
idnticos para todas as colunas neste ndice como outra linha.

Para alm de ser usado para acelerar as consultas, os


ndices exclusivos podem ser usados para impor
restries sobre os dados, porque o sistema de banco
de dados no permite essa regra valores distintos para
ser quebrado quando inserir ou atualizar dados.

Professor Mst. Roberto Schaefer

15

ndices FULLTEXT no MySQL


O MySQL, a partir da verso 3.25.25, prov o
mecanismo de ndices fulltext, efetuando buscas
textuais com maior preciso.
Este recurso mais poderoso que o uso de like,
pois, alm de ordenar o resultado pela
similaridade semntica, oferece mais opes
para filtragem na consulta.

Professor Mst. Roberto Schaefer

16

Aplicaes com grande massa de texto que


precisam efetuar pesquisas baseadas na
relevncia so candidatas ao uso de ndices
fulltext.
O exemplo mais comum so pginas de busca,
que retornam os resultados mais relevantes na
frente.
Podemos destacar tambm bibliotecas virtuais,
pesquisas em arquivos de registro ou pesquisas em
documentos que esto armazenados no banco de
dados.

Professor Mst. Roberto Schaefer

17

ndice B-Tree
So rvores de pesquisa balanceadas
desenvolvidas para trabalharem em discos
magnticos ou qualquer outro dispositivo de
armazenamento de acesso direto em memria
secundria
O ndice B-tree uma implementao
das rvores B de alta concorrncia propostas por
Lehman e Yao.
Professor Mst. Roberto Schaefer

18

ndice R-Tree
Tambm conhecido como rvores R
Utiliza o algoritmo de partio quadrtica de
Guttman, sendo utilizada para indexar estrutura de
dados multidimensionais, cuja implementao est
limitada a dados com at 8Kbytes, sendo bastante
limitada para dados geogrficos reais
Utilizado normalmente com dados do tipo box, circle,
point e outros

Professor Mst. Roberto Schaefer

19

ndice Hash
O ndice hash uma implementao das
disperses lineares de Litwin
Na documentao do PostgreSQL est presente a seguinte
nota: "Os testes mostram que os ndiceshash do
PostgreSQL tm desempenho semelhante ou mais lento
que os ndices B-tree, e que o tamanho e o tempo de
construo dos ndices hash so muito piores. Os ndices
hash tambm possuem um fraco desempenho sob alta
concorrncia. Por estas razes, a utilizao dos ndices
class=LITERAL>hash desestimulada"

Professor Mst. Roberto Schaefer

20

ndices:

Recomenda-se criar ndices para a(s)


coluna(s) envolvida(s) no comando SELECT
atravs das clausulas:
WHERE, ORDER BY, GROUP BY e HAVING

Para tirar vantagem dos ndices, deve-se


escrever o comando de maneira que ele faa
uso dele
Deve-se tomar cuidado com o excesso de
ndices, pois eles podem degradar a
performance de acesso a tabela

Professor Mst. Roberto Schaefer

21

Deve-se utilizar ndices apenas em


colunas que possuem uma baixa
porcentagem de linhas com valores
iguais
No deve-se utilizar ndices em colunas
que so usadas apenas como funes e
operadores na clausula WHERE

Professor Mst. Roberto Schaefer

22

No indexe colunas que so


frequentemente modificadas ou quando
a eficincia ganha atravs da criao de
um ndice no valha a pena devido
perda de performance em operaes de
INSERT, UPDATE e DELETE.
Com a criao do ndice, estas
operaes perdero em performance
devido necessidade de manter o
ndice correto.

Professor Mst. Roberto Schaefer

23

Desempenho em Acessos a Disco


Sem o uso do ndice:
busca binria no arquivo de dados

[log23000] = 12

Com o uso do ndice:


busca binria no arquivo de ndice
+
leitura do registro no arquivo de
dados

Professor Mst. Roberto Schaefer

[log245] + 1 = 6 + 1 = 7

24

Banco de Dados Relacionais:


l

So constitudos de tabelas e cada tabela constituda


de tuplas e cada tupla constituda de dados
relacionados entre si
Tem como base o Teorema Booleano Algebra
Relacional
Garante a integridade dos dados
-

Relacionamentos com restries (constraints)

Chaves Primrias

Chaves Estrangeiras

ndices

Professor Mst. Roberto Schaefer

25

Linguagem padronizada pelo ANSI


American National Standards Institute
Linguagem SQL Structured Query
Language, ou Linguagem de Consulta
Estruturada
-

DDL

DML

DCL

Professor Mst. Roberto Schaefer

26

a)
b)
c)

d)
e)
f)
g)
h)

Cada tabela chamada de relao


Uma linha e suas colunas chamam-se TUPLA
Cada coluna da tabela tem um nome e representa
um atributo da tabela
A ordem das linhas irrelevante
No existem 2 linhas iguais
Usamos nomes para fazer referncia s colunas
A ordem das colunas tambm irrelevante
Cada tabela tem nome prprio, distinto de qualquer
outro objeto no banco de dados

Professor Mst. Roberto Schaefer

27

Arquitetura lgica do servidor MySQL

Professor Mst. Roberto Schaefer

28

Otimizao e Execuo:
MySQL interpreta consultas para criar uma
estrutura interna (a rvore de
interpretao), e, ento, aplica uma
variedade de otimizaes. Estas podem
incluir reescrever a consulta, determinar a
ordem na qual ela vai ler as tabelas,
escolher quais ndices usar e assim por
diante.
Professor Mst. Roberto Schaefer

29

Pode-se passar dicas ao otimizador por


meio de palavras-chave especiais na
consulta, afetando seu processo de
tomada de deciso.
Pode-se, tambm, pedir ao servidor para
explicar vrios aspectos da otimizao.
Isso permite que se saiba quais decises o
servidor est tomando e d um ponto de
referncia para repetir consultas, esquemas e
configuraes para fazer tudo rodar o mais
eficientemente possvel.
Professor Mst. Roberto Schaefer

30

O otimizador no se importa por qual ferramenta


de armazenamento uma tabela particular usa,
mas a ferramenta de armazenamento realmente
afeta como o servidor otimiza a consulta.
O otimizador pergunta ferramenta de
armazenamento sobre algumas das suas
capacidades e o custo de certas operaes, e
pede por estatsticas sobre os dados da tabela.
Por exemplo, algumas ferramentas de
armazenamento suportam tipos de ndice que
podem ser teis para certas consultas.
Professor Mst. Roberto Schaefer

31

Antes mesmo de interpretar a consulta o


servidor consulta o cache de consulta, que
pode armazenar somente expresses SELECT,
junto com seus conjuntos de resultado.
Se algum executar uma consulta que idntica
quela que j est no cache, o servidor no
precisa interpretar, otimizar ou executar a
consulta ele pode simplesmente passar de
volta o conjunto de resultado armazenado

Professor Mst. Roberto Schaefer

32

Controle de Concorrncia:
Toda vez que mais de uma consulta
precisar alterar dados ao mesmo tempo,
o problema de controle de concorrncia
surge.
O MySQL faz isso em dois nveis: no nvel
do servidor e no nvel da ferramenta de
armazenamento.

Professor Mst. Roberto Schaefer

33

Sistemas que lidam com acesso de


leitura/escrita concorrente
implementam um sistema de bloqueio
que consiste em dois tipos de bloqueio.
Estes so geralmente conhecidos como
bloqueios compartilhados e bloqueios
exclusivos, ou bloqueios de leitura e
bloqueios de escrita.
Professor Mst. Roberto Schaefer

34

Granularidade de Bloqueio
Uma maneira de melhorar a concorrncia de um
recurso compartilhado ser mais seletivo sobre
o que bloquear.
Em vez de bloquear todo o recurso, bloqueie
somente a parte que contm os dados que necessita
alterao.
Minimizar a quantidade de dados que voc bloqueia de
uma vez permite que alteraes a um dado recurso
ocorram simultaneamente, desde que elas no se
conflitem com as outras.
Professor Mst. Roberto Schaefer

35

O problema que bloqueios consomem


recursos. Toda operao de bloqueio obter
um bloqueio, checar para ver se um bloqueio
est liberado, liberar um bloqueio e assim por
diante causa problemas.
Se o sistema gastar muito tempo gerenciando
bloqueios em vez de armazenar e restaurar
dados, o desempenho pode sofrer.
A maioria dos SGBDs no d muita escolha:
bloqueio a nvel de linha nas suas tabelas a
soluo.
Professor Mst. Roberto Schaefer

36

Deadlocks
Um deadlock quando duas ou mais transaes
esto mutuamente mantendo e solicitando
bloqueios nos mesmos recursos, criando um ciclo
de dependncias.
Deadlocks ocorrem quando transaes tentam
bloquear recursos em uma ordem diferente.
Eles podem acontecer sempre que mltiplas
transaes bloqueiam os mesmos recursos.

Professor Mst. Roberto Schaefer

37

Por exemplo, considere estas duas transaes sendo


executadas na tabela StockPrice:

Transao n.1

START TRANSACTION;
UPDATE StockPrice SET close = 45.50 WHERE stock_id = 4 and date = '2002-05-01';
UPDATE StockPrice SET close = 19.80 WHERE stock_id = 3 and date = '2002-05-02';
COMMIT;

Transao n.2

START TRANSACTION;
UPDATE StockPrice SET high = 20.12 WHERE stock_id = 3 and date = '2002-05-02';
UPDATE StockPrice SET high = 47.20 WHERE stock_id = 4 and date = '2002-05-01';
COMMIT;

Professor Mst. Roberto Schaefer

38

Se voc no tiver sorte, cada transao vai


executar sua primeira consulta e atualizar
uma linha de dados, bloqueando-a no
processo.
Cada transao vai, ento, tentar atualizar sua
segunda linha, apenas para descobrir que j
est bloqueada.
As duas transaes vo esperar eternamente
para que cada uma complete, a menos que
algo interfira para quebrar o deadlock.
Professor Mst. Roberto Schaefer

39

Para combater este problema, SGBDs


implementam vrias formas de deteco de
deadlock e intervalos.
Os sistemas mais sofisticados, como a ferramenta de
armazenamento InnoDB, vai perceber dependncias
circulares e retornar um erro instantaneamente.
Isso , na verdade, algo muito bom do contrrio,
deadlocks iriam se manifestar como consultas muito lentas.

Outros vo desistir depois da consulta exceder o


tempo limite de espera de um bloqueio, o que no
muito bom.
Professor Mst. Roberto Schaefer

40

A maneira que o InnoDB atualmente lida com


deadlocks desfazer a transao que tem o
menor nmero de bloqueios de linha
exclusivos (uma mtrica aproximada para a
qual ser mais fcil desfazer).
Deadlocks possuem uma natureza dupla:
alguns so inevitveis por causa dos conflitos
de dados verdadeiros, e alguns so causados
devido a forma de como a ferramenta de
armazenamento trabalha.
Professor Mst. Roberto Schaefer

41

Tuning (afinao):

Em geral, os SGBD`s no so
ferramentas auto suficientes no que diz
respeito ao acesso aos dados e por esse
motivo, esforos so despendidos no
intuito de aperfeioar seu
funcionamento interno, melhorando a
organizao das informaes e como
elas so obtidas

Professor Mst. Roberto Schaefer

42

Ajustar e otimizar uma consulta e o


prprio BD tornam-se fatores
importantes, podendo-se ter um ganho
de performance aceitvel, visto que
cada consulta tratada de forma
diferente

Professor Mst. Roberto Schaefer

43

Tuning a sintonia ou ajuste de algo


para que o SGBD apresente melhor
resultado, fazendo-se com que
pequenos ajustes afetem
significativamente a performance do
BD, transformando uma tarefa de alto
custo e complexidade em um processo
simples e rpido

Professor Mst. Roberto Schaefer

44

Em termos didticos, pode-se dividir as


aes de tuning em trs grandes tipos:
(1) Refinamento do esquema das relaes e as
consultas/atualizaes feitas no BD;
(2) Configurao do sistema operacional em
uso; e
(3) Configurao dos parmetros dos SGBDs

Professor Mst. Roberto Schaefer

45

Professor Mst. Roberto Schaefer

46

Dentre os problemas de desempenho que


um SGBD abrange, esto includos o consumo
de processamento, utilizao ineficaz de
comandos SQL, bloqueios, esperas e
atividade de disco (DIAS, 2005)
Diante das afirmativas conclumos que
grande parte dos problemas relacionados
ao desempenho de acesso aos dados em um
BD deve-se a preparao de consultas
(Query) e utilizao de Index

Professor Mst. Roberto Schaefer

47

Problemas Comuns:

Proporcionalmente, os problemas de
lentido esto em:
60% dos problemas so relacionados ao mau uso de
expresses SQL
20% dos problemas so relacionados a m
modelagem do banco de dados
10% dos problemas so relacionados a m
configurao do SGDB
10% dos problemas so relacionados a m
configurao do Sistema Operacional

Professor Mst. Roberto Schaefer

48

Em Tuning, comumente sero utilizadas


informaes de estatsticas de uso de HW:

Utilizao do processador
Atividade de I/O
Paginao
Memria utilizada
...

Professor Mst. Roberto Schaefer

49

Equvocos de Arquitetura:

Concentrao de regras de negcio na


aplicao para processos em lote
Integridade referencial na aplicao
Mal dimensionamento de I/O (CPU,
Plataforma, Disco)
Ambientes virtualizados (Vmware, XEN,
etc..) em AMD64/EMT64.
Uso de configuraes padres do SO e/ou do
SGBD

Professor Mst. Roberto Schaefer

50

Servidor ...

Servidores dedicados para o SGBD


Storage com Fiber Channel, iSCSI: Grupos de
RAID dedicados
SCSI > SAS > SATA > IDE
RAID 5 ou 10: por Hardware
Mais memria! (At 4GB em 32 bits)
Processadores de 64 bits: Performance at 3
vezes do que os 32 bits (AMD64 e EMT64 Intel)

Professor Mst. Roberto Schaefer

51

RAID 5:

As informaes sobre paridade para os dados


do array so distribudas ao longo de todos
os discos do array , ao invs de serem
armazenadas num disco dedicado,
oferecendo assim maior desempenho e
tolerncia a falhas
Sistema complexo de controle dos HDs

Professor Mst. Roberto Schaefer

52

RAID 10 ou 1+0:

Exige ao menos 4 discos rgidos.


Cada par ser espelhado, garantindo redundncia, e os pares
sero distribudos, melhorando desempenho.
At metade dos discos pode falhar simultaneamente, sem
colocar o conjunto a perder, desde que no falhem os dois
discos de um espelho qualquer razo pela qual usam-se
discos de lotes diferentes de cada lado do espelho.

Professor Mst. Roberto Schaefer

o nvel recomendado para bases de dados, por ser o


mais seguro e dos mais velozes, assim como qualquer
outro uso onde a necessidade de economia no se
sobreponha segurana e desempenho.

53

Discos ou parties distintos para:

Logs de transaes
ndices: Ext2
Tabelas (particionar tabelas grandes)
Tablespace temporrio (em ambiente BI)*
Archives
SO + SGBD
Log de Sistema

Professor Mst. Roberto Schaefer

54

O otimizador de consultas o
componente do SGBD que tenta
determinar o modo mais eficiente de
executar uma consulta
O SGBD usa algumas estatsticas
mantidas em tabelas do sistema para
direcionar o otimizador.
Se essas estatsticas estiverem
desatualizadas, provavelmente no se
obter o melhor plano para a consulta.

Professor Mst. Roberto Schaefer

55

Para atualizar as estatsticas, deve-se


executar o comando ANALYZE.
possvel ver o plano que o otimizador de
consultas do PostgreSQL gera, usando a
clusula EXPLAIN antes da consulta.
Adicionando a clusula EXPLAIN ANALYZE
antes da consulta, ela de fato
executada, de forma que pode-se ter a
medida do tempo

Professor Mst. Roberto Schaefer

56

Sintaxe no Postgre:
EXPLAIN [ ANALYZE ] [ VERBOSE ]
statement
ANALYZE
Executar o comando e mostra os tempos reais
de execuo

VERBOSE
Mostrar a representao interna completa do
plano de execuo. Normalmente, esta opo
s til para propsitos de depurao
Qualquer instruo DML: SELECT, INSERT,
UPDATE, DELETE, EXECUTE ou DECLARE
Professor Mst. Roberto Schaefer

57

Sintaxe no MySQL:
EXPLAIN EXTENDED comando select
No uso do parmetro EXPLAIN o
MySQL mostrar as informaes do
plano de execuo montado para o
comando SELECT, mostrando
informaes das tabelas e do join
O uso do EXPLAIN EXTENDED
mostrar informaes adicionais

Professor Mst. Roberto Schaefer

58

Professor Mst. Roberto Schaefer

59

Professor Mst. Roberto Schaefer

60

Aspectos que tornam acesso aos


dados lentos:

ndices inadequados ou falta de ndices;


Excesso de ndices, principalmente se a
aplicao faz muitos INSERTS ou DELETES
em tabelas;
Falta de chaves primrias em tabelas;
Uso do SELECT trazendo todas as colunas
da tabela select * from AAA.

Professor Mst. Roberto Schaefer

61

Uso do condicionador LIKE


Evite "%XXX%" como pesquisa.
Se precisar de LIKE por algum motivo, ponha
o "%" apenas no final, ou seja, "XXX%"
(que ser convertido pela maioria dos
SGBDs em algo parecido com "BETWEEN
XXX AND XXX_".

Professor Mst. Roberto Schaefer

Se isso no puder ser evitado e se a


tabela for muito grande, use alguma
soluo de "full text search" do seu
banco - isso vai envolver o uso de
algum SQL especfico do banco para
efetuar as querys de "full text search";

62

Aspectos que parecem que


ajudam mas no fazem diferena:

Mexer na ordem das condies do


WHERE ou dos JOINs
Normalmente os SGBDs ignoram a ordem das
condies do WHERE ou dos JOINs e usam
alguma estatstica prpria e alguma
heurstica;

Professor Mst. Roberto Schaefer

63

Deixar todas as colunas com tamanhos fixos


(CHAR em vez de VARCHAR)

isso s ocupa espao em disco e no


acelera o acesso, muitas vezes at deixa
mais lento porque o banco fica maior e
menos dados cabem no cache.

Professor Mst. Roberto Schaefer

64

Boas Prticas em Acesso a Dados:

Usar da clausula WHERE ao invs da HAVING


para filtrar linhas
- evitar o uso da clausula HAVING junto com GROUP BY
em uma coluna indexada, pois neste caso o ndice
no utilizado pelo SGBD

Especificar as colunas principais do ndice na


clausula WHERE
- em um ndice composto a consulta apenas utilizar o
ndice se as principais colunas do ndice estiverem
especificada na clausula WHERE

Professor Mst. Roberto Schaefer

65

Comparar o INDEX SCAN com o FULL


TABLE SCAN - se estiver selecionando
mais de 15 % das linhas de uma tabela,
um FULL TABLE SCAN geralmente mais
rpido do que o acesso pelo ndice.
Quando o acesso por ndice causar lentido ao
invs de apresentar um ganho de performance
pode utilizar algumas tcnicas para eliminar o uso
do ndice

Professor Mst. Roberto Schaefer

66

Informar os campos que devem


aparecer na consulta, evitando utilizar o
famoso select * from <NomeDaTabela>;
Quando for utilizar operadores de
comparao, evitar o uso do NOT em
condies de pesquisa, pois podem
diminuir a velocidade de recuperao de
dados porque todos os registros em
uma tabela so avaliados

Professor Mst. Roberto Schaefer

67

Analisar a possibilidade de se usar o


operador UNION ALL em substituio ao
UNION DISTINCT
Utilizar COUNT(1) ou COUNT
(NomeDoCampo) ao invs de COUNT(*)
Utilizar as funes COALESCE (retorna o
1 elemento no nulo) e IS NULL

Professor Mst. Roberto Schaefer

68

Utilizar variveis do tipo TABLE em


substituio a tabelas temporrias
No utilizar Functions, Stored
Procedure e Trigger
Utilizar ndices sempre que
necessrio

Professor Mst. Roberto Schaefer

69

Criar VIEWS sempre que uma


determinada query for executada
diversas vezes em pontos do sistema e
por diversos usurios
Otimizar a clausula WHERE:
Simples exemplos so o uso de > e
>=.
Se voc quer retornar todas as
pessoas de uma tabela que tem
idade > 3, use no where >=4,
dessa forma o banco no far o
scan das pginas at encontrar o 3

Professor Mst. Roberto Schaefer

70

Procurar utilizar na clausula WHERE


todos (ou a maioria) dos campos chave
ou que so indexados.
Mesmo que no tenha um valor, procure
estabelecer um intervalo e utiliz-lo.

Por exemplo: A data de um pedido ser


obrigatoriamente maior que a data do
cadastro do cliente e menor que a data
atual

Professor Mst. Roberto Schaefer

71

Usar sempre o tipo de dados correto para


armazenar os dados.
Por exemplo, no armazene sexo (M ou F)
em um campo VARCHAR, use apenas 1
caractere: CHAR(1) ou, nesse caso
especfico, o ENUM

Em JOINS de tipos de dados diferentes, o


SGBD vai ter que converter o tipo para o
outro tipo a fim de efetuar a comparao,
converta-o para o mesmo tipo ao efetuar a
query.
Exemplo ==>

Professor Mst. Roberto Schaefer

72

Por exemplo, se o atributo codigo_cliente da


tabela Cliente for Numeric(10) e o mesmo
atributo da tabela PEDIDO for Numeric(5),
converta-o para o mesmo tipo ao efetuar o
JOIN

Professor Mst. Roberto Schaefer

73

Substituir as clausulas "OR" por um novo


SELECT com o "UNION":
Exemplo: Select id_cliente from cliente
Where tipo = J OR (idade > 30 and tipo =
F)
Alterar para: Select id_cliente from cliente
Where tipo = J UNION Select id_cliente
from cliente Where idade > 30 and tipo = F

Evitar grandes operaes de classificao


envolvendo ORDER BY, GROUP BY e HAVING.
Subconjunto de dados so armazenados na
memria ou em disco sempre que operaes
de classificao so realizadas

Professor Mst. Roberto Schaefer

74

Ao realizar uma query, evitar o uso


de aspas em dados que so do tipo
inteiros, pois o SGBD converter os
caracteres para CHAR.
Por exemplo: SELECT codigo
FROM tbteste WHERE idade =
20

Professor Mst. Roberto Schaefer

75

Evitar a tcnica do curto-circuito:


Exemplo: ...Where @x=0 OR codigo=@X
Procure executar no banco a instruo j
montada:
Utilize:
SE @x > 0
Select nome from cliente WHERE
codigo = @X
SENO
Select nome from cliente

Professor Mst. Roberto Schaefer

76

Checkpoint:

Periodicamente, ou por necessidade, se faz


necessrio limpar as reas de buffer e o
arquivo de log de transaes (commit
forado)
O checkpoint s funciona em tabelas do tipo
InnoDB tabelas que aceitam transaes e
join, garantindo a integridade dos dados
atravs de Commit ou Rollback

Professor Mst. Roberto Schaefer

77

InnoDB implementa mecanismo de


checkpoint conhecido como " fuzzy
"checkpoint.
InnoDB libera pginas do banco de dados
alterados a partir da rea de buffer em
pequenos lotes.
No h necessidade de descarregar a rea de
buffer em um nico lote, o que, na prtica,
para o processamento das instrues SQL
do usurio durante o processo de
checkpoint.

Professor Mst. Roberto Schaefer

78

Durante a recuperao de falhas o


InnoDB procura o endereo do
ponto de verificao escrito nos
arquivos de log
Ele sabe que todas as modificaes
no banco de dados antes desse
endereo esto presentes na
imagem do disco do banco de
dados

Professor Mst. Roberto Schaefer

79

Como fazer o Checkpoint:


1. Parar o servio do MySQL Shutdown
2. Alterar o arquivo de inicalizao do
MySQL my.ini no Windows ou my.cnf
no Linux colocando
innodb_force_recovery = 4
3. Inicalizar o servio do MySQL
4. Colocar o banco de dados em uso
5. Voltar o arquivo de inicializao do
MySQL como estava anteriormente
6. Parar e reinicalizar o servio do MySQL

Professor Mst. Roberto Schaefer

80

Clusterizao:

A CLUSTERIZAO esta associada a garantia


da disponibilidade ou escalabilidade dos
dados no MySQL
A disponibilidade se refere capacidade de lidar
com, e, se necessrio recuperar, as falhas no host,
incluindo as falhas do MySQL, do sistema
operacional ou do hardware
A escalabilidade refere-se a capacidade de espalhar
a carga de consultas de seu aplicativo em vrios
servidores MySQL

Professor Mst. Roberto Schaefer

81

No MySQL temos duas solues para resolver


as questes de disponibilidade e
escalabilidade:
MySQL Replication
MySQL Cluster o mais adequado para nosso
caso uma soluo sncrona que permite
que vrias instncias de MySQL entrem em
ao simultaneamente

Professor Mst. Roberto Schaefer

Ao contrrio da replicao, os dados em


um cluster podem ser lidos ou escritos
em qualquer n do cluster, e a
informao distribuda para os outros
ns.
82

Vantagens:
Oferece mltiplas escritas e
leituras nos dados armazenados
Prevem controle de falha
automtico entre ns, garantindo
que somente o n ativo ser
afetado
Dados atualizados em um ns
automaticamente distribudos para
os demais ns

Professor Mst. Roberto Schaefer

83

Desvantagens:
Disponibilidade limitada de
plataformas
Ns dentro de um cluster deve ser
ligado atravs de uma LAN;
Ns separados geograficamente
no so suportados
Pode-se replicar a partir de um
cluster para outro usando a
replicao MySQL

Professor Mst. Roberto Schaefer

84

Usos recomendados:
Os aplicativos que precisam de
disponibilidade muito alta,
como as telecomunicaes e
bancrio.
Os aplicativos que requerem um
nmero igual ou maior de
gravao em relao leitura.

Professor Mst. Roberto Schaefer

85

O MySQL possui recursos para implementar o


cluster nativamente, ou seja, no preciso
instalar nenhum software adicional, alm da
verso do MySQL j preparada para receber o
cluster
NDBCluster o componente do MySQL que
permite a criao de clusters e funciona como
um engine do banco de dados
O cluster do MySQL age de forma transparente,
ou seja, a aplicao cliente no precisa saber
que o cluster do MySQL est sendo utilizado

Professor Mst. Roberto Schaefer

86

Do ponto de vista de desenvolvimento, no


h nenhuma mudana significativa: basta
apenas continuar conectando em um
endereo IP normalmente
J para quem administra preciso cuidados
especiais
- algumas configuraes no so replicadas
pelo cluster.

Professor Mst. Roberto Schaefer

Por exemplo, os logins e as permisses


devem ser configuras nos servidores de
forma independente
87

Professor Mst. Roberto Schaefer

88

Arquitetura do MySQL:

Professor Mst. Roberto Schaefer

89

A arquitetura interna do MySQL provida de


duas camadas principais:
# camada de parser e otimizao de consultas SQL e
# camada onde esto conectadas as Engenharias de
Armazenamento - Stored Engine - de forma
modular

A Engenharia de Armazenamento INNODB, tem


no diretrio do banco de dados um arquivo
.frm, que armazena a estrutura da tabela.
Os dados e os ndices ficam localizados em um
tablespace no mesmo diretrio.

Professor Mst. Roberto Schaefer

90

O INNODB tem um tablespace


padro de nome ibdata que
utilizado para armazenar ndices e
dados de todas as tabelas de todos
os bancos de dados contidos em um
servidor MySQL.
Pode-se configurar tablespaces em
locais personalizados do filesystem ou
utilizar um tablespace para cada tabela
criada.

Professor Mst. Roberto Schaefer

91

INNODB tem multi-versionamento e bloqueio


em nvel de linha, ou seja, caso uma transao
A esteja atualizando uma determinada linha de
uma tabela, esta ser bloqueada at que haja
um COMMIT ou ROLLBACK
O multi-versionamento prov transao uma
viso prpria do estado do banco de dados,
combinado com o bloqueio em nvel de linha,
prov o mnimo possvel de contenes

Professor Mst. Roberto Schaefer

92

O tablespace do INNODB portvel


e pode ser copiado diretamente
para outro servidor, juntamente
com os arquivos .frm
Alguns pontos devem ser
analisados com cuidado para que
no haja problemas com o backup
fsico do banco de dados

Professor Mst. Roberto Schaefer

93

Log do MySQL:

Professor Mst. Roberto Schaefer

94

Tipos de tabelas:

Professor Mst. Roberto Schaefer

95

Tipos de tabelas (cont.):

Professor Mst. Roberto Schaefer

96

Recuperao de Base
Corrompida:

Antes de subir o banco, o argumento


dentro do arquivo de inicalizao do
MySQL dseve ser alterda:
innodb_force_recovery = 4
Faa um dump (backup) completo de todas
os bancos de dados
Com o dump feito todos os bancos de dados
devem ser dropados

Professor Mst. Roberto Schaefer

97

Mova o diretrio base do MySQL para outro


diretrio
Exemplo 'data-old'

Recrie a pasta 'data' do MySQL e coloque como


owner desta pasta o usurio de execuo do
'mysqld'
Crie um novo banco de dados e restaure o
backup feito
Banco recriado e informaes persistidas sem
mais erros de 'Innodb'
- INNODB prov auto_recovery aps um crash
ou queda no servidor onde o MySQL roda

Professor Mst. Roberto Schaefer

98

Instalao do MySQL Server


instalao do MySQL Workbench

Professor Mst. Roberto Schaefer

99

Download do MySQL:

Professor Mst. Roberto Schaefer

100

Professor Mst. Roberto Schaefer

101

Professor Mst. Roberto Schaefer

102

Professor Mst. Roberto Schaefer

103

Instalao completa:

Professor Mst. Roberto Schaefer

104

Professor Mst. Roberto Schaefer

105

Professor Mst. Roberto Schaefer

106

Professor Mst. Roberto Schaefer

107

Professor Mst. Roberto Schaefer

108

Professor Mst. Roberto Schaefer

109

Professor Mst. Roberto Schaefer

110

Professor Mst. Roberto Schaefer

111

Professor Mst. Roberto Schaefer

112

Professor Mst. Roberto Schaefer

113

Professor Mst. Roberto Schaefer

114

Professor Mst. Roberto Schaefer

115

Professor Mst. Roberto Schaefer

116

Professor Mst. Roberto Schaefer

117

Instalao s do MySQL Server:

Professor Mst. Roberto Schaefer

118

Professor Mst. Roberto Schaefer

119

Professor Mst. Roberto Schaefer

120

Professor Mst. Roberto Schaefer

121

Professor Mst. Roberto Schaefer

122

Professor Mst. Roberto Schaefer

123

Professor Mst. Roberto Schaefer

124

Professor Mst. Roberto Schaefer

125

Professor Mst. Roberto Schaefer

126

Professor Mst. Roberto Schaefer

127

Professor Mst. Roberto Schaefer

128

Professor Mst. Roberto Schaefer

129

Professor Mst. Roberto Schaefer

130

Professor Mst. Roberto Schaefer

131

Professor Mst. Roberto Schaefer

132

Professor Mst. Roberto Schaefer

133

Professor Mst. Roberto Schaefer

134

Professor Mst. Roberto Schaefer

135

Professor Mst. Roberto Schaefer

136

Professor Mst. Roberto Schaefer

137

Professor Mst. Roberto Schaefer

138

Instalao s do MySQL
Workbench:

Professor Mst. Roberto Schaefer

139

Professor Mst. Roberto Schaefer

140

Professor Mst. Roberto Schaefer

141

Professor Mst. Roberto Schaefer

142

Professor Mst. Roberto Schaefer

143

Professor Mst. Roberto Schaefer

144

Professor Mst. Roberto Schaefer

145

Desinstalao:

Professor Mst. Roberto Schaefer

146

Professor Mst. Roberto Schaefer

147

Professor Mst. Roberto Schaefer

148

Professor Mst. Roberto Schaefer

149

Servio do MySQL

Professor Mst. Roberto Schaefer

150

Professor Mst. Roberto Schaefer

151

Professor Mst. Roberto Schaefer

152

Professor Mst. Roberto Schaefer

153

Professor Mst. Roberto Schaefer

154

Professor Mst. Roberto Schaefer

155

Definio de instncias de
acesso ao MySQL

Professor Mst. Roberto Schaefer

156

Professor Mst. Roberto Schaefer

157

Professor Mst. Roberto Schaefer

158

Professor Mst. Roberto Schaefer

159

Professor Mst. Roberto Schaefer

160

Professor Mst. Roberto Schaefer

161

Professor Mst. Roberto Schaefer

162

Professor Mst. Roberto Schaefer

163

Professor Mst. Roberto Schaefer

164

Professor Mst. Roberto Schaefer

165

Professor Mst. Roberto Schaefer

166

Professor Mst. Roberto Schaefer

167

Mdulo Server Administrator:

Professor Mst. Roberto Schaefer

168

Professor Mst. Roberto Schaefer

169

Professor Mst. Roberto Schaefer

170

Professor Mst. Roberto Schaefer

171

Professor Mst. Roberto Schaefer

172

Professor Mst. Roberto Schaefer

173

Professor Mst. Roberto Schaefer

174

Professor Mst. Roberto Schaefer

175

Professor Mst. Roberto Schaefer

176

Professor Mst. Roberto Schaefer

177

Professor Mst. Roberto Schaefer

178

Mdulo SQL Development (Editor)

Professor Mst. Roberto Schaefer

179

Professor Mst. Roberto Schaefer

180

Professor Mst. Roberto Schaefer

181

Mdulo Data Modeling

Professor Mst. Roberto Schaefer

182

Professor Mst. Roberto Schaefer

183

Professor Mst. Roberto Schaefer

184

Configuraes:

Professor Mst. Roberto Schaefer

185

Professor Mst. Roberto Schaefer

186

Professor Mst. Roberto Schaefer

187

Professor Mst. Roberto Schaefer

188

Professor Mst. Roberto Schaefer

189

Professor Mst. Roberto Schaefer

190

Professor Mst. Roberto Schaefer

191

Professor Mst. Roberto Schaefer

192

Professor Mst. Roberto Schaefer

193

Professor Mst. Roberto Schaefer

194

Bancos de Dados de controle do


MySQL:
1. Information_schema
2. Performance_schema
3. MySQL

Professor Mst. Roberto Schaefer

195

1. information_schema:
Fornece acesso ao banco de dados de
metadados , com informaes sobre o servidor
MySQL como:
nome de um banco de dados ou tabela
tipo de dados de uma coluna
privilgios de acesso.

Outros termos que so utilizados para obter


essas informaes so: dicionrio de dados e
catlogo do sistema .
Professor Mst. Roberto Schaefer

196

um banco de dados dentro de cada instncia


MySQL
local que armazena informaes sobre todos os
outros bancos de dados que o servidor MySQL
mantm

formado por vrias tabelas somente para


leitura
No h nenhum diretrio de banco de dados
com esse nome.
Professor Mst. Roberto Schaefer

197

2. performance_schema:
Monitora a execuo interna do MySQL
Server em um nvel baixo, em tempo de
execuo
Ele se concentra principalmente em dados
de desempenho, se diferenciando do
INFORMATION_SCHEMA que serve para a
inspeo de metadados.
Professor Mst. Roberto Schaefer

198

Ele monitora eventos do servidor


Em geral, um evento pode ser uma chamada de
funo, uma espera para o sistema operacional,
um estgio de uma execuo da instruo SQL,
tais como a anlise ou classificao, ou uma
declarao completa ou grupo de instrues

Sua configurao pode ser modificada


dinamicamente por atualizao de tabelas no
performance_schema atravs de comandos
SQL.
As alteraes de configurao afetam a coleta de
dados imediatamente.
Professor Mst. Roberto Schaefer

199

3. mysql:
Banco de dados que guarda as
informaes necessrias para
administrao geral do MySQL Server
Por exemplo, os dados dos usurios
catalogados no server, bem como, os
databases, servidores, eventos, ...

Professor Mst. Roberto Schaefer

200

Uso de outras ferramentas

Professor Mst. Roberto Schaefer

201

Ferramentas de Monitoramento
Algumas ferramentas grtis utilizadas para o MYSQL so:

Cacti

Professor Mst. Roberto Schaefer

202

Algumas ferramentas pagas utilizadas para o MYSQL


so:

Professor Mst. Roberto Schaefer

203

Estatsticas

Professor Mst. Roberto Schaefer

204

Servio de Controle

Professor Mst. Roberto Schaefer

205

Nagios

Professor Mst. Roberto Schaefer

206

Professor Mst. Roberto Schaefer

207

INSTALAO E
CONFIGURAO DE
SERVIDORES DE BANCO DE
DADOS POSTGRESQL

Professor Mst. Roberto Schaefer

208

INSTALAO E CONFIGURAO DO SGBD


POSTGRESQL:

O PostgreSQL pode ser instalado por qualquer


usurio sem privilgios, porque nenhum acesso de
super-usurio (root) necessrio.
Baixe o programa em
http://postgrecenter.pgopen.com.br/
1 passo:

Professor Mst. Roberto Schaefer

209

Professor Mst. Roberto Schaefer

210

Professor Mst. Roberto Schaefer

211

Se voc desejar que o PostgreSQL seja instalado como


um servio no Windows habilite o checkbox "Instalar como
servio".
l Aqui vem uma das partes mais crticas da instalao,
que a definio do usurio que vai rodar o servio.
l Esse usurio no um usurio do SGBD, mas sim do
prprio Windows.
l Este usurio no pode ser administrador e tambm no
pode ser um usurio sem senha.

Professor Mst. Roberto Schaefer

212

Professor Mst. Roberto Schaefer

213

Nessa tela ser definida a linguagem que o


banco de dados ir trabalhar. O Postgresql
suporta vrias linguagens de banco, mas
necessrio baixar mdulos extras para
funcionar. Neste caso vamos manter o
PL/pgsql (Procedure Languagem
Postgresql) que a linguagem procedural
do Postgresql.

Professor Mst. Roberto Schaefer

214

Instalao de Mdulos
opcionais. Marque se desejar,
abaixo segue uma breve
descrio de cada item:

Professor Mst. Roberto Schaefer

215

Incio da Instalao:

Professor Mst. Roberto Schaefer

216

Concluso da Instalao.

Professor Mst. Roberto Schaefer

217

Administrando o Postgre com


o pgAdmin III

Professor Mst. Roberto Schaefer

218

Professor Mst. Roberto Schaefer

219

Professor Mst. Roberto Schaefer

220

Professor Mst. Roberto Schaefer

221

Professor Mst. Roberto Schaefer

222

Professor Mst. Roberto Schaefer

223

Professor Mst. Roberto Schaefer

224

Professor Mst. Roberto Schaefer

225

Professor Mst. Roberto Schaefer

226

Professor Mst. Roberto Schaefer

227

Professor Mst. Roberto Schaefer

228

Professor Mst. Roberto Schaefer

229

Professor Mst. Roberto Schaefer

230

Ferramentas WEB para Administrao


phpMyAdmin e phpPgAdmin

Professor Mst. Roberto Schaefer

231

Professor Mst. Roberto Schaefer

232

Professor Mst. Roberto Schaefer

233

Professor Mst. Roberto Schaefer

234

Professor Mst. Roberto Schaefer

235

Professor Mst. Roberto Schaefer

236

Professor Mst. Roberto Schaefer

237

Professor Mst. Roberto Schaefer

238

Professor Mst. Roberto Schaefer

239

Professor Mst. Roberto Schaefer

240

Professor Mst. Roberto Schaefer

241

COMPARANDO O MySQL x PostgreSQL


l

MySQL ou Postgre, qual usar?


l

Ambos so muito bons e no fazem feio


diante das alternativas pagas.
Ambos possuem recursos e vantagens
em comum , o que significa que , para a
maioria das aplica es eles podem ser
usados.
Na verdade , o correto n o tentar
descobrir qual o melhor , mas em que
situao um ou outro deve ser utilizado.

Professor Mst. Roberto Schaefer

242

O PostgreSQL otimizado para


aplicaes orientada a objetos.
O MySQL muito bem aceito para
sistemas de com rcio eletr nico de
porte m dio /alto , j que esse SGBD
capaz de lidar de maneira satisfat ria e
eficiente com o volume de dados gerado
pelas operaes de consulta e venda.
O MySQL , por sua vez , focado na
agilidade.

Professor Mst. Roberto Schaefer

243

Assim , se sua aplica o necessita de


retornos r pidos e n o envolve
opera es complexas , o MySQL a
opo mais adequada, pois otimizado
para proporcionar processamento rpido
dos dados e tempo curto de resposta
sem exigir muito do hardware.
l

Se voc precisa, por exemplo, de um banco


de dados para armazenar o conte do do
seu site, de seu frum ou necessita manter
um cadastro de usu rios de um portal , o
MySQL serve como uma luva , pois tais
aplica es n o necessitam dos recursos
avanados que o PostgreSQL oferece.

Professor Mst. Roberto Schaefer

244

Professor Mst. Roberto Schaefer

245

También podría gustarte