Artigo no estilo Mentoring

Mentoring:Este artigo tem por intuito esclarecer, desmistificar, e auxiliar desenvolvedores a utilizarem melhor os recursos de UDFs em diversos SGBDs compatíveis com o padrão SQL-ANSI, com um exemplo prático demonstrando um problema, e suas possíveis soluções.

Para isso, este artigo demonstra um problema clássico de utilização de UDFs em queries ANSI-SQL, seus impactos no funcionamento dos SGBDs mais utilizados no mercado e a possibilidade de resolução do problema através da criação de índices funcionais.

UDF (User Defined Function) é, basicamente, uma função que pode ser utilizada em quase todos os comandos SQL, sejam eles DML (Data Manipulation Language) ou DDL (Data Definition Language) (apesar de não serem muito utilizadas neste tipo de instrução SQL).

Funções UDF podem ser de dois tipos: escalares (que retornam no máximo um único valor) ou funções de conjunto, que retornam no máximo um conjunto de valores.

UDFs geralmente podem ser implementadas em qualquer banco de dados. Elas fornecem uma flexibilidade ao desenvolvedor/administrador para automatização de uma determinada tarefa. Alguns SGBDs permitem a escrita de UDFs em uma ou mais linguagens de programação (ANSI-SQL, C, C#, Java, Perl, etc).

Existe uma preferência óbvia pelas linguagens C ou Java, por terem execuções mais rápidas, permitindo uma flexibilidade maior ao desenvolvedor.

O SGBD IBM Informix possui um recurso muito interessante, onde é possível registrar uma UDF para execução em um determinado virtual processor (vp). Isto permite que o desenvolvedor possa escrever um código que será executado em um processador específico da CPU (habilitando, ou desabilitando, inclusive, a alternância de contexto entre processadores), controlando threads para execução em modo paralelo, e vários outros recursos, aumentando assim a segurança e estabilidade de recursos adicionais implementados no SGBD.

Neste contexto, este artigo fornece um exemplo prático para a correta utilização de UDFs em bancos de dados com o padrão ANSI-SQL, onde a execução de uma UDF na união da consulta (cláusula WHERE) torna o desempenho do SGBD ruim, mesmo com o índice existente na coluna manipulada.

O exemplo citado traz a execução das consultas, com os custos do otimizador no SGBD IBM Informix, mas o artigo pode ser utilizado em qualquer banco de dados padrão ANSI. Duas sugestões são oferecidas como resolução ao problema mencionado.

Uma delas é a criação de índices funcionais, um recurso muitas vezes desconhecido, e que pode ser utilizado em diversos SGBDs do mercado. Também é mencionado o recurso de criação de índices online, amplamente recomendado para sistemas de alta disponibilidade.

Quando utilizar uma UDF

UDFs são frequentemente utilizadas quando há uma necessidade específica que não é fornecida nativamente pelo SGBD em uso. Alguns exemplos são:

· Um sistema implantado em uma linha de produção que capture, a cada X segundos, métricas da linha de montagem (quantidade de peças que passam por minuto, na esteira de produção);

· Foi solicitado um novo relatório ao departamento de desenvolvimento. Ele deverá possuir uma conversão automática de quilogramas em onças (unidade inglesa), centímetros para jardas, ou milhas, enfim, funções de conversão de unidades.

Outros exemplos podem ser citados, ...

Quer ler esse conteúdo completo? Tenha acesso completo