none
Erro Time Out RRS feed

  • Pergunta

  • Bom dia!

    Estou com um problema nessa consulta, qdo faço a busca por dados do ano de 2013 ela retorna normalmente, mas qdo tento buscar algum dado de 2012 ela dá erro de time out.

    Ex.: Busca de 01/05/2012 a 01/06/2012.

    Alguém poderia me ajudar?

    SET DATEFORMAT DMY
    SELECT distinct 
    	   DESTINO.NUMEROMOV,
    	   DESTINO.CODTMV,
    	   DESTINO.DATAEMISSAO,	   
    	   F.CGCCFO,
    	   F.NOMEFANTASIA,
    	   DESTINO.VALORLIQUIDO
    FROM TMOV ORIGEM (NOLOCK), 
    	 TMOV DESTINO (NOLOCK), 
    	 TITMMOVRELAC MOVRELAC (NOLOCK),
    	 FCFO F (NOLOCK)	 
    WHERE      
          ORIGEM.IDMOV = MOVRELAC.IDMOVORIGEM
          AND DESTINO.IDMOV = MOVRELAC.IDMOVDESTINO
          AND DESTINO.CODCFO = F.CODCFO
          AND DESTINO.DATAEMISSAO BETWEEN :DINI AND :DTFIM
          AND (DESTINO.CODTMV BETWEEN '1.2.01' AND '1.2.08')
          AND ORIGEM.DATAEMISSAO > DESTINO.DATAEMISSAO
    ORDER BY DESTINO.NUMEROMOV

    Obrigada.

    Rafaela Alves

    segunda-feira, 26 de agosto de 2013 12:10

Respostas

