quinta-feira, 27 de março de 2014

Dicas de Tunning no Postgres

--Verificar quais tabelas possuem mais table scans/sequential scans (coluna seq_scan)

SELECT relname AS table_name,
seq_scan, seq_tup_read, idx_tup_fetch
FROM pg_stat_user_tables
WHERE (seq_tup_read + idx_tup_fetch) > 0
ORDER BY seq_scan desc, seq_tup_read desc;


Dentre as tabelas com mais table scans verifique as que maiores em quantidades de linhas, pois muitas vezes o tablescan não é tão pesado se a tabela possuir poucos registros. Uma tabela com 10 linhas não causa tanto problema se forem realizados muitos table scans, porém uma tabela com 2milhoões de linhas já causa um estrago grande!

Vendo isso encontrei uma tabela de log que estava entre as dez com maior número de consulta que efetuaram table scans. Busquei no sistema quais select que estavam causando esse problema, criei um índica para a coluna id_usuario e daí a consulta que demorava 2 segundos para executar passou para 12ms!


Para analisar a atividade no banco no momento da consulta.
SELECT *
FROM pg_catalog.pg_stat_activity 

Se houver uma consulta demorada, você vai ver ela aparecer com frequência nessa consulta.

Copie a consulta que aparecerá na coluna current_query e verifique quanto tempo demora para executá-la. Analise as cláusulas WHERE e crie índices para as principais colunas.



Nenhum comentário:

Postar um comentário