Jump to content
Sign in to follow this  
Adauto Junior_64247

Melhoria de performance.

Recommended Posts

Pessoal , gostaria de saber se alguém pode me ajudar com uma questão tenho uma base Oracle onde rodo uma procedure com cursor essa procedure na minha maquina local roda bem rápido, no servidor do cliente demora 4 ou 5 x mais detalhe que em termos de hardware o servidor do cliente e melhor que minha maquina. Algo que eu posso fazer para melhorar esse desempenho(limpeza de cache por exemplo) percebo que esse servidor tem um aumento gradativo do consumo de memoria e essa memoria não é liberada(só quando o banco é reincido) , temos alguma opção nesse sentido?

Share this post


Link to post
Share on other sites

São bancos diferentes ?

As estatisticas estao atualizadas ?

Foi feito o plano de execucao das queries ?

Existem índices e estes estão sendo utiliizados ?

Share this post


Link to post
Share on other sites

Já verificou o link !?

Não sei se entendi bem sua arquitetura.

Share this post


Link to post
Share on other sites

Você só está levando em consideração o Banco. se a base é igual e você tem certeza disso, então verifique com o comando top ou comando iotop se existe algum outro processo sem ser do oracle que consome a memória do servidor, ele pode ser superior a sua máquina, mas processos são processos e esse servidor pode fazer swap de uma hora pra outra..

 

