Apresentamos nos eventos PostgreSQL, tanto da comunidade brasileira (PgConBR 2009 - Campinas/SP) como internacional (PGCon 2010 - Ottawa/Canada), uma extensão ao SGBD PostgreSQL que disponibiliza novos comandos para a simulação da presença de índices na base de dados, visando estudos práticos de desempenho.

A receptividade nos dois eventos foi muito boa, havendo solicitações para download e disponibilização do material desenvolvido. Criamos um projeto SourceForge (http://sourceforge.net/projects/hypotheticalind/), disponibilizando a extensão em diferentes versões do SGBD juntamente com um tutorial de utilização contendo exemplos para índices hipotéticos.

Cabe observar que o conceito de indices hipotéticos foi proposto em 1992 por Frank, Omiecinski e Navathe (http://www.springerlink.com/content/d4327448p5342880/). Os indices hipotéticos são estruturas de índices virtuais, ou seja, existentes somente no catálogo do banco de dados. Como não existem fisicamente, são estruturas que não podem ser utilizadas para responder consultas. Entretanto, indices hipotéticos permitem simulações do tipo what-if, viabilizando estudos de desempenho para descobrir qual seria o plano de execução gerado pelo otimizador de consultas no caso de que os indices hipotéticos fossem, na verdade, índices reais e persistissem fisicamente. Consequentemente, pode-se identificar quais indices melhorariam o desempenho de uma consulta sem o custo da efetiva criação destes índices em ambiente de produção. Esta é uma Funcionalidade extremamente importante para DBAs e analistas responsáveis pelos ajustes finos de desempenho (tuning) do banco de dados.

Nosso grupo de pesquisa na PUC-Rio estendeu o SGBD PostgreSQL a fim de incluir a noção de índices hipotéticos. Foram introduzidos três novos comandos:

  • create hypothetical index;
  • drop hypothetical index;
  • explain hypothetical.

O primeiro comando permite a criação de índices exclusivamente na metabase, com os dados estatísticos respectivos obtidos através de heurísticas desenvolvidas especificamente. O comando drop retira do catálogo o índice hipotético criado e o terceiro comando, explain hypothetical, deve ser usado ao invés do explain tradicional para que o processador de consultas do PostgreSQL leve em consideração a existência de índices hipotéticos no momento da otimização e geração de planos.

A seguir, seguem alguns depoimentos após a divulgação do projeto SourceForge na lista de discussão da comunidade PostgreSQL internacional:

  • Wiki da libpqxx (API C++ para postgreSQL): http://pqxx.org/development/libpqxx/wiki/HypotheticalIndexes
  • “Great to see this being available finally!” --Josh Berkus
  • "I believe they're for performance testing. Add hypothetical index (takes very little time). Check estimated costs with EXPLAIN. If good, add real index (takes lots of time)" --Richard Huxton
  • “That sounds very useful indeed!” --Jeroen Vermeulen

Maiores informações, apresentações, outros artigos técnicos, vejam na Página PostgreSQL do grupo de pesquisa na PUC-Rio: http://www.inf.puc-rio.br/~postgresql/

Sérgio Lifschitz / Ana Carolina