Como fala/escreve mesmo? Escreve-se PostgreSQL ou postgres Pronncia-se postgres-s-qi-uel ou postgres No se diz/escreve: Postgree, PostrGREE, Postgr
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 congurao do SGDB. 10% dos problemas so relacionados a m congurao do Sistema Operacional.
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 conguraes padres do SO e/ou do PostgreSQL. Infra-estrutura concorrente (Rede, Storage...)
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 memria! (At 4GB em 32 bits) Processadores de 64 bits: Performance at 3 vezes do que os 32 bits (AMD64 e EMT64 - Intel)
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 verso do PostgreSQL (atualmente 8.3) e partir do cdigo-fonte No usar servios concorrentes (Apache, MySQL, SAMBA...) em discos, semforos e shared memory Usar, se possvel, um kernel (linux) mais recente (e estvel)
Ajustes de Performance
Parmetros 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 131072 > /proc/sys/fs/le-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
Ajustes de Performance
Limites do Sistema Operacional. . .
no shell pmanson:# su - postgres postgres@pmanson:$ ulimit 65535 /etc/security/limits.conf postgres postgres postgres postgres soft soft hard hard nole nproc nole nproc 4096 4096 63536 63536
Discos ou parties distintos para: Logs de transaes (WAL) ndices: Ext2 Tabelas (particionar tabelas grandes) Tablespace temporrio (em ambiente BI)* Archives SO + PostgreSQL Log de Sistema
postgresql.conf
Memria. . .
postgresql.conf max_connections: O menor nmero possvel shared_buffers: 33% do total -> Para operaes em execuo temp_buffers: Acesso s tabelas temporrias work_mem: Para agregao, ordenao, consultas complexas maintenance_work_mem: 75% da maior tabela ou ndice max_fsm_pages: Mximo de pginas necessrias p/ mapear espao livre. Importante para operaes de UPDATE/DELETE.
postgresql.conf
Discos e WAL. . .
postgresql.conf wal_sync_method: open_sync, fdatasync, open_datasync wal_buffers: tamanho do cache para gravao do WAL commit_delay: Permite efetivar vrias transaes na mesma chamada de fsync checkpoint_segments: > 64 checkpoint_completion_target: 0.5 0.7 checkpoint_timeout: 10min (depende) wal_buffers: 8192kB -> 16GB join_collapse_limit = > 8
postgresql.conf
Discos e WAL. . .
postgresql.conf
Discos e WAL. . .
postgresql.conf enable_bitmapscan = on|off enable_hashagg = on|off enable_hashjoin = on|off enable_indexscan = on|off enable_mergejoin = on|off enable_nestloop = on|off enable_seqscan = on|off enable_sort = on|off enable_tidscan = on|off sesso SET enable_seqscan TO off;
Fernando Ike de Oliveira PostgreSQL: O elefante mais rpido que o leopardo
O terror dos DBAs(Object-Relation Mapping). . . Use ORM que permitam expresses SQL. Expresses em Object Query Language ainda no usam o melhor plano para consultas. O mundo ainda no todo objeto. Servidores de Aplicao tem pool de conexo, use-o! Voc no v mas as vezes o seu ORM faz. . . SELECT * FROM cadastro; SELECT * FROM cadastro, venda, produto;
Boas prticas para desenvolvimento de aplicaes Modele bem o banco de dados prevendo grande crescimento da base e acesso concorrente. Operaes pesadas, execute com Funes/Store Procedures direto no PostgreSQL. De preferncia para o padro SQL/ISO(2008). Considere que um dia a aplicao tenha que usar mltiplas instncias de banco de dados. Evite uso de LIKE, ILIKE. Prera Full Text Search(tsearch2) Use Indces com moderao.
Ferramentas auxiliares
Tuning SQL. . .
EXPLAIN ANALYZE test_base=# EXPLAIN ANALYZE SELECT foo FROM bar; Ferramentas grcas Pgfouine Pgadmin3 PhpPgAdmin Cedrus
http://explain-analyze.info
...
De olho no log...
Identicando problemas pelos logs. . .
Pgfouine - http://pgfouine.projects.postgresql.org
Pgadmin3 - http://www.pgadmin.org/
Pgadmin3 - http://www.pgadmin.org/
PhpPgAdmin - http://phppgadmin.sourceforge.net/
PhpPgAdmin - http://phppgadmin.sourceforge.net/
Cedrus - http://sourceforge.net/projects/cedrus
Cedrus - http://sourceforge.net/projects/cedrus
Ferramentas auxiliares
Manuteno. . .
Autovacuum X Vacuum Depende do uso (Aplicaes Web, OLTI, BI) Vacuum vacuum_cost_delay: tempo de atraso para vacuum executar automaticamente nas tabelas grandes Autovacuum (Habilitado por padro partir do 8.3) autovacuum_naptime: tempo de espera para execuo do autovacuum.
Ferramentas auxiliares
Ferramentas de Stress. . .
Pgbench: no diretrio do contrib do PostgresSQL, padro de transaes do tipo TPC-B. DBT-2: Ferramenta da OSDL, padro de transaes do tipo TPC-C. BenchmarkSQL: Ferramenta Java para benchmark em SQL para vrios banco de dados (JDBC), padro de transaes do tipo TPC-C. Jmeter: Ferramenta Java genrica para testes de stress, usado para aplicaes (Web, ...) e tambm pode ser direto para um banco de dados.
Mais e melhores discos; Mais memria; Melhor processador (quad core, 64bits) Escalabilidade horizontal: Pgpool I (distribuio de carga de leitura e pool de conexes) PgPool II (PgPool I + paralelizao de grandes consultas) Slony I (Replicao Multi-Master Assncrona) Bucardo (Replicao Mult-Master Assncrona) Warm Stand By/Log Shipping Pgbouncer + PL/Proxy + Slony
Fernando Ike de Oliveira PostgreSQL: O elefante mais rpido que o leopardo
Power PostgreSQL:
http://www.powerpostgresql.com/
PostgreSQL Brasil:
http://www.postgresql.org.br/
Benchmark Brou-Ha-Ha:
http://blogs.ittoolbox.com/database/soup/archives/benchmark-brouhaha-17939
Jmeter:
http://jakarta.apache.org/jmeter/
Tsung:
http://tsung.erlang-projects.org/ Fernando Ike de Oliveira PostgreSQL: O elefante mais rpido que o leopardo
Dvidas
Concluso