SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.
SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.
Successfully reported this slideshow.
Activate your 14 day free trial to unlock unlimited reading.
1.
Performance Tuning para banco de dados
PostgreSQL
Fernando Ike de Oliveira
B2BR - Grupo TBA
Agosto de 2008 / Congresso Internacional Sociedade e
Governo Eletrônico 2008
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
2.
Para não cometer gafes...
Como fala/escreve mesmo?
Escreve-se PostgreSQL ou postgres
Pronúncia-se postígres-és-qüi-uel ou postígres
Não se diz/escreve: Postgree, PostrGREE, Postgrí
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
3.
Qual a velocidade máxima de um carro supersônico?
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
4.
Características de um carro supersônico. . .
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
5.
Qual a velocidade máxima de um dragster?
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
6.
Qual a velocidade máxima de um fusca?
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
7.
Qual a velocidade máxima de um carro de rolemã?
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
8.
O banco está lento!
Problemas comuns. . .
Proporcionalmente, os problemas de lentidão estão em:
60% dos problemas são relacionados ao mau uso de
expressões SQL.
20% dos problemas são relacionados a má modelagem do
banco de dados.
10% dos problemas são relacionados a má configuração
do SGDB.
10% dos problemas são relacionados a má configuração
do Sistema Operacional.
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
9.
O banco está lento!
Equívocos de arquiteturas. . .
Concentração de regras de negócio na aplicação para
processos em lote.
Integridade referencial na aplicação.
Mal dimensionamento de I/O (CPU, Plataforma, Disco).
Ambientes virtualizados (Vmware, XEN, etc..) em
AMD64/EMT64.
Uso de configurações padrões do SO e/ou do PostgreSQL.
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
10.
Melhores escolhas
Melhor equipamento. . .
Servidores dedicados para o PostgreSQL
Storage com Fiber Channel, iSCSI: Grupos de RAID
dedicados
SCSI > SAS > SATA > IDE
RAID 5 ou 10: por Hardware
Mais memória! (Até 4GB em 32 bits)
Processadores de 64 bits: Performance até 3 vezes do
que os 32 bits (AMD64 e EMT64 - Intel)
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
11.
Melhores escolhas
Melhor Sistema Operacional. . .
Sistemas Operacionais *nix: Linux (Debian, Gentoo),
FreeBSD, Solaris, etc
Em Linux: use Sistemas de arquivos XFS (noatime), Ext3
(writeback, noatime), EXT2
Instale a última versão do PostgreSQL (atualmente 8.3) e
à partir do código-fonte
Não usar serviços concorrentes (Apache, MySQL,
SAMBA...) em discos, semáforos e shared memory
Usar, se possível, um kernel (linux) mais recente (e
estável)
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
12.
Ajustes de Performance
Parâmetros do Sistema Operacional. . .
echo “2” > /proc/sys/vm/overcommit_memory
echo “25%” > /proc/sys/kernel/shmmax
echo “25%/64” > /proc/sys/kernel/shmall
echo “deadline” > /sys/block/sda/queue/scheduler
echo “250 32000 100 128” > /proc/sys/kernel/sem
echo “65536” > /proc/sys/fs/file-max
ethtool -s eth0 speed 1000 duplex full autoneg off
echo “16777216” > /proc/sys/net/core/rmem_default
echo “16777216” > /proc/sys/net/core/wmem_default
echo “16777216” > /proc/sys/net/core/wmem_max
echo “16777216” > /proc/sys/net/core/rmem_max
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
13.
Ajustes de Performance
Limites do Sistema Operacional. . .
no shell
pmanson:˜# su - postgres
postgres@pmanson:˜$ ulimit 65535
/etc/security/limits.conf
postgres soft nofile 4096
postgres soft nproc 4096
postgres hard nofile 63536
postgres hard nproc 63536
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
14.
Como organizar discos
Melhor I/O. . .
Discos ou partições distintos para:
Logs de transações (WAL)
Índices: Ext2
Tabelas (particionar tabelas grandes)
Tablespace temporário (em ambiente BI)*
Archives
SO + PostgreSQL
Log de Sistema
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
15.
postgresql.conf
Memória. . .
postgresql.conf
max_connections: O menor número possível
shared_buffers: 33% do total -> Para operações em
execução
temp_buffers: Acesso às tabelas temporárias
work_mem: Para agregação, ordenação, consultas
complexas
maintenance_work_mem: 75% da maior tabela ou índice
max_fsm_pages: Máximo de páginas necessárias p/
mapear espaço livre. Importante para operações de
UPDATE/DELETE.
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
16.
postgresql.conf
Discos e WAL. . .
postgresql.conf
wal_sync_method: open_sync, fdatasync, open_datasync
wal_buffers: tamanho do cache para gravação do WAL
commit_delay: Permite efetivar várias transações na
mesma chamada de fsync
checkpoint_segments: tamanho do cache em disco para
operações de escrita
checkpoint_timeout: intervalo entre os checkpoints
wal_buffers: 8192kB -> 16GB
bgwriter: ?????
join_collapse_limit = > 8
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
17.
O terror dos DBA’s. . .
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
18.
O terror dos DBA’s. . .
O terror dos DBA’s(Object-Relation Mapping). . .
Use ORM que permitam expressões SQL.
Expressões em Object Query Language ainda não usam o
melhor plano para consultas.
O mundo ainda não é todo objeto.
Servidores de Aplicação tem pool de conexão, use-o!
Você não vê mas as vezes o seu ORM faz. . .
SELECT * FROM cadastro;
SELECT * FROM cadastro, venda, produto;
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
19.
Aplicações bem construídas. . .
. . . Mas meu prazo não permite!
Boas práticas para desenvolvimento de aplicações
Modele bem o banco de dados prevendo grande
crescimento da base e acesso concorrente.
Operações pesadas, execute com Funções/Store
Procedures direto no PostgreSQL.
De preferência para o padrão SQL/ISO(2008).
Considere que um dia a aplicação tenha que usar
múltiplas instâncias de banco de dados.
Evite uso de LIKE, ILIKE. Prefira Full Text
Search(tsearch2)
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
20.
. . . e seu DBA feliz!
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
21.
Ferramentas auxiliares
Tuning SQL. . .
EXPLAIN ANALYZE
test_base=# EXPLAIN ANALYZE SELECT foo FROM
bar;
Ferramentas gráficas
Pgfouine
Pgadmin3
PhpPgAdmin
Cedrus
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
22.
Pgfouine - http://pgfouine.projects.postgresql.org
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
23.
Pgadmin3 - http://www.pgadmin.org/
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
24.
Pgadmin3 - http://www.pgadmin.org/
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
25.
PhpPgAdmin - http://phppgadmin.sourceforge.net/
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
26.
PhpPgAdmin - http://phppgadmin.sourceforge.net/
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
27.
Cedrus - http://sourceforge.net/projects/cedrus
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
28.
Cedrus - http://sourceforge.net/projects/cedrus
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
29.
Ferramentas auxiliares
Manutenção. . .
Autovacuum X Vacuum
Depende do uso (Aplicações Web, OLTI, BI)
Vacuum
vacuum_cost_delay: tempo de atraso para vacuum
executar automaticamente nas tabelas grandes
Autovacuum (Habilitado por padrão à partir do 8.3)
autovacuum_naptime: tempo de espera para execução do
autovacuum.
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
30.
Ferramentas auxiliares
Ferramentas de Stress. . .
Pgbench: no diretório do contrib do PostgresSQL, padrão
de transações do tipo TPC-B.
DBT-2: Ferramenta da OSDL, padrão de transações do
tipo TPC-C.
BenchmarkSQL: Ferramenta Java para benchmark em
SQL para vários banco de dados (JDBC), padrão de
transações do tipo TPC-C.
Jmeter: Ferramenta Java genérica para testes de stress,
usado para aplicações (Web, ...) e também pode ser direto
para um banco de dados.
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
31.
Quando o tuning não resolve. . .
Quando o tuning não resolve. . .
Escalabilidade vertical:
Mais e melhores discos;
Mais memória;
Melhor processador (quad core, 64bits)
Escalabilidade horizontal:
Pgpool I (distribuição de carga de leitura e pool de
conexões)
PgPool II (PgPool I + paralelização de grandes consultas)
Slony I (Replicação Multi-Master Assíncrona)
Bucardo (Replicação Multí-Master Assíncrona)
Warm Stand By/Log Shipping
Pgbouncer + PL/Proxy + Slony
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
32.
Links
Documentação Oficial:
http://www.postgresql.org/docs/
Power PostgreSQL:
http://www.powerpostgresql.com/
PostgreSQL Brasil:
http://www.postgresql.org.br/
Teste de stress com soluções livres e proprietárias:
http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=7053&pagina=5
Benchmark Brou-Ha-Ha:
http://blogs.ittoolbox.com/database/soup/archives/benchmark-brouhaha-17939
BenchmarkSQL, DBT-2 - SourceForge:
http://www.sf.net
Jmeter:
http://jakarta.apache.org/jmeter/
Tsung:
http://tsung.erlang-projects.org/
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
33.
Dúvidas
Links e Listas de discussão:
http://archives.postgresql.org/pgsql-performance/
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
http://www.postgresql.org/docs/current/static/performance-tips.html
http://www.revsys.com/writings/postgresql-performance.html
http://www.powerpostgresql.com/Docs
http://wiki.postgresql.org/wiki/Special:Search?search=performance&go=Go
IRC irc.freenodes.net:
#postgresql
#postgresql-br
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo
34.
Conclusão
Contatos:
fernando.ike@b2br.com.br
fernando.ike@gmail.com
http://www.midstorm.org/~fike/weblog
PGCon Brasil 2008
http://pgcon.postgresql.org.br
Fernando Ike de Oliveira PostgreSQL: O elefante mais rápido que o leopardo