oracle $ sqlplus SQL*Plus: Release 11.2.0.3.0 Production on Tue Oct 8 18:07:58 2013 Copyright (c) 1982, 2011, Oracle. All rights reserved. Enter user-name: /as sysdba Connected to an idle instance. SQL> startup nomount pfile='/home/oracle/working/antunez/initBLADB.ora'; ORA-27102: out of memory Linux-x86_64 Error: 28: No space left on device SQL> exit Disconnected
El error en el trace file era el siguiente:
Large Pages segment allocation succeed, size = 201326592, shmid = 425984, target_node = 129, large page used 96 skgm warning: ENOSPC creating segment of size 0x680000000 fix shm parameters in /etc/system or equivalent
Entonces me puse ahora si a checar que estaba pasando, ya que teníamos 31g de memoria en el servidor y la BD ocupaba nada mas 25, era obvio que si este es un nuevo servidor dedicado y nada estaba siendo utilizado, que había una configuración errónea en los parámetros de memoria del kernel.
Originalmente estos eran mis parámetros de kernel
kernel.shmmax = 68719476736 kernel.shmall = 2097152
Para poder explicar lo que hice, tengo que dar la definición de estos dos parámetros y uno mas:
SHMALL .- Establece, en numero de paginas, la cantidad total de páginas de memoria compartidas que se puede utilizar en todo el sistema.
SHMMAX .- Es el tamaño máximo de un segmento único de memoria compartida en bytes. El parámetro SHMMAX es un parámetro protector que establece el límite superior de la cantidad de memoria compartida que un proceso posiblemente puede solicitar. El valor máximo admitido de SHMMAX en un sistema de 32 bits es 4 GB - 1 byte.
SHMALL es la division de SHMMAX/TAMAÑO_DE_PAGINA
SHMMNI .- El número máximo de segmentos de memoria compartida en un sistema
Viendo la definición de estos dos parámetros, y el error en el trace file están mal definidos, ya que esta tratando de crear un segmento de tamaño 27917287424 (Convertido de Hexadecimal a Decimal), así que me di a la primer tarea de obtener el valor del tamaño de la pagina
oracle $ getconf PAGE_SIZE 4096
Ahora si que tenia el numero de pagina y el tamaño de segmento que la base de datos estaba tratando de crear, lo único que tenia que hacer es dividir 25568477184/4096 y estos son los nuevos valores que necesitaba poner en mi configuración del kernel
kernel.shmall = 6815744 kernel.shmmax = 27917287424
Una vez que cambie los parámetros como root en /etc/sysctl.conf , aplique los cambios con sysctl -p y listo
root $ vi /etc/sysctl.conf root $ sysctl -p ... kernel.shmall = 6815744 kernel.shmmax = 27917287424 kernel.shmmni = 4096 ... vm.nr_hugepages = 12292
Y listo, ahora si pude abrir mi base de datos :)
SQL> startup nomount pfile='/home/oracle/working/antunez/initBLADB.ora'; ORACLE instance started. Total System Global Area 2.5655E+10 bytes Fixed Size 2240344 bytes Variable Size 2818572456 bytes Database Buffers 2.2750E+10 bytes Redo Buffers 84033536 bytes SQL> show parameter large NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ large_pool_size big integer 0 use_large_pages string ONLY
Espero que te sirva estas definiciones y compartelo si te gusta o tambien cualquier opinion es bien recibida.
No hay comentarios.:
Publicar un comentario