[firebase-br] RES: Ref. Velocidade no retorno da SP

Oliveira, José Augusto Siqueira de jaso em jaso.com.br
Sex Jun 18 17:04:34 -03 2010


Omar, sem conhecer a estrutura das tabelas, e a plan gerada fica um pouco
complicado de ajudar pelo menos para mim..... Faz o seguinte, execute
utilizando uma versão full do ibexpert, mesmo que Trial e post o gráfico de
leitura de registros, e também a plan que foi definida para podermos ajudar
de forma melhor na solução do seu problema. 

Atenciosamente, 

Oliveira, José Augusto Siqueira de
JASO Tecnologia & Desenvolvimento
Consultoria em desenvolvimento de sistemas. 
"Non deterret sapientem mors"

"Aviso de confidencialidade profissional" - Esta mensagem eletrônica e seus
anexos são destinados exclusivamente ao(s) destinatário(s) acima e podem
conter informações confidenciais sujeitas a restrição legal de comunicação
entre as partes. Caso tenha recebido esta mensagem por engano, fica V.Sa.
ciente de que a distribuição, divulgação ou disseminação das informações
aqui contidas ou anexadas é terminantemente proibida, sujeitando o
responsável às penalidades aplicáveis. Assim, solicitamos a gentileza de
retorná-la de imediato ao remetente, eliminando-a definitivamente de seu
sistema. Em caso de dúvida, queira por favor entrar em contato conosco." 

"Confidentiality notice" - This message and its attachments are addressed
solely to the persons above and may contain privileged and confidential
communication. If you have received the message in error, the distribution
or dissemination of the content hereof is prohibited. Please return it
immediately to the sender and please delete the message from your system on
a permanent basis. Should you have any questions, please contact."

-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Omar Haddad
Enviada em: sexta-feira, 18 de junho de 2010 16:44
Para: FireBase
Assunto: [firebase-br] Ref. Velocidade no retorno da SP

Salve amigos(as),

Criei esta SP para geração de dados para o Tribunal de Contas, mas só que
ela está demorando em média 25s para trazer-me o resultado.
O que poderia se feito para melhorar a performance da mesma ? chaves ?
especificar um plan de execução específico ?

Obrigado

Segue abaixo o código da SP


CODIGO STORED PROCEDURE


CREATE PROCEDURE SICOM_REG_OPS11 (
    IGESTAO INTEGER,
    IEXERCICIO INTEGER,
    IMES INTEGER,
    ILEGISLATIVO VARCHAR(1),
    INROOP INTEGER,
    INROEMPENHO INTEGER)
RETURNS (
  TIPO_REGISTRO INTEGER,
  CODPROGRAMA INTEGER,
  CODORGAO INTEGER,
  CODUNIDADE INTEGER,
  CODFUNCAO INTEGER,
  CODSUBFUNCAO INTEGER,
  NATUREZAACAO VARCHAR(01),
  NROPROJATIV VARCHAR(03),
  ELEMENTODESPESA VARCHAR(06),
  SUBELEMENTO VARCHAR(02),
  DOTORIGP2001 VARCHAR(21),
  NROEMPENHO INTEGER,
  NROOP INTEGER,
  BANCO INTEGER,
  AGENCIA VARCHAR(07),
  CONTACORRENTE VARCHAR(10),
  NRDOCUMENTO VARCHAR(09),
  TIPODOCUMENTO VARCHAR(02),
  VLDOCUMENTO NUMERIC(18,2),
  VLASSOCIADO NUMERIC(18,2),
  DTEMISSAO DATE)
AS

DECLARE VARIABLE STIPO CHAR(1);
DECLARE VARIABLE NVALOR NUMERIC(12,2);

begin

FOR SELECT '11' as TipoRegistro,
    Coalesce(E.PROGRAMA,0) as codPrograma,
    o.CODIGO_ORGAO_TCMS as codOrgao,
    Coalesce(u.CODIGO_UNIDADE_TCMS,0) as CodUnidade,
    Coalesce(e.FUNCAO,0) as CodFuncao,
    Coalesce(e.SUB_FUNCAO,0) as CodSubFuncao,
    CASE WHEN e.PROJETO IS NOT NULL THEN substr(e.PROJETO,1,1) ELSE '0' END
as naturezaAcao,
    CASE WHEN e.PROJETO IS NOT NULL THEN substr(e.PROJETO,2,4) ELSE '000'
END as nroProjAtiv,
    CASE WHEN e.NATUREZA_DESPESA IS NOT NULL THEN