pode também ser problema no próprio disco dele ( já peguei problema assim) . mas faça o que o motta falou, da um flush ante de comparar as queries, verifique as estatísticas , garanta que os índices estão melhorando e não degradando a query.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Similar Content

    • By igor.js167
      Boa tarde,
      Estou enfrentando um problema recorrente nas minhas queries, já tentei algumas alternativas encontradas aqui, sem sucesso.
       
      Tenho o seguinte select:
      select avaliacao.dt_liberacao, avaliacao.cd_pessoa_fisica, nome.nm_pessoa_fisica NOME_PCT, decode(diag.qt_resultado,871,'Desnutrição grave',872,'Desnutrição moderada',873,'Desnutrição leve', 874,'Eutrofia',875,'Sobrepeso',876,'Obesidade') from med_avaliacao_paciente avaliacao, pessoa_fisica nome, med_avaliacao_result diag where diag.nr_seq_item = 1266 and diag.nr_seq_avaliacao = avaliacao.nr_sequencia and avaliacao.cd_pessoa_fisica = nome.cd_pessoa_fisica and avaliacao.dt_liberacao is not null and ie_situacao = 'A' O que quero é trazer apenas o último registro por pessoa, um das alternativas que tentei foi dada em outro tópico pelo moderador Motta, incluindo no where o código:
      and avaliacao.dt_liberacao = (select max(avaliacao2.dt_liberacao) from med_avaliacao_paciente avaliacao2 where avaliacao.cd_pessoa_fisica = avaliacao2.cd_pessoa_fisica) Porém esse select só retorna um resultado...
       
      Realmente preciso entender como funciona essa lógico, porque tenho vários selects semelhantes que preciso retirar os resultados "repetidos"
    • By alextdssouza
      Estou com o seguinte problema fiz alguns cursores para exportar algumas informações para texto, porém está demorando mais de 2 horas para exportar 4 mil linhas, o problema aconteceu 
      depois de ter incluído os registros de nível 3 e 4 algumas dessas tabelas estão sem informação não sei se seria esse o problema, todas as minhas tabelas estão indexadas. 
      Gostaria de saber se alguém pode me ajudar a otimizar esse tempo ou me informar qual seria a melhor maneira de fazer isso, sem o nível 3 e 4 levava 5 min para gerar o mesmo resultado, agora leva mais de 2hs. Abaixo Segue o Cursor. Obrigado!
       
      --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
      SET SERVEROUTPUT ON;
      DECLARE
        MEU_ARQUIVO UTL_FILE.FILE_TYPE;
        
          CURSOR CR_0000 IS SELECT * FROM TBL_EFD_ICMS_0000;     
          CURSOR CR_C100 IS SELECT * FROM TBL_EFD_ICMS_C100;
          CURSOR CR_C110 IS SELECT * FROM TBL_EFD_ICMS_C110;
          CURSOR CR_C111 IS SELECT * FROM TBL_EFD_ICMS_C111;
          
          REG_0000 CR_0000%ROWTYPE; 
          REG_C100 CR_C100%ROWTYPE; 
          REG_C110 CR_C110%ROWTYPE; 
          REG_C111 CR_C111%ROWTYPE; 

      --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
      BEGIN
          MEU_ARQUIVO := UTL_FILE.FOPEN('DIRETORIO', 'SAIDAS_NEW.txt', 'w');
              
          OPEN CR_0000; -- nivel 1
              LOOP
                  FETCH CR_0000 INTO REG_0000;
                  EXIT WHEN CR_0000%NOTFOUND;
                  UTL_FILE.PUT_LINE(MEU_ARQUIVO,'|'||REG_0000.REG 
                  ||'|'||REG_0000.COD_VER 
                  ||'|'||REG_0000.DT_INI 
                  ||'|'||REG_0000.DT_FIN 
                  ||'|'||REG_0000.CNPJ 
                  ||'|'||REG_0000.IND_ATIV ||'|');
                  
                  OPEN CR_C100; -- nivel 2
                      LOOP
                          FETCH CR_C100 INTO REG_C100;
                          EXIT WHEN CR_C100%NOTFOUND;
                          IF  REG_C100.ID_0000 = REG_0000.ID_0000 THEN
                              UTL_FILE.PUT_LINE(MEU_ARQUIVO,'|'||REG_C100.REG 
                              ||'|'||REG_C100.SER
                              ||'|'||REG_C100.NUM_DOC
                              ||'|'||REG_C100.CHV_NFE
                              ||'|'||REG_C100.DT_DOC
                              ||'|'||REG_C100.DT_E_S
                              ||'|'||REG_C100.VL_DOC
                              ||'|'||REG_C100.VL_COFINS_ST ||'|');
                          END IF;
                          
                          OPEN CR_C110; -- nivel 3
                              LOOP
                                  FETCH CR_C110 INTO REG_C110;
                                  EXIT WHEN CR_C110%NOTFOUND;
                                  IF  REG_C110.ID_0000 = REG_0000.ID_0000 AND
                                      REG_C110.ID_C100 = REG_C100.ID_C100 THEN
                                      UTL_FILE.PUT_LINE(MEU_ARQUIVO,'|'||REG_C110.REG 
                                      ||'|'||REG_C110.COD_INF
                                      ||'|'||REG_C110.TXT_COMPL ||'|');
                                  END IF; 
                          
                                  OPEN CR_C111; -- nivel 4
                                      LOOP
                                          FETCH CR_C111 INTO REG_C111;
                                          EXIT WHEN CR_C111%NOTFOUND;
                                          IF  REG_C111.ID_0000 = REG_0000.ID_0000 AND
                                              REG_C111.ID_C100 = REG_C100.ID_C100 AND 
                                              REG_C111.ID_C110 = REG_C110.ID_C110 THEN
                                              UTL_FILE.PUT_LINE(MEU_ARQUIVO,'|'||REG_C111.REG 
                                              ||'|'||REG_C111.COD_INF
                                              ||'|'||REG_C111.TXT_COMPL ||'|');
                                          END IF;
                                      END LOOP;
                                  CLOSE CR_C111;
                                  
                              END LOOP;
                          CLOSE CR_C110;
                          
                      END LOOP;
                  CLOSE CR_C100;
                  
              END LOOP;
          CLOSE CR_0000;
      DBMS_OUTPUT.PUT_LINE('Arquivo gerado com sucesso.');
      --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
      Exception
      WHEN UTL_FILE.INVALID_OPERATION THEN
      Dbms_Output.Put_Line('Operação inválida no arquivo.');
      UTL_FILE.FCLOSE(MEU_ARQUIVO);
      WHEN UTL_FILE.WRITE_ERROR THEN
      Dbms_Output.Put_Line('Erro de gravação no arquivo.');
      UTL_FILE.FCLOSE(MEU_ARQUIVO);
      WHEN UTL_FILE.INVALID_PATH THEN
      Dbms_Output.Put_Line('Diretório inválido.');
      UTL_FILE.FCLOSE(MEU_ARQUIVO);
      WHEN Others THEN
      Dbms_Output.Put_Line('Problemas na gravação do arquivo.');
      UTL_FILE.FCLOSE(MEU_ARQUIVO);
      END;
      /
    • By EREGON
      Olá,
       
      estou a ter problemas com o seguinte código, dando o erro:
       
      "ORA-01861: o literal não corresponde à cadeia de caracteres do formato"
       
      MERGE INTO B491_MAIN main USING( SELECT ACESS_ID, CASE WHEN (ACESS_ID IN (SELECT ACESS_ID FROM ( SELECT ACESS_ID, END_DATE_CP, SUBSTR(TO_CHAR(SYSDATE, 'YYYYMMDD'), 1, 6) || BILL_CYCLE_CODE AS REF_DATE, BILL_CYCLE_CODE, TO_CHAR(SYSDATE, 'YYYYMMDD') AS PREBILL FROM B491_MAIN WHERE EXCLUSAO = 'OK' )t WHERE TO_DATE(END_DATE_CP) < TO_DATE(REF_DATE) AND TO_DATE(END_DATE_CP) < TO_DATE(PREBILL) - 15 AND TO_DATE(REF_DATE) < TO_DATE(PREBILL) - 8 ) ) THEN 'POST_BILL' ELSE 'PRE_BILL' END AS DECISION FROM B491_MAIN WHERE EXCLUSAO = 'OK' )tabela ON(tabela.ACESS_ID = main.ACESS_ID) WHEN MATCHED THEN UPDATE SET LIST_ID = tabela.DECISION WHEN NOT MATCHED THEN INSERT (LIST_ID) VALUES('POST_BILL') ; O código dentro do "USING" corre bem.
       
      Alguma ajuda?
       
      Obrigado.
       
       
    • By asacap1000
      Galera estou com uma consulta que ainda não consegui entender o porque. gostaria que ela trouxesse em apenas uma linha mas não vem de forma alguma.
       
      SELECT BO.LAGER, BO.ID_OS, K.ID_KLIENT, K.SUCHBEGRIFF CNPJ_CPF, K.NAME, BI.DIV_1 LOTE, BI.DIV_10 DI_DDE, (SELECT DISTINCT DIS.ID_DISPATCHER FROM FISCAL.DOCHD DC, WMS_EADI.DISPATCHER DIS WHERE DC.DOCHD_DOC_ID = BO.NR_NF AND DC.DOCHD_RPS_DESP = DIS.SUCHBEGRIFF) COD_COMISSARIA, (SELECT DISTINCT DIS.BEZ FROM FISCAL.DOCHD DC, WMS_EADI.DISPATCHER DIS WHERE DC.DOCHD_DOC_ID = BO.NR_NF AND DC.DOCHD_RPS_DESP = DIS.SUCHBEGRIFF) COMISSARIA, BO.NR_NF, BO.DATE_BILL, BO.DATE_EMISS, --------ABAIXO OS TIPOS DE SERVIÇOS ONDE ESTÃO OCORRENDO CADA RESULTADO ELE CRIA UMA LINHA---------------- (SELECT SUM(ROUND(OSI.PREIS, 2)) FROM BILL_OS_ITEM OSI WHERE OSI.LAGER = BO.LAGER AND OSI.ID_KLIENT = K.ID_KLIENT AND OSI.ID_OS = BO.ID_OS AND OSI.BILLITE = BI.BILLITE AND OSI.DIV_1 = BI.DIV_1 --AND NVL(OSI.DIV_10, 'x') = NVL(BI.DIV_10, 'x') AND OSI.BILLITE IN (SELECT BLL.BILLITE FROM BILL_ITEM BLL, WERTE WER WHERE BLL.TIPO_FAT = WER.WERT AND WER.WERTE_BER = 'ITENSF' AND WER.WERT = 'ARMAZ')) VLR_ARMAZ, (SELECT SUM(ROUND(OSI.PREIS, 2)) FROM BILL_OS_ITEM OSI WHERE OSI.LAGER = BO.LAGER AND OSI.ID_KLIENT = K.ID_KLIENT AND OSI.ID_OS = BO.ID_OS AND OSI.BILLITE = BI.BILLITE AND OSI.DIV_1 = BI.DIV_1 --AND NVL(OSI.DIV_10, 'x') = NVL(BI.DIV_10, 'x') AND OSI.BILLITE IN (SELECT BLL.BILLITE FROM BILL_ITEM BLL, WERTE WER WHERE BLL.TIPO_FAT = WER.WERT AND WER.WERTE_BER = 'ITENSF' AND WER.WERT = 'GER.RISCO')) VLR_GER_RISCO, (SELECT SUM(ROUND(OSI.PREIS, 2)) FROM BILL_OS_ITEM OSI WHERE OSI.LAGER = BO.LAGER AND OSI.ID_KLIENT = K.ID_KLIENT AND OSI.ID_OS = BO.ID_OS AND OSI.BILLITE = BI.BILLITE AND OSI.DIV_1 = BI.DIV_1 --AND NVL(OSI.DIV_10, 'x') = NVL(BI.DIV_10, 'x') AND OSI.BILLITE IN (SELECT BLL.BILLITE FROM BILL_ITEM BLL, WERTE WER WHERE BLL.TIPO_FAT = WER.WERT AND WER.WERTE_BER = 'ITENSF' AND WER.WERT = 'MOVIMENT')) VLR_MOVIMENTACAO, (SELECT SUM(ROUND(OSI.PREIS, 2)) FROM BILL_OS_ITEM OSI WHERE OSI.LAGER = BO.LAGER AND OSI.ID_KLIENT = K.ID_KLIENT AND OSI.ID_OS = BO.ID_OS AND OSI.BILLITE = BI.BILLITE AND OSI.DIV_1 = BI.DIV_1 --AND NVL(OSI.DIV_10, 'x') = NVL(BI.DIV_10, 'x') AND OSI.BILLITE IN (SELECT BLL.BILLITE FROM BILL_ITEM BLL, WERTE WER WHERE BLL.TIPO_FAT = WER.WERT AND WER.WERTE_BER = 'ITENSF' AND WER.WERT = 'DESUNIT')) VLR_DESUNIT, (SELECT SUM(ROUND(OSI.PREIS, 2)) FROM BILL_OS_ITEM OSI WHERE OSI.LAGER = BO.LAGER AND OSI.ID_KLIENT = K.ID_KLIENT AND OSI.ID_OS = BO.ID_OS AND OSI.BILLITE = BI.BILLITE AND OSI.DIV_1 = BI.DIV_1 --AND NVL(OSI.DIV_10, 'x') = NVL(BI.DIV_10, 'x') AND OSI.BILLITE IN (SELECT BLL.BILLITE FROM BILL_ITEM BLL, WERTE WER WHERE BLL.TIPO_FAT = WER.WERT AND WER.WERTE_BER = 'ITENSF' AND WER.WERT = 'PESAGEM')) VLR_PESAGEM, (SELECT SUM(ROUND(OSI.PREIS, 2)) FROM BILL_OS_ITEM OSI WHERE OSI.LAGER = BO.LAGER AND OSI.ID_KLIENT = K.ID_KLIENT AND OSI.ID_OS = BO.ID_OS AND OSI.BILLITE = BI.BILLITE AND OSI.DIV_1 = BI.DIV_1 --AND NVL(OSI.DIV_10, 'x') = NVL(BI.DIV_10, 'x') AND OSI.BILLITE IN (SELECT BLL.BILLITE FROM BILL_ITEM BLL, WERTE WER WHERE BLL.TIPO_FAT = WER.WERT AND WER.WERTE_BER = 'ITENSF' AND WER.WERT LIKE 'AVERBA%')) VLR_AVERBACAO, (SELECT SUM(ROUND(OSI.PREIS, 2)) FROM BILL_OS_ITEM OSI WHERE OSI.LAGER = BO.LAGER AND OSI.ID_KLIENT = K.ID_KLIENT AND OSI.ID_OS = BO.ID_OS AND OSI.BILLITE = BI.BILLITE AND OSI.BILLITE IN (SELECT BLL.BILLITE FROM BILL_ITEM BLL, WERTE WER WHERE BLL.TIPO_FAT = WER.WERT AND WER.WERTE_BER = 'ITENSF' AND WER.WERT = 'FAT.MINIMO.')) VLR_FAT_MINIMO, (SELECT SUM(ROUND(OSI.PREIS, 2)) FROM BILL_OS_ITEM OSI WHERE OSI.LAGER = BO.LAGER AND OSI.ID_KLIENT = K.ID_KLIENT AND OSI.ID_OS = BO.ID_OS AND OSI.BILLITE = BI.BILLITE AND OSI.DIV_1 = BI.DIV_1 --AND NVL(OSI.DIV_10, 'x') = NVL(BI.DIV_10, 'x') AND OSI.BILLITE IN (SELECT BLL.BILLITE FROM BILL_ITEM BLL, WERTE WER WHERE BLL.TIPO_FAT = WER.WERT AND WER.WERTE_BER = 'ITENSF' AND BLL.BILLITE NOT IN ('21.02', '21.03') AND WER.WERT = 'OUT.SERV.')) VLR_OUTROS_SERV, (SELECT SUM(ROUND(OSI.PREIS, 2)) FROM BILL_OS_ITEM OSI WHERE OSI.LAGER = BO.LAGER AND OSI.ID_KLIENT = K.ID_KLIENT AND OSI.ID_OS = BO.ID_OS AND OSI.BILLITE = BI.BILLITE AND OSI.DIV_1 = BI.DIV_1 --AND NVL(OSI.DIV_10, 'x') = NVL(BI.DIV_10, 'x') AND OSI.BILLITE IN (SELECT BLL.BILLITE FROM BILL_ITEM BLL, WERTE WER WHERE BLL.TIPO_FAT = WER.WERT AND WER.WERTE_BER = 'ITENSF' AND BLL.BILLITE = '21.02' AND WER.WERT = 'OUT.SERV.')) TRANSF_IN, (SELECT SUM(ROUND(OSI.PREIS, 2)) FROM BILL_OS_ITEM OSI WHERE OSI.LAGER = BO.LAGER AND OSI.ID_KLIENT = K.ID_KLIENT AND OSI.ID_OS = BO.ID_OS AND OSI.BILLITE = BI.BILLITE AND OSI.DIV_1 = BI.DIV_1 --AND NVL(OSI.DIV_10, 'x') = NVL(BI.DIV_10, 'x') AND OSI.BILLITE IN (SELECT BLL.BILLITE FROM BILL_ITEM BLL, WERTE WER WHERE BLL.TIPO_FAT = WER.WERT AND WER.WERTE_BER = 'ITENSF' AND BLL.BILLITE = '21.03' AND WER.WERT = 'OUT.SERV.')) TRANSF_OUT FROM BILL_OS BO, BILL_OS_ITEM BI, KLIENTEN K WHERE BO.LAGER = BI.LAGER AND BO.ID_KLIENT = BI.ID_KLIENT AND BO.ID_OS = BI.ID_OS AND BO.LAGER = K.LAGER AND BO.ID_KLIENT = K.ID_KLIENT and k.id_klient = '3099' and BO.NR_NF = '121304' AND BO.STATUS = '90' AND TRUNC(BO.DATE_BILL) BETWEEN '28/08/2019' AND '28/08/2019' GROUP BY BO.LAGER, BO.ID_OS, K.ID_KLIENT, K.SUCHBEGRIFF, K.NAME, BO.DATE_EMISS, BO.NR_NF, BO.DATE_BILL, BI.BILLITE, BI.DIV_1, BI.DIV_10
       
      Alguem consegue identificar neste select porque ele vem assim?
    • By iury.moreira
      Pessoal, instalei o oracle database XE 11g express via docker em um MacOS e até então estive utilizando normalmente, o problema é que eu acho que em um determinado tempo de uso a senha padrão do usuário SYS expira. Agora eu não consigo mais acessar, não sei como acessar o banco via terminal para alterar a senha do usuário, alguém que esteja mais acostumado consegue me dar uma ajuda?

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.