Está en la página 1de 6
Otimizacao de consultas no PostgreSQL LUCAS REZENDE RICARDO (irezender@yahoo.com.br) G estudante do Curso de Bacharelodo de Sistemas de Informagao no Centro do Ensino Superior de Juiz de Fora ‘lua como programador e membro ds lequipe de administragao de dados ds Zeus Rio Solutions (www: zeusro.com, bo). Tratana com as feramentas de deserwolvimento da Sybase, PowerBuilder e tecnologia Microsoft, incluindo Banco de Dados SQL Sener. LEONARDO B. L. CORREA PIRES (topires@gmait.com) 6 graduando do Centro de Ensino ‘Superior de Juz de Fora -CES/JF no curso de Bacharelado em Sistemas do Informacdo. Atualmente trabalha no desenvolvimento de software para arquitetura © palsagismo na [AUE Solugdes em Juiz de Fora/MG. MARCO ANTONIO P.ARAUJO (maraujoecest.tr) & Doutorando e Mestre em Engenharia de Sistemas e | Computacgo pela COPPE/ UFRJ, Especialista em Métodos Estatisticos Computacionais ¢ Bacharel_ em Matematica com Hablltagao em Informatica pele UFIF, Professor do Curso de Bacharelado em Sistemas de Informagao do Centro de Ensino Superior de Juiz de Fora, além de Analista de Sistemas da Prefeitura de Julz de For. todo 0 momento, quando se trabalha no desenvolvimento de aplicagdes efou admi- niistragio de dados, busca-se sempre uma melhora de desempenho. Ao trabalhar com consultas em bancos de dados deve-se ter ‘uma atengdo maior com relagio a sua eficiéncia, uma ver que consultas mal elaboradas podem degradar consideravelmente ‘© desempenho do sistema como um todo. Para que seja possivel fazer melhorias relativas &s consultas, & preciso entender como analisar seu desempenho, bem como ‘0s fatores que contribuem para sua melhoria. Este artigo busca esclarecer estas questées e apresentar as ferramentas disponiveis no PostgreSQL que auxiliam nesta ta refa de otimizagio e, também, fornecer uma base de conheci- mento para que seja possivel criar consultas mais inteligentes, refinadas, objetivando o ganho de performance. Entendendo o plano de execugao Quando se executa uma operagdo no banco de dados,seja ela um SELECT, INSERT, ou outra qualquer, o PostgreSQL, assim como outros SGBDs, possui um mecanismo interno chamado planejador (ou otimizador), que reescreve a consulta com a inten ‘gio de aperfeicoar os resultados, gerando um Plano de Execugio. Plano de Execugio, ou de Consulta, é uma seqiiéncia de passos que sero executados pelo SGBD para executar uma consulta, ou seja, quais 0s tipos de processamento que sero feitos diretamente nos registros ou em estruturas de indices, ‘bem como informagdes como o tempo de entrada, o tempo de resposta eo total de registros percorridos. O planejador precisa entao fazer uso de estatisticas como o niimero total de registros da tabela, o nimero de blocos de disco ocupados por cada ta- bela e se ha a presenga de indices ou nao, Criando um banco de dados Para exemplificar os trabalhos do plano de execugio, seri i Sar cacitriiapusdesee = cp-neceienl peetenoe A A de processamento do resultado, nao considerando o tempo de algae || reescrita e nem anilise da consulta Ree eee ean Renan Para os comandos INSERT, UPDATE e DELETE, 0 tempo de BSOe AR) hmee wee ‘here csnatricale pease ie nica ee fa Figura 10. Exemplo do comando EXPLAIN em jungdes, em modo gic. Figura 44. Consulta com jungées normaimente utilzadas. Figura 14. Exemplo do comando Explain Analyze POSTGRES is nies — fares pre Figura 15. Exemplo do comando EXPLAIN VERBOSE. Ds ae BU sons Ania hamvnamame lym eP i a Figura 16, Desabilta varredura por indi execugdo pode ser um pouco maior do que para um comando SELECT, uma ver que para executar um destes comandos, nor- ‘malmente antes deve ser feita uma consulta para encontrar 0s dados a serem modificados (ver Figura 13) ‘© comando ANALYZE deve ser sempre executado para que as tabelas responsiveis por armazenar informacdes que serao utilizadas pelo planejador do PostgreSQL. sejam atualizadas. Este comando, quando executado, registra as estatisticas sobre a distribuigao dos dados na tabela pg_class. Quando isso nao & feito ou se a distribuigio dos dados dentro da tabela seleciona- da mudar significativamente, os custos podem ser calculados de maneira equivocada, gerando planos menos eficientes. Por sua vez, © comando EXPLAIN VERBOSE mostra a re- presentacao interna completa da arvore do plano de consulta, em vez. de apenas um resumo. Geralmente, esta opcio ¢ itil para finalidades especiais de depuracao. A Figura 18 apresenta a saida produzida utilizando a opgao VERBOSE. Manipulando consultas Existem algumas maneiras de se manipular o planejador para que ele execute diferentes planos de consulta para uma ‘mesma operagio, forgando-o a nao considerar a estratégia que sairia vencedora, Isto & feito habilitando-se e desabilitando-se sinalizadores de cada tipo de plano. Por exemplo, o PostgreSQL. possui comandos como SET ENABLE_SEQSCAN, SET ENABLE_INDEXSCAN ¢ SET Cd E a operacdo mais basica e representa uma leitura seqdencial da tabela. Quando ocorre uma Seq Scan, significa que a tabela fo lida da primeira & ultima linha. ‘Seq Scan corre principaimente para satisfazer_ a clausulas de ORDER BY, mas também ¢ utlizada ‘quando outra operacdo necessita de conjunto de dados ordenado para ser executada £ utlizada para realizar JOIN entre duas tabelas ‘corre prineipalmente em INNER JOINS, LEFT JOINS ¢ UNIONS. Nao processa completamente ‘a tabela mais intema, Nested Loop Tabeta 4. Descrico das principais operacdes encontradas nos pianos de consulta, ENABLE_NESTLOOR, os quais colocados em OFF desabi- litam uma futura consulta do planejador utilizando consulta seqilencial, consulta.com indices ou com lago aninhado, res- pectivamente, como pode ser visto na Figura 46. Neste caso, a consulta feita anteriormente na Figura 8 que utilza- ‘va indices, utiizon-se de outros métodos para fazer a vartedura ‘Um exemplo em que desabilitar uma operagio pode tornar ‘uma consulta muito mais répida &0 caso de uma tabela que ocupa uma tinica pagina de disco, e que possui colunas com indices. usuario sabendo desta estrutura inibe a execucio dos indi- ‘ces, como no exemplo anterior, para forear o planejadora executar ‘uma busca seqiiencial ao invés de fazer a letra por indices. A ‘consulta, neste caso, se tomna mais eficiente uma ver que evitaria a leitura de paginas adicionais na procura por indices. Finalizando, pode-se observar na Tabela1.um resumo das prin-

También podría gustarte