substr(e.NATUREZA_DESPESA,1,6) ELSE '000000' END as elementoDespesa,
    '00' subElemento,
    '000000000000000000000' as DotOrigP2001,
    Coalesce(e.NUMERO,0) as NroEmpenho,
    p.NUMERO as nroOp,
    CASE WHEN P.CODIGO_BANCO STARTING '50101' THEN '999' ELSE A.CODIGO_BANCO
END AS BANCO,
    CASE WHEN P.CODIGO_BANCO STARTING '50101' THEN '999999' ELSE
A.CODIGO_AGENCIA END AS AGENCIA,
    CASE WHEN P.CODIGO_BANCO STARTING '50101' THEN '999999999999' ELSE
A.CONTA_BANCARIA END AS CONTACORRENTE,
    CASE WHEN P.CODIGO_BANCO STARTING '50101' THEN '999999999' ELSE
P.NUMERO_DOCUMENTO END AS nrDocumento,
    '99' As tipoDocumento,
    Coalesce(pe.VALOR, p.VALOR_BRUTO) as vlDocumento,
    CASE
     /* CASO A NOTA TENHA MAIS DE UM EMPENHO */
     WHEN Coalesce(pe.VALOR, p.VALOR_BRUTO) = P.VALOR_BRUTO THEN
       P.VALOR_RETIDO
     ELSE (P.VALOR_RETIDO * PE.VALOR) / P.VALOR_BRUTO
    END AS vlAssociado,
    Coalesce(E.DATA_EMISSAO, p.DATA_BAIXA) AS DtEmissao

FROM PAGAMENTO P
JOIN CREDOR C ON (C.CGC_CPF = P.CREDOR)
JOIN AGENCIA A ON (A.GESTAO = P.GESTAO)
       AND (A.EXERCICIO = P.EXERCICIO_CONTABILIZACAO)
       AND (A.CODIGO_PLANO = P.CODIGO_BANCO)

LEFT JOIN PAGAMENTOEMPENHO PE ON (PE.GESTAO = P.GESTAO)
               AND (PE.EXERCICIO = P.EXERCICIO)
               AND (PE.NUMERO = P.NUMERO)
LEFT JOIN EMPENHO E ON (E.GESTAO = PE.GESTAO)
                       AND (E.EXERCICIO = PE.EXERCICIO_EMPENHO)
                       AND (E.NUMERO = PE.NUMERO_EMPENHO)
join orgao_gestor o on (o.GESTAO = P.GESTAO)
LEFT JOIN UNIDADE u on (u.GESTAO_CONTROLE = e.GESTAO_CONTROLE)
        and (u.EXERCICIO = e.EXERCICIO)
        and (u.CODIGO = e.UNIDADE_ORCAMENTARIA)
LEFT JOIN RECURSO r on (r.GESTAO_CONTROLE = e.GESTAO_CONTROLE)
        and (r.EXERCICIO = e.EXERCICIO)
        and (r.FONTE_RECURSO = e.FONTE_RECURSO)
WHERE P.GESTAO = :IGESTAO
AND  P.EXERCICIO_CONTABILIZACAO = :IEXERCICIO
AND  P.NUMERO = :INROOP
AND  PE.NUMERO_EMPENHO = :INROEMPENHO
AND  EXTRACT(MONTH FROM P.DATA_BAIXA) = :IMES
and  ((:ILegislativo = 'S') AND ((e.UNIDADE_ORCAMENTARIA = 101) OR
(e.UNIDADE_ORCAMENTARIA is null))
or  ((:ILegislativo = 'N') AND ((e.UNIDADE_ORCAMENTARIA <> 101) OR
(e.UNIDADE_ORCAMENTARIA is null))))
ORDER BY P.GESTAO, P.EXERCICIO, P.NUMERO

  INTO :TIPO_REGISTRO, :CODPROGRAMA, :CODORGAO, :CODUNIDADE, :CODFUNCAO,
:CODSUBFUNCAO, :NATUREZAACAO, :NROPROJATIV,
       :ELEMENTODESPESA, :SUBELEMENTO, :DOTORIGP2001, :NROEMPENHO, :NROOP,
:BANCO, :AGENCIA,
     :CONTACORRENTE, :NRDOCUMENTO, :TIPODOCUMENTO, :VLDOCUMENTO,
:VLASSOCIADO,
     :DTEMISSAO do
  begin
    suspend;
  end

  ---------

-- FOR SELECT Gestao, Nome from Orgao_Gestor INTO :TIPO_REGISTRO, :NOME do
--    begin
--    suspend;
--    end

end





-- 
Att.
Omar Marques Haddad
Analista de Sistemas Sênior
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista