Pular para o conteúdo

Fóruns SQL e PL/SQL Duvida uso do Bulk Collect e estouro de memoria ORA-04030 Duvida uso do Bulk Collect e estouro de memoria ORA-04030

#105708
FernandaAc
Participante

    rman,
    Seguem respostas:

    Teria um servidor de homologação para testar algumas mudanças de parametro? Não é interessante fazer isso direto no servidor de produção.
    Temos um servidor de homologação, mas que não apresenta as mesmas configurações de produção, infelizmente. O erro não ocorre em homologação, o volume de dados da base também é menor. 🙁
    Estas mudanças precisam de restart de banco, certo?

    O problema acontece em horarios de pico, ou seja, varias conexões abertas, ou com apenas 1 conexão já estoura?
    Havia concorrência. Então nós mudamos o horário da execução buscando o horário em que não há outros processos em execução. Está rodando às 5h da manhã. Porém mesmo no horário de menor uso da base, ainda temos tido o mesmo problema.

    Para avaliar os processos concorrentes eu pedi a execução da query abaixo (executarão 5 vezes, com intervalo de 3 em 3 minutos, no horário de processamento da rotina).
    Porém, esta madrugada não conseguiram executar. Estou elaborando um script bat e tentarei configurar uma tarefa na minha máquina para exportar este resultado
    sem depender de terceiros:
    SELECT a.osuser,
    a.status,
    a.inst_id,
    NVL(a.username, ‘(oracle)’) AS username,
    a.module,
    a.program,
    b.value as pga_memory,
    a.*
    FROM gv$session a, gv$sesstat b, gv$statname c
    WHERE a.sid = b.sid
    AND a.inst_id = b.inst_id
    AND b.statistic# = c.statistic#
    AND b.inst_id = c.inst_id
    AND c.name = ‘session pga memory’
    AND a.program IS NOT NULL
    ORDER BY b.value DESC;

    Acha que podemos extrair mais alguma informação de memória que pode ser importante no momento da execução?

    Pergunto isso, por que a conexão pode ser dedicada ou compartilhada, verifique para mim que tipo de conexão é sendo utilizada.
    Na conexão dedicada cada conexão terá usa própria PGA, e na compartilhada existe um reaproveitamento de memória entre as conexões abertas.
    Tenho quase certeza de que é compartilhada. Tenho como confirmar através de alguma tabela do BD? Não tenho acesso às configurações do servidor direto no UNIX.

    O sistema é WEB? Está sendo utilizado pool de conexão?
    Essa rotina especificamente é executada diretamente no servidor de banco de dados, através de um sistema de agendamento de jobs (Control-M), que executa um shell script que inicia a rotina utilizando o usuário do sistema operacional.
    Há outros processos WEB e Access que utilizam a base de dados, porém durante o dia, não no horário em que estamos executando o job.

    Posta pra mim o sga_target.
    sga_target = 8Gb (8388608000)

    Pode fazer um teste, diminuir o sga_target e aumentar o pga_aggregate_target. Faça testes gradativos para chegar na proporção ideal, a diminuição do sga_target pode impactar em modo geral a desempenho do sistema.
    Vou ver se conseguimos avaliar algo assim em homologação. O risco é muito grande, pois há processos diários e críticos para o cliente rodando neste mesmo servidor. 🙁

    Quanto de memória RAM tem a máquina? A máquina é dedicada a Banco de Dados?
    A máquina é dedicada a este banco de dados.
    Vou tentar saber a quantidade de memória RAM.

    Obrigada!
    Abs
    Fernanda