Você está na página 1de 22

PostgreSQL

Daphine Fiuza Guilherme Vemado Gioconda Souza Julio Mariano

Informacoes gerais
O PostgreSQL e um poderoso sistema gerenciador de
banco de dados objeto-relacional de codigo aberto.

Tem mais de 15 anos de desenvolvimento ativo e uma


arquitetura que comprovadamente ganhou forte reputacao de confiabilidade, integridade de dados e conformidade a padroes.

Roda em todos os grandes sistemas operacionais,


incluindo GNU/Linux, Unix, e Windows.

E totalmente compativel com ACID.

Tem suporte completo a chaves estrangeiras, juncoes


(JOINs), visoes, triggers e procedimentos armazenados (em multiplas linguagens).

Inclui a maior parte dos tipos de dados do ISO


SQL:1999, incluindo INTEGER, NUMERIC, BOOLEAN, CHAR, VARCHAR, DATE, e TIMESTAMP.

Suporta tambem o armazenamento de objetos


binarios, incluindo figuras, sons ou videos. Possui interfaces nativas de programacao para C/C++, Java, .Net, Perl, Python, Ruby, Tcl, ODBC, entre outros.

Alguns limites do PostgreSQL estao incluidos na tabela


abaixo.

Caractersticas
Tem as principais caractersticas desejadas em um
banco de dados:

Recuperao Automtica aps crash de sistema (WAL


write-ahead-logging);

MVCC (controle de concorrncia de multi-verso).


Neste mecanismo, processos de leitura no bloqueiam processos de escrita e vice-versa, reduzindo drasticamente (s vezes,eliminando) a conteno entre transaes concorrentes e paralisao parcial ou completa (deadlock);

Logging de transaes;

Commit / Rollback / Checkpoints;


Triggers / Stored Procedures; Constraints / Foreign Keys; Backup On-line;

Tamanho ilimitado de registro: no impe limites no


tamanho de armazenamento dos tipos de dados. Com a arquitetura TOAST (The Oversized-Attribute Storage Technique), os nicos limites de armazenamento de tipos de dados so impostos pela configurao do hardware. Se um tipo de dado no se ajustar ao tamanho do bloco, atributos nicos podem ser automaticamente comprimidos ou movidos, ou ainda comprimidos fora do registro e armazenados independentemente, dentro de uma tabela relacionada. possvel armazenar registros longos, de qualquer tamanho e com tima performance.

Mltiplos tipos de ndice: suporta ndices B-Tree, rTree


e Hash, permitindo que a escolha o ndice mais eficiente para cada aplicao.

ndices em Cluster: Cada tabela pode suportar um


ndice em 'cluster' (clustered index). Este ndice classifica fisicamente os dados, na mesma seqncia como especificada pelo ndice. Um ndice de cluster permite a maior velocidade possvel na recuperao de dados - melhorando a performance geral do banco de dados.

Controle de concorrncia
Diferentemente dos sistemas gerenciadores de banco
de dados tradicionais, que usam bloqueios para controlar a concorrncia, o PostgreSQL mantem a consistencia dos dados utilizando o modelo MVCC.

Isto significa que, ao consultar o banco de dados cada


transacao enxerga um instantaneo (snapshot) dos dados (uma versao do banco de dados) como estes eram ha um tempo atras, sem levar em consideracao o estado corrente dos dados subjacentes.

Isolamento
O padrao SQL define quatro niveis de isolamento de
transacao em termos de tres fenomenos que devem ser evitados entre transacoes simultaneas. Os fenomenos nao desejados sao:

leitura suja leitura que nao pode ser repetida leitura fantasma

No PostgreSQL pode ser requisitado qualquer um


dos quatros niveis de isolamento padrao. Porem, internamente s existem dois niveis de isolamento distintos, correspondendo aos niveis de isolamento Read Committed e Serializable.
Quando e selecionado o nivel de isolamento Read Committed realmente obtem-se Read Committed, mas quando e selecionado Repeatable Read na realidade e obtido Serializable.

O motivo pelo qual o PostgreSQL s disponibiliza dois


niveis de isolamento, e porque esta e a unica forma de mapear os niveis de isolamento padrao na arquitetura de controle de simultaneidade multiversao que faz sentido.