Todas as Respostas

  • Olá Rafaela,

    Poderia mostrar o código de onde você esta fazendo a busca?

    Você colocou o exemplo "Busca de 01/05/2012 a 01/06/2012"  Poderia colocar o código que usou para pesquisar essa data?

    E ao que se refere aquele DESINO.CODTMV BETWEEN '1.2.01' AND '1.2.08')?

    Att,

    segunda-feira, 26 de agosto de 2013 13:01
  • O exemplo que falei sobre as datas me referi aos parâmetros DINI e DTFIM.

    Passo os parâmetros no ato da execução da consulta, mas caso fosse colocar direto na consulta ficaria assim:

    SET DATEFORMAT DMY
    SELECT distinct 
    	   DESTINO.NUMEROMOV,
    	   DESTINO.CODTMV,
    	   DESTINO.DATAEMISSAO,	   
    	   F.CGCCFO,
    	   F.NOMEFANTASIA,
    	   DESTINO.VALORLIQUIDO
    FROM TMOV ORIGEM (NOLOCK), 
    	 TMOV DESTINO (NOLOCK), 
    	 TITMMOVRELAC MOVRELAC (NOLOCK),
    	 FCFO F (NOLOCK)	 
    WHERE      
          ORIGEM.IDMOV = MOVRELAC.IDMOVORIGEM
          AND DESTINO.IDMOV = MOVRELAC.IDMOVDESTINO
          AND DESTINO.CODCFO = F.CODCFO
          AND DESTINO.DATAEMISSAO BETWEEN '01/05/2012' AND '01/06/2012'
          AND (DESTINO.CODTMV BETWEEN '1.2.01' AND '1.2.08')
          AND ORIGEM.DATAEMISSAO > DESTINO.DATAEMISSAO
    ORDER BY DESTINO.NUMEROMOV

    Obrigada.



    Rafaela Alves

    segunda-feira, 26 de agosto de 2013 14:11
  • Deleted
    • Sugerido como Resposta Alexsandre terça-feira, 27 de agosto de 2013 01:35
    segunda-feira, 26 de agosto de 2013 15:35
  • Bom dia!

    Fiz o teste com as alterações que vc enviou e retirei o DISTINCT, continua dando erro de TIME OUT.

    Segue os Indices das Tabelas TMOV, FCFO

    Obrigada pelo ajuda.


    Rafaela Alves

    terça-feira, 27 de agosto de 2013 11:26
  • E os indices da tabela TITMOVRELAC:

    Att,


    Rafaela Alves

    terça-feira, 27 de agosto de 2013 11:26
  • Deleted
    terça-feira, 27 de agosto de 2013 11:57
  • Boa Tarde!

    José,

    Fiz alguns ajustes na consulta, e qdo executo direto do banco de dados, recebo um retorno após 7 minutos.

    Mas.. no sistema Corpore RM ele ainda dá erro de TIME OUT.

    Com relação as perguntas que vc fez, sou meio leiga em banco de dados, dou mais suporte ao sistema e SQL fazemos só alguns select's mais simples. rsrs Então não estou sabendo avaliar muito bem as questões que vc pontuou, me desculpe, se puder exemplicar eu ficaria muito grata.

    No momento minha consulta está assim:

    SET DATEFORMAT DMY
    SELECT DESTINO.NUMEROMOV,
    	   DESTINO.CODTMV,
    	   DESTINO.DATAEMISSAO,	   
    	   F.CGCCFO,
    	   F.NOMEFANTASIA,
    	   DESTINO.VALORLIQUIDO
      from TMOVRELAC MOVRELAC
           inner join TMOV ORIGEM on ORIGEM.IDMOV = MOVRELAC.IDMOVORIGEM
           inner join TMOV DESTINO on DESTINO.IDMOV = MOVRELAC.IDMOVDESTINO
           inner join FCFO F on F.CODCFO = DESTINO.CODCFO
      where DESTINO.DATAEMISSAO between '01/01/2012' and '30/01/2012'
            and DESTINO.CODTMV IN ('1.2.01', '1.2.02', '1.2.04', '1.2.06', '1.2.07', '1.2.08')
            and ORIGEM.DATAEMISSAO > DESTINO.DATAEMISSAO

    Obrigada,

    Rafaela Alves

    terça-feira, 27 de agosto de 2013 19:27
  • Deleted
    terça-feira, 27 de agosto de 2013 21:48
  • Boa Tarde José!

    Entrei em contato com a Equipe TOTVS solicitando apoio no problema apresentado, e o que eles comentaram é que podem aumentar o tempo de TIME OUT, mas q isso não seria o mais indicado, argumentaram que o problema está na consulta, mas eles não fazem análise de consultas, só dão suporte se for problema de infraestrutura de Banco de Dados.

    Veririfiquei que o problema está na clausula where "and ORIGEM.DATAEMISSAO > DESTINO.DATAEMISSAO", pois quando tiro essa condição a consulta fica muito rápida, teria uma melhor forma de fazer essa condição?

    Muito Obrigada pela atenção e pelo auxilio.

    Att,


    Rafaela Alves

    quarta-feira, 28 de agosto de 2013 17:00
  • Deleted
    • Marcado como Resposta Alysson Queiroz segunda-feira, 2 de setembro de 2013 19:59
    quarta-feira, 28 de agosto de 2013 17:51
  • Deleted
    • Marcado como Resposta Alysson Queiroz segunda-feira, 2 de setembro de 2013 19:59
    quinta-feira, 29 de agosto de 2013 02:56
  • Bom dia!

    Obrigada pelo apoio, mas o sistema não é utilizado pela Cenibra e a responsabilidade do banco de dados é da TOTVS e a empresa que trabalho executa alguns "SELECT", mas não efetuamos alterações no banco de dados.

    Resolvi o problema da seguinte forma:

    *Devido ter um movimento de ORIGEM e um de DESTINO tinhamos o problema pq sabiamos a data que deveria ser  retornada do DESTINO, mas a data da origem era desconhecida, então era buscado totas existentes no sistema, para depois comparar com o DESTINO. Então faremos a consulta buscando a data de origem média de até 4 meses após o destino.Após esse ajuste a consulta está demorando 00:00:50.

    Segue código atual.

    SELECT DESTINO.NUMEROMOV,
    	   DESTINO.CODTMV,
    	   ORIGEM.CODTMV,
    	   DESTINO.DATAEMISSAO,
    	   ORIGEM.DATAEMISSAO,	   
    	   F.CGCCFO,
    	   F.NOMEFANTASIA,
    	   DESTINO.VALORLIQUIDO
      from TMOVRELAC MOVRELAC
           inner join TMOV ORIGEM on ORIGEM.IDMOV = MOVRELAC.IDMOVORIGEM
           inner join TMOV DESTINO on DESTINO.IDMOV = MOVRELAC.IDMOVDESTINO
           inner join FCFO F on F.CODCFO = DESTINO.CODCFO
      where ORIGEM.CODTMV IN ('1.1.02', '1.1.06')
            and DESTINO.CODTMV IN ('1.2.01', '1.2.02', '1.2.04', '1.2.06', '1.2.07', '1.2.08')
            AND ORIGEM.DATAEMISSAO between '01/01/2012' and '30/04/2012'
            and DESTINO.DATAEMISSAO BETWEEN '01/01/2012' AND '31/01/2012'
            and ORIGEM.DATAEMISSAO > DESTINO.DATAEMISSAO
    Att,

    Rafaela Alves

    terça-feira, 3 de setembro de 2013 13:23