Você está na página 1de 32

 Otimização significa utilizar todos os recursos

disponíveis para aproveitar o máximo da


aplicação, por isso hardware e software devem
estar sempre em equilíbrio.
 Indexação de colunas.

 Melhores práticas do uso da linguagem SQL


nas consultas.

 Configurações apropriadas do servidor.


 Indexar significa manter armazenado
externamente a uma tabela uma de suas
colunas ordenada, fazendo com que cada linha
deste arquivo de indexação alem do valor da
coluna em questão, armazene também uma
referencia do registro ao qual seu valor diz
respeito.
Exemplo de funcionamento de uma tabela indexada
 Há mais de um fator para levar em consideração quanto a indexação
de colunas: o mecanismo de busca nas colunas indexadas. Existem
diversos algoritmos de busca que podem ser usados nesses casos.

 Os mecanimos de busca suportados por Postgresql sao:

 Btree

 Hash

 Gist

 gin
A indexação deve ser utilizada Preferencialmente
quando a coluna em questão for usada como
parâmetro nos
seguintes argumentos:

 Where, join – Nos casos em que colunas indexadas


serão parâmetros de filtro, as consultas encerram a
busca assim que identificarem a impossibilidade
de não encontrarem o resultado solicitado
 Group by, order by – As colunas indexadas
separam e ordenam os valores da coluna,
interrompendo assim que identificarem a
impossibilidade de não encontrarem o
resultado solicitado.

 Distinct - Em certas ocasiões, esse comando


possui comportamento semelhante ao Group
by,podendo melhorar sua velocidade de
processamento se as colunas com parâmetro
where estiver indexadas.
 Funções min e max – Para estas funções, no
primeiro caso os algoritmos de busca já sabem
que irão encontrar os valores mínimos (min)
nas primeiras linhas da coluna ou nas ultimas
linhas, caso seja valores Maximo (max)
 É importante destacar que a indexação dever
ser utilizada com sabedoria, pois transformar
todas as colunas de todas as tabelas em índices
poderá trazer muito mais desvantagem do que
benefícios.

 Indexar somente as tabelas mais consultadas


 Isolamento de índices
 Atualização dos índices
 Inserção de informação
 Comparação de informações
 Evitar uso da clausula IN
 Evitar uso de sub-selects
 Escolha do tipo de dados
 Estatísticas do servidor (comando ANALYSE)
 Desfragmentação e Limpeza (VACUUM)
 Analise de expressões SQL (EXPLAIN)
A clausula IN reduz de forma significativa o
Desempenho do servidor de banco de dados,
Isso ocorre por que esta clausula não executa
Corretamente a utilização de índices para
realizar a busca interna

SELECT * FROM tabela WHERE ID IN (3, 4, 5)

Ao invés de utilizarmos a clausula in podemos utilizar o


seguinte
comando para a consulta ser mais rápida

SELECT * FROM tabela WHERE ID = 3 OR ID = 4 OR ID = 5


O SUB-SELECT é uma das clausulas que devem
ser evitadas ao máximo de se utilizá-las, pois
geralmente consultas que utilizam o SUB-SELECT
tendem a ser extremamente demoradas
dependendo do tamanho de banco de dados.

Normalmente utiliza-se SUB-SELECT’s em SQL’s


que resultem apenas uma ou pouquíssimas
linhas.
Sintaxe do sub-select

SELECT coluna FROM tabela WHERE expressao


operador (SELECT coluna FROM tabela
WHERE...)
A escolha do de dados para cada campo
melhora a performance de expressões SQL.
Alguns dos benefícios são:
 Maior velocidade de processamento nas
consultas
 Redução do espaço em disco devido a não
manutenção dos tipos de dados maiores que o
necessário
ANALYZE coleta estatísticas sobre o conteúdo
das tabelas no banco de dados, e armazena os
resultados na tabela do sistema pg_statistic.
Posteriormente, o planejador de comandos
utiliza estas estatísticas para ajudar a
determinar os planos de execução mais
eficientes para consultas.

Sem nenhum parâmetro, ANALYZE analisa


todas as tabelas no banco de dados atual. Com
um parâmetro, ANALYZE analisa somente
uma tabela. Além disso, é possível dar uma
lista de nomes de colunas, caso em que apenas
as estatísticas para as colunas são coletados.
Sintaxe do comando

ANALYZE [VERBOSE] [TABELA(COLUNA)]


