El nexo entre tecnología y negocios
 
[ AHF00145 ] Melhora da performance em consultas paginadas
Summary
Melhora-se o tempo de execução das setenças SQL das consultas do usuário paginadas sobre a base de dados PostgreSql 8.3.

It is applied to
  • Apia 2.3.0
  • Apia 2.3.1
  • Apia 2.4.0


Cause

A função gen_tmp_rank() do Apia, para PostgreSql 8.3 utilizava de forma pouco eficiente a estrutura interna de uma tabela temporária para obter os registros que devem ser apresentados pela consulta paginada.



Symptoms

As telas das consultas paginadas do Apia, como por exemplo: Monitoração de documentos personalizado, Lista de tarefas personalizada, etc., demoram em ser carregadas na tela do navegador, independentemente da página na qual se estiver.



Solution

Mediante a atualização da função gen_tmp_rank() do Apia, consegue-se melhorar muito os tempos de resposta, tendo como resultado, os dados em tela em um tempo menor, em comparação com o comportamento anterior.

A seguinte sentença SQL deve ser executada para versões do Apia 2.3.0, 2.3.1 e 2.4.0 (ou superiores) que se estiverem executando sobre PostgreSql 8.3. Para o caso de PostgresSql 8.4 não é preciso realizar a atualização.

CREATE OR REPLACE FUNCTION gen_tmp_rank(p_select character varying, p_order_by character varying)
  RETURNS void AS
'
declare r RECORD;
declare v_row_ant varchar(1000);
declare v_row_now varchar(1000);
declare update_sql varchar(3000);
declare update_batch varchar(50000);
declare i integer;
begin
    i := 0;
    update_sql := '''';
    update_batch := '''';
        EXECUTE ''create temporary table tmp_'' || pg_backend_pid() || '' (a int)'';
        if ((select count(0) from pg_tables t, pg_tables t2 where t.tablename = ''tmp_rank'' and t.schemaname=t2.schemaname and t2.tablename=''tmp_'' || pg_backend_pid()) > 0) then
            EXECUTE ''drop table tmp_rank'';
        end if;
        EXECUTE ''DROP TABLE tmp_'' || pg_backend_pid();
    v_row_ant := '''';
    EXECUTE ''CREATE TEMPORARY TABLE tmp_rank AS select * from ('' || p_select || '') as foo order by '' || p_order_by;
    EXECUTE ''alter table tmp_rank add column rank serial'';
    
    EXECUTE ''GRANT ALL ON TABLE tmp_rank TO public'';
END;
'
  LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER;


Related elements
[ ATI00084 ] Melhoras na performance do Apia
Related from
[ AHT00162 ] Melhora de performance em consultas online sobre PostgreSQL
Suggested items
[ AFC00385 ] Melhora de performance das listas de tarefas personalizadas no PostgreSQL
[ AFC00148 ] Melhora nos filtros de "Consultas do usuário"
[ AHF00122 ] Melhora na performance da lista de tarefas
[ AFC00369 ] Navegação em tabelas (Grids) paginadas
[ ANF00225 ] Melhora da função de ocultar e mostrar a tabela (Grid)
[ AFC00170 ] Validação dos campos requeridos das tabelas (Grids) paginadas
[ AFC00367 ] Melhora na documentação de processos
[ AFC01753 ] Melhora na tradução de conteúdos
[ AFC00567 ] Melhora das imagens nos monitores
[ ATI00170 ] Parâmetros de bases de dados PostgreSQL recomendados para um ambiente Apia