Pular para o conteúdo
#84330
Manoel872
Participante

    [quote=”Ishii”:36s8wy3r]Olá,

    Acho que o problema está na query que esta sendo montada pelo Crystal. Dependendo da query montada, pode ou não consumir a área temporária. O problema ocorre na execução da query pelo Crystal mas não pelo BD direto. Acho melhor analisar o que o Crystal está executando (e como) e qual a query que está com problema. A área temporária deve analisada depois de se ter certeza que a query está ok. Poste aqui ou uma parte da procedure ou a query com problema, pela sua primeira mensagem eu priorizaria a procedure mesmo.

    []s Ishii[/quote]

    Achei o seguinte… deem uma olhada:

    Não uso OEM, então não sei exatamente o que faz a tal “consulta” que vc diz que fez nele , mas penso que deve estar acontecendo o seguinte : as tablespaces temporárias são criadas e usadas duma maneira especial, pra maior performance. É assim : o banco mantém uma lista internamente dos “pedaços” em uso dentro da tablespace temporária, e quando uma sessão pede por espaço, esse espaço é removido dessa lista, e ao fim do uso ele volta a constar da lista. PORÉM, esse espaço que não está mais em uso *** NÂO *** é apagado, removido do disco, simplesmente ele volta a estar marcado como LIVRE na lista interna, quando outra sessão o for usar, simplesmente vai escrever por cima do que havia antes. Essa lista interna é a V$SORT_USAGE.
    Então é isso, se vc criar uma tablespace temporária de (diagmos) 100 Mb, em disco sempre vão estar os 100 Mb, o fato dele não diminuir fisicamente quando não estar em uso significa ENORME economia de I/O pro Oracle. Imagino que é isso que aconteceu, vc está (erradamente) usando uma consulta no OEM que mostra espaço físico em disco, isso NÂO é válido pra tablespaces temp, a utilização real fica na V$SORT_USAGE.

    Minha SP:

    SELECT
    ‘FATURAMENTO’ AS GRH1
    , A1_VEND
    , A1_VENDNOM
    , A1_COD
    , C5_TIPO
    , C5_CLAPED
    , A1_NOME
    , A1_NREDUZ
    , A1_MUN
    , A1_EST
    , A1_CODMUN
    , C5_BLQ
    , CASE WHEN F4_TIPSAID IN (‘E’,’R’,’V’,’Y’,’S’) THEN SUM(D2_TOTAL+D2_VALIPI) ELSE 0 END AS VALORTOTAL
    , CASE WHEN F4_TIPSAID IN (‘T’) THEN SUM(D2_TOTAL+D2_VALIPI) ELSE 0 END AS VALORASSISTENCIA
    , CASE WHEN F4_TIPSAID IN (‘B’) THEN SUM(D2_TOTAL+D2_VALIPI) ELSE 0 END AS VALORBONIFICADO
    , D2_COD
    , CASE WHEN F4_TIPSAID IN (‘E’,’R’,’V’,’Y’,’S’) THEN SUM(B1_CUTMAN * D2_QUANT) ELSE 0 END AS CUSTOVALORTOTAL
    , CASE WHEN F4_TIPSAID IN (‘T’) THEN SUM(B1_CUTMAN * D2_QUANT) ELSE 0 END AS CUSTOVALORASSISTENCIA
    , CASE WHEN F4_TIPSAID IN (‘B’) THEN SUM(B1_CUTMAN * D2_QUANT) ELSE 0 END AS CUSTOVALORBONIFICADO
    — , SX5b.X5_DESCRI
    — , E1_TOTAL
    — , E1_SALDO
    , F2_DOC
    , F2_SERIE
    , 0 AS VALORDEV
    , F4_TIPSAID
    , D2_TES
    , 0 AS CTRECEBER_SALDO
    , ‘ ‘ AS CTRECEBER_VENC
    , 0 AS CLI_LMT_CREDITO
    , ‘ ‘ AS CR_SITUACAOTITULO
    , SA1.R_E_C_N_O_
    FROM SYSTEM.SC6010 SC6

    INNER JOIN SYSTEM.SC5010 SC5 
      ON C6_FILIAL = C5_FILIAL 
      AND C6_NUM = C5_NUM 
      AND SC6.D_E_L_E_T_ = SC5.D_E_L_E_T_
    
    INNER JOIN  (SELECT A1_VEND,R_E_C_N_O_,A1_LOJA, A1_VENDNOM, A1_COD, A1_NOME, A1_NREDUZ, A1_MUN, A1_EST, A1_CODMUN,D_E_L_E_T_  FROM SYSTEM.SA1010 SA1) SA1
      ON C5_CLIENTE  = A1_COD 
      AND C5_LOJACLI = A1_LOJA 
      AND SC5.D_E_L_E_T_ = SA1.D_E_L_E_T_
    
    
    LEFT OUTER JOIN SYSTEM.SD2010 SD2 
        ON SC6.C6_FILIAL = SD2.D2_FILIAL 
        AND SC6.C6_NUM = SD2.D2_PEDIDO 
        AND SC6.C6_ITEM = SD2.D2_ITEMPV 
        AND SC6.C6_PRODUTO = SD2.D2_COD 
        AND SD2.D_E_L_E_T_  '*'
    
    INNER JOIN (SELECT B1_CUTMAN,B1_FILIAL,B1_COD FROM SYSTEM.SB1010) SB1 
        ON SD2.D2_FILIAL = SB1.B1_FILIAL 
        AND SD2.D2_COD = SB1.B1_COD     
    
    INNER JOIN SYSTEM.SF4010 SF4 
        ON SD2.D2_FILIAL = SF4.F4_FILIAL 
        AND SD2.D2_TES = SF4.F4_CODIGO       
    
    LEFT OUTER JOIN (SELECT F2_FILIAL,F2_DOC,F2_TIPO,F2_CLIENTE,F2_VALBRUT,F2_SERIE,D_E_L_E_T_,F2_EMISSAO FROM SF2010 SF2 WHERE D_E_L_E_T_'*')  SF2 
        ON SD2.D2_FILIAL = SF2.F2_FILIAL 
        AND SD2.D2_DOC   = SF2.F2_DOC 
        AND SD2.D2_SERIE = SF2.F2_SERIE  
        AND SF2.D_E_L_E_T_ '*'
    

    /* LEFT OUTER JOIN (SELECT E1_SITUACA,E1_NUM,E1_SERIE,D_E_L_E_T_,SUM(E1_VALOR + E1_ACRESC – E1_DECRESC) OVER (PARTITION BY E1_NUM,E1_SERIE,E1_SITUACA) AS E1_TOTAL, SUM(E1_SALDO) OVER (PARTITION BY E1_NUM,E1_SERIE,E1_SITUACA) AS E1_SALDO
    FROM SYSTEM.SE1010 WHERE D_E_L_E_T_’‘) SE1
    ON SF2.F2_DOC = E1_NUM
    AND SF2.F2_SERIE = E1_SERIE
    AND SE1.D_E_L_E_T_ ‘

    LEFT OUTER JOIN SX5010 SX5b ON
      SX5b.X5_CHAVE = E1_SITUACA
      AND SX5b.X5_TABELA = '07'
      AND SX5b.D_E_L_E_T_  '*'   */
    

    WHERE F2_EMISSAO BETWEEN to_char(pData1,’yyyymmdd’) AND to_char(pData2,’yyyymmdd’)
    AND F2_CLIENTE BETWEEN pRca1 AND pRca2
    AND F2_TIPO = ‘N’
    AND F4_TIPSAID IN (‘E’,’R’,’V’,’Y’,’S’,’T’,’B’)

    GROUP BY
    A1_VEND
    , A1_VENDNOM
    , A1_COD
    , C5_TIPO
    , C5_CLAPED
    , A1_NOME
    , A1_NREDUZ
    , A1_MUN
    , A1_EST
    , A1_CODMUN
    , C5_BLQ
    , D2_COD
    , D2_TOTAL+D2_VALIPI
    , B1_CUTMAN * D2_QUANT
    — , SX5b.X5_DESCRI
    — , E1_TOTAL
    — , E1_SALDO
    , F2_DOC
    , F2_SERIE
    , F4_TIPSAID
    , D2_TES
    , SA1.R_E_C_N_O_
    UNION ALL

    SELECT
    ‘VENDAS’ AS GRH1
    , A1_VEND
    , A1_VENDNOM
    , A1_COD
    , ‘ ‘
    , ‘ ‘
    , A1_NOME
    , A1_NREDUZ
    , A1_MUN
    , A1_EST
    , A1_CODMUN
    , ‘ ‘
    , 0 AS VALORTOTAL
    , 0 AS VALORASSISTENCIA
    , 0 AS VALORBONIFICADO
    , ‘ ‘
    , 0 AS CUSTOVALORTOTAL
    , 0 AS CUSTOVALORASSISTENCIA
    , 0 AS CUSTOVALORBONIFICADO
    , ‘ ‘
    , ‘ ‘
    — , ‘ ‘
    — , 0
    — , 0
    , SUM(D1_TOTAL+D1_VALIPI) AS VALORDEV
    , ‘ ‘
    , ‘ ‘
    , 0 AS CTRECEBER_SALDO
    , ‘ ‘ AS CTRECEBER_VENC
    , 0 AS CLI_LMT_CREDITO
    , ‘ ‘ AS CR_SITUACAOTITULO
    , SA1.R_E_C_N_O_
    FROM SYSTEM.SD1010 SD1
    INNER JOIN SYSTEM.SF1010 SF1 ON SD1.D1_FILIAL = SF1.F1_FILIAL AND SD1.D1_DOC = SF1.F1_DOC AND SD1.D1_SERIE = SF1.F1_SERIE AND SD1.D1_FORNECE = SF1.F1_FORNECE AND SD1.D1_LOJA = SF1.F1_LOJA
    INNER JOIN SYSTEM.SF4010 SF4 ON SD1.D1_FILIAL = SF4.F4_FILIAL AND SD1.D1_TES = SF4.F4_CODIGO
    INNER JOIN SYSTEM.SB1010 SB1 ON SD1.D1_FILIAL = SB1.B1_FILIAL AND SD1.D1_COD = SB1.B1_COD
    INNER JOIN SYSTEM.SBM010 SBM ON SB1.B1_FILIAL = SBM.BM_FILIAL AND SB1.B1_GRUPO = SBM.BM_GRUPO
    INNER JOIN SYSTEM.SA1010 SA1 ON SF1.F1_FORNECE = SA1.A1_COD AND SF1.F1_LOJA = SA1.A1_LOJA
    LEFT JOIN SYSTEM.SF2010 SF2 ON SD1.D1_FILIAL = SF2.F2_FILIAL AND SD1.D1_NFORI = SF2.F2_DOC AND SD1.D1_SERIORI = SF2.F2_SERIE AND SD1.D1_FORNECE = SF2.F2_CLIENTE AND SD1.D1_LOJA = SF2.F2_LOJA AND SF2.D_E_L_E_T_ ‘
    LEFT JOIN SYSTEM.SA3010 SA3 ON SF2.F2_VEND1 = SA3.A3_COD AND SA3.D_E_L_E_T_ ‘

    LEFT JOIN SYSTEM.ACY010 ACY ON A1_GRPVEN = ACY_GRPVEN AND ACY.D_E_L_E_T_ ‘
    WHERE SD1.D1_DTDIGIT BETWEEN to_char(pData1,’yyyymmdd’) AND to_char(pData2,’yyyymmdd’)
    AND F1_FORNECE BETWEEN pRca1 AND pRca2
    AND F1_TIPO = ‘D’
    AND F4_TIPENT = ‘V’
    AND SD1.D_E_L_E_T_ ‘

    AND SF1.D_E_L_E_T_ ‘
    AND SF4.D_E_L_E_T_ ‘

    AND SB1.D_E_L_E_T_ ‘
    AND SBM.D_E_L_E_T_ ‘

    AND SA1.D_E_L_E_T_ ‘*’
    GROUP BY
    A1_VEND
    , A1_VENDNOM
    , A1_COD
    , A1_NOME
    , A1_NREDUZ
    , A1_MUN
    , A1_EST
    , A1_CODMUN
    , D1_TOTAL+D1_VALIPI
    , SA1.R_E_C_N_O_

    Mais tem um fato muito peculiar nisso tudo… o meu report tem hora q fica rapido processa o BD inteiro em questão de segundo e tem hora q fica lento e começa a estorar a tablespace não sei mais oq pensar….

    Att,

    Manoel Jr.