E utilizado o comando SET TRANSACTION para


definir o nivel de isolamento da transacao.

Bloqueio explcito
O PostgreSQL fornece varios modos de bloqueio para
controlar o acesso simultaneo aos dados nas tabelas. Estes modos podem ser utilizados para controlar o bloqueio pela transacao, nas situacoes onde o MVCC nao produz o comportamento adequado. Tambem, a maioria dos comandos do PostgreSQL obtem, automaticamente, bloqueios nos modos apropriados para garantir que as tabelas referenciadas nao serao excluidas ou alteradas de forma incompativel enquanto o comando estiver executando.

Deadlock
O PostgreSQL detecta automaticamente as situacoes
de deadlock, resolvendo-os interrompendo uma das transacoes envolvidas, permitindo que a outra prossiga.
Exatamente qual transacao ser interrompida e dificil prever, nao se devendo confiar nesta previsao.

Join
A clausula JOIN, se estiver presente, declara o nome de uma
funcao estimadora de seletividade de juncao para o operador (Deve ser observado que e declarado o nome de uma funcao, e nao o nome de operador). O planejador/otimizador inicia gerando planos para varrer individualmente cada relao (tabela) utilizada no comando. Os planos possveis so determinados pelos ndices disponveis em cada relao.

Aps terem sido encontrados todos os planos viveis para varrer


uma nica relao, so criados planos para juntar as relaes. Nested Loop Join Merge Join Hash Join

Hash
A clausula HASHES, se estiver presente, informa ao
sistema que e permitido utilizar o metodo de juncao por hash em uma juncao baseada neste operador.

Merge
A clausula MERGES, se estiver presente, informa ao
sistema que e permitido utilizar o metodo de juncao por mesclagem (merge) em uma juncao baseada neste operador.

Checkpoint
O PostgreSQL realiza Checkpoint pot intervalo de
tempo ou aps preencher x arquivos de log de transao, o que ocorrer primeiro.

Quanto maior a quantidade de buffers compartilhados,


maior ser o tempo de checkpoint.

ndice
O PostgreSQL disponibiliza varios tipos de indice: Btree (arvore B), R-tree (arvore R), Hash 1 e GiST. Cada tipo de indice utiliza um algoritmo diferente, mais apropriado para tipos diferentes de consulta. Por padrao, o comando CREATE INDEX cria um indice Btree, adequado para a maioria das situacoes comuns.

Observaes
O PostgreSQL oferece o mais baixo custo total de
propriedade (TCO), reduzindo de forma significativa seus custos de administrao, suporte e licenciamento e, ao mesmo tempo, fornecendo alta performance, confiabilidade e escalabilidade.

uma soluo perfeita e vivel para as necessidades


de pequenas e mdias empresas, sendo uma alternativa aos tradicionais Bancos de dados.

Quem usa o PostgreSQL?


Departamento de Estado dos EUA

APPLE
Caixa Econmica Federal Embrapa

NASA
SONY Skype

SUN
Yahoo

Parte prtica

Troca de delimitadores. Incluso de dados a partir da funo COPY.

Otimizaes
Estratgia Teste inicial, nenhuma estratgia aplicada. 1 Teste 2 Teste 3 Teste 4 Teste 5 Teste Tempo mdio 271,51s. 136,64s. 170,58s. 129,37s. 182,66s. 178,15s. ndice Tabela producao Campo tipo_id 108,97s. 91,93s. 147,11s. 130,55s. 177,62s. 131,23s.

Criao de chave externa com ndice Tabela Equipe Campos producaoID, pessoaID.

95,22s.

126,2s.

133,23s.

129,67s.

141,64s.

125,19s.

Criao dos ndices nicos para tabela pessoa(pessoaID) e producao(producaoID)

109,71s.

112,5s.

122,03

130,5s.

125,26s.

120s.

Aumento da varivel work_mem (600mb) e effective_cache_size (600mb)

80,76s.

100,52s.

81,64s.

82,42s.

83,56s.

85,78 s.

Desabilitar Write Ahead Log (fsync() e full_page_writes())

65,12s.

65,12s

65,12s

65,12s

65,12s

65,12s.