A palavra VACUUM vem do idioma inglês e ele
pode ser um substantivo (vácuo) ou um verbo
(limpar com aspirador de pó). Significados a parte,
o VACUUM limpa a sujeira das tabelas, e evita que
fiquem vácuos nos locais onde existiam registros.
Quando executado, ele faz uma varredura na
tabela em busca de dados marcados como inúteis e
exclui-os, posteriormente, realoca os registros de
forma que não fiquem espaços entre dois registros
Dependendo da forma que for usado, ele atualiza
as estatísticas utilizadas pelo otimizador para
determinar o modo mais eficiente de executar uma
consulta no PostgreSQL.
VACUUM [modo] [VERBOSE] [ANALYZE] [tabela]

MODO: Pode ser FULL ou FREEZE caso não for informado


Nenhum dos dois por padrão serão limpos apenas os espaços
de
informações desalocadas da tabela em questão.

VERBOSE: Se habilitada ira exibir informações detalhadas do


andamento do comando e seus resultados para cada tabela.

ANALYZE: Faz com que cada tabela atualize o arquivo de


estatísticas do postgre.
O comando EXPLAIN executa uma análise para
cada expressão ou união encontrada na
consulta, retornando uma linha (registro)
correspondente a sua análise. Com o comando
explain é possível analisar previamente consultas
SQL (nas operações de SELECT, INSERT, UPDATE,
DELETE,
EXECUTE, e DECLARE) tendo em vista saber como será o
comportamento das mesmas, e permitindo também
comparar diferentes expressões SQL para descobrir qual a
melhor para se atingir um resultado mais rápido.
Se preferir visualizar em milisegundos o tempo
de execução que o comando levaria, pode
também utilizar o comando EXPLAIN com a
opção ANALYSE.
No PostgreSQL existem algumas variáveis de
configuração que permitem melhorar a
performance do servidor são elas:

 Numero Maximo de comunicações simultâneas


 Buffers de memória compartilhado
 Memória de operações
 Tratamento de informações desalocadas
 Cachê
 Velocidade do disco rígido

Todas essas variáveis podem ser encontradas no


arquivo postgresql.conf
Variável responsável por o gerenciar o nº
máximo de conexões que o Postgre pode
Aceitar simultaneamente.

O ajuste ideal para a variável max_connection


depende de outros fatores como capacidade de
processamento da CPU, total de memória
disponível pro banco e a capacidade de
atendimento da rede em questão
No Postgre é possível determinar o tamanho do
buffer que o BD ira utilizar através da variável
shared_buffer.

Por padrão o valor da variável é de 32mb que é


considerado um valor baixo para um servidor de
banco de dados. Em casos nos quais o servidor é
dedicado pro banco de dados recomenda-se
separar 15% do total da memória para esta
variável.
A variavel work_mem é responsável por alocar
memória para a execução de operações
internas do banco ordenação de dados e
tabelas diretamente relacionadas com a
utilização de índices, por padrão essa variável é
inicializada com o valor de 1MB
Esta variável é interessante de ser utilizada
quando a aplicação realiza muitas inclusões e
inserções de registro, pois essa variável é que
define o numero de paginas que o comando
vacuum ira vasculhar por espaços deslocados.
É possível configurar o tamanho do cache
utilizado pelo postgreSQL alterando o valor da
variavel effective_cache_size por padrão essa
variável utiliza 128mb. Vale ressaltar que a
utilização de um cache maior favorece o
desempenho do servidor diminuindo o nº de
operações de I/O do Sistema Operacional.
A variável random_page_cost impacta
diretamente na seleção do tipo de plano de
acesso ao disco rígido para a leitura das
informações dos bancos de dados. Se o servidor
onde estiver o PostgresSQL utiliza HD do tipo
SCSI ou RAID é recomendado que seu valor
fique em 3 e 1, para HD’s do tipo SATA IDE
recomenda-se que o valor seja entre 4 e 5
 CPU
 Memória
 Discos
 Rede
 http://www.postgresql.org/docs/8.2/static/sql-
createindex.html

 http://pt.wikibooks.org/wiki/PostgreSQL_Pr%C3%A
1tico/Ap%C3%AAndices/Dicas_sobre_Desempenho_
e_Otimiza%C3%A7%C3%B5es_do_PostgreSQL

 Postgresql - Guia Do Programador 1a.ed. - 2008


Milani, Andre - Novatec

Você também pode gostar