Pular para o conteúdo

Fóruns Banco de dados Oracle Excesso de leituras físicas Excesso de leituras físicas

#102139
ithigvo
Participante

    @mpvargas

    Apenas um breve explicação sobre a utilização ou não de bind variables,

    Lendo brevemente o tópico vi que existe uma sugestão para aumentar a SGA do banco. Dentro da SGA está alocada a shared pool, que é a área aonde ficam armazenadas informações compartilhadas sobre os comandos SQL executados… essa área é util para economizar o trabalho de PARSE do banco. (você pode ter uma ‘idéia’ da shared pool por exemplo pela view v$sqlarea)

    Onde entra o tal do BIND nisso tudo…
    imagina que cada linha da v$sqlarea é um comando sql executado..

    Agora imagina que sua aplicação possui uma telinha com um filtro simples por ID
    select id, nome from tabela where id = 10

    Para cada ID diferente q é feita essa pesquisa, é feito um parse completo, e alocado espaço na shared pool (gastando memória e CPU)
    Dai,, imagina a quantidade dessas consultas simples que podem haver,, para cada ID…

    Mas o comando SQL é o mesmo,, se ele vier com BIND da aplicação, vai ser entendido assim pelo banco:
    select id, nome from tabela where id = :V_BIND

    Então,, independente da quantidade de IDs diferentes que forem consultados, é SEMPRE a mesma consulta,, não alocando mais espaço nem gastando muita CPU para fazer o tal do HARD PARSE.

    Como no seu caso, o ERP é uma aplicação fechada, e vc não tem controle sobre como estes comandos são enviados pro banco, pode considerar alterar um parâmetro no banco chamado CURSOR_SHARING para FORCE… ele força a utilização de bind variables pelo otimizador..

    Esse parâmetro é dinâmico, e vc pode alterá-lo até pode uma trigger de logon,, fazendo assim pode filtrar uma determinada maquina, ou usuário para testes..

    Quanto a necessidade de corrigir querys,, se for 11g, existe a possibilidade de se trocar o plano de execução de uma determinada query por outro que você sabe que é melhor..

    Mas só lembrando,, sempre testar BEM este tipo de alteração para não ser um tiro no pé (principalmente o cursor_sharing)