Thursday, July 13, 2006

Solaris 10: Oracle 10g - System V IPC

Solaris 10 trae un nuevo cambio, que no es menor. Hasta Solaris 9, cuando se necesitaba setear los parámetros de memoria compartida, semáforos y colas de mensajes (típico para una instalación de Oracle), había que agregar los parámetros en el archivo /etc/system y reiniciar el servidor para que los cambios tomaran efecto.

Ahora, en Solaris 10, los parámetros ya no se agregan en el archivo /etc/system y para que tengan efecto no es necesario reiniciar el servidor, ya que el cambio se realiza en forma dinámica. Ahora, los parámetros se configuran en "proyectos" (project). Esto permite tener en un mismo sistema distintas instancias de Base de Datos con distintos parámetros de System V IPC, por ejemplo.

Uno puede crear projects para lo que quiera. Sin embargo, si quiere que todos los procesos y Bases de Datos tengan los mismos parámetros, sólo se cambian los parámetros en el projecto "default", al cual pertenecen todos los usuarios. En este ejemplo, se modificarán los parámetros de memoria compartida/semáforos, de acuerdo a lo solicitado por el DBA y se realizará en el proyecto default.

Antes de ir al ejemplo, mostraré algunos comandos que ayudan a trabajar con proyectos:
id -p: muestra a qué proyecto(s) pertenece el usuario.
-bash-3.00$ id -p
uid=102(chazcaz) gid=14(sysadmin) projid=3(default)
cat /etc/project: es el archivo que guarda la base de datos de proyectos. Para hacer modificaciones, se utilizan los comandos prctl y rctladm.
-bash-3.00$ cat /etc/project
system:0::::
user.root:1::::
noproject:2::::
default:3::::project.max-shm-memory=(priv,1181116006,deny)
group.staff:10::::
projects: muestra a qué proyectos pertenece o tiene acceso el usuario
-bash-3.00$ projects
default
prctl: muestra o setea "resource controls" en un proceso en ejecución, tarea o proceso.
rctladm: muestra o modifica el estado global de "system resource controls"
projmod: modifica la información de un proyecto en el sistema

Además, muchas aplicaciones permiten ahora desplegar el uso o consumo de recursos por proyectos (prstat -J, ipcs -J, etc).

Bien, ahora el ejemplo. El DBA solicita modificar los siguientes parámetros de Kernel para una instalación de Oracle 10g en un servidor corriendo Solaris10:
project.max-sem-ids 100
semsys:seminfo_semmns 1024
process.max-sem-nsems 256
semsys:seminfo_semvmx 32767
project.max-shm-memory 4294967295
project.max-shm-ids 100

Lo primero que se debe hacer, es ir a http://docs.sun.com y bajar el documento Solaris Tunable Parameters (para Solaris10) y ver si existen estos parámetros y no están obsoletos.

Al revisar el documento, se encuentro que los parámetros semsys:seminfo_semmns y semsys:semingo_semvmx están obsoletos en Solaris10 y si se llegan a agregar al arhivo /etc/system, serán ignorados. También se encuentra que para configurar el resto de parámetros, se debe hacer a través de proyectos.

Entonces, se modificaran estos paramétros del project default, ya que el usuario oracle también pertenece a este proyecto. Se pueden configurar los 4 parámetros en una línea o se pueden hacer por separado. En nuestro caso, se realizará por separado con el comando projmod:

projmod -s -K "project.max-shm-memory=(privileged,4G,deny)" 'default'
projmod -s -K "process.max-sem-nsems=(privileged,256,deny)" 'default'
projmod -s -K "project.max-sem-ids=(privileged,100,deny)" 'default'
projmod -s -K "project.max-shm-ids=(privileged,100,deny)" 'default'

Para verificar el cambio, ejecutar los comandos:
prctl -i project default
prctl -i process $$

Finalmente, un usuario puede tener acceso a varios proyectos y para cambiarse de uno a otro debe hacerlo con el comando /usr/bin/newtask -p project_name. En otro post espero poder mostrar más cosas acerca de proyectos.

Para más información de los comandos projmod, prctl, etc, ir a http://docs.sun.com/app/docs/doc/817-1592/6mhahuoj5?a=view .

Saludos,
ChaZcaZ./

No comments: