Otimizar memória Oracle DB em Desenvolvimento

Máquina de desenvolvedor deveria ter memória infinita 🙂 ou próximo disso. Como isso ainda não é possível, utilizamos algumas maneira de otimizar o consumo de memória. Vamos ver como fazer isso para o Oracle 10g XE em ambiente de desenvolvimento. Não faça isso em ambientes de produção! Nós iremos modificar o SGA (System Global Area) do Oracle. Para mais informações sobre o que é SGA, veja nesse site.

  1. Faça backup do seguinte arquivo: $ORACLE_HOME/dbs/spfileXE.ora que é o arquivo que iremos alterar. No meu linux ele está localizado em: /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/dbs/spfileXE.ora
  2. Abra o SQL Plus (Linux: "sqlplus /nolog" | Windows: "sqlplus.exe /nolog").
  3. Conecte com um usuário SYSDBA: "conn / as sysdba"
  4. Verifique a SGA com o comando: "show sga". Deve aparecer algo parecido com isso:
    SQL> show sga
    
    Total System Global Area  805306368 bytes
    Fixed Size                  1261444 bytes
    Variable Size             213909628 bytes
    Database Buffers          587202560 bytes
    Redo Buffers                2932736 bytes
  5. Verifique os parametros do SGA com o comando: "show parameter sga".
    SQL> show parameter sga
    
    NAME                     TYPE     VALUE
    ------------------------------------ ----------- ------------------------------
    lock_sga                 boolean     FALSE
    pre_page_sga             boolean     FALSE
    sga_max_size             big integer 768M
    sga_target               big integer 768M
  6. Altere o sga_target para 130M (creio que seja mais que suficiente para máquina de desenvolvimento): "alter system set SGA_TARGET=130M scope=spfile;"
  7. Altere o sga_max_size para 256M: "alter system set sga_max_size=256M scope=spfile;"
  8. Desligue a base: "shutdown;"
  9. Ligue novamente: "startup;"
  10. Execute o: "show sga":
    SQL> show sga
    
    Total System Global Area  268435456 bytes
    Fixed Size                  1258392 bytes
    Variable Size             188746856 bytes
    Database Buffers           75497472 bytes
    Redo Buffers                2932736 bytes
  11. Execute o: "show parameter sga":
    SQL> show parameter sga
    
    NAME                     TYPE     VALUE
    ------------------------------------ ----------- ------------------------------
    lock_sga                 boolean     FALSE
    pre_page_sga             boolean     FALSE
    sga_max_size             big integer 256M
    sga_target               big integer 132M

Como podemos ver, o uso de memória do SGA está bem reduzido. Caso você tenha algum problema similar a esse:

ORA-00604: error occurred at recursive SQL level 1
ORA-04030: out of process memory when trying to allocate 16 bytes (sql area,kglhin: temp)

restaure o backup do arquivo spfileXE.ora e se você esqueceu de fazer o backup utilize o procedimento de reinstalação do oracle-xe.

Sobre: Thiago Galbiatti Vespa

Thiago Galbiatti Vespa é mestre em Ciências da Computação e Matemática Computacional pela USP e bacharel em Ciências da Computação pela UNESP. Coordenador de projetos do JavaNoroeste, membro do JCP (Java Community Process), consultor Oracle, arquiteto de software de empresas de médio e grande porte, palestrante de vários eventos e colaborador de projetos open source. Possui as certificações: Oracle Certified Master, Java EE 5 Enterprise Architect – Step 1, 2 and 3; Oracle WebCenter Portal 11g Certified Implementation Specialist; Oracle Service Oriented Architecture Infrastructure Implementation Certified Expert; Oracle Certified Professional, Java EE 5 Web Services Developer; Oracle Certified Expert, NetBeans Integrated Development Environment 6.1 Programmer; Oracle Certified Professional, Java Programmer; Oracle Certified Associate, Java SE 5/SE 6