viernes, 26 de septiembre de 2008

Oracle: modo "Servidor Dedicado"

Para los "listillos" en Oracle, como yo. Es decir aquellos que no somos DBA sino que nuestra experiencia se basa más en Java, pero que nos ha tocado alguna vez configurar Oracle.

Y claro, es un mundo. Y claro, las opciones aparentemente más lógicas no son las mejores.

En concreto me ha pasado con la configuración de Shared/Dedicated Server. En las instrucciones de creación de base de datos dice lo siguiente:
  • Modo Servidor Dedicado: "para cada conexión cliente la base de datos asignará un recurso exclusivo (...). Utilice este modo cuando el número total previsto de conexiones cliente sea pequeño o los cuando los clientes realicen solicitudes reiteradas y de larga duración a la base de datos. (...)"
  • Modo Servidor Compartido: "varias conexiones cliente comparten un pool de recursos (...). Utilice este modo cuando el número de usuarios que dan conectarse simultáneamente a la base de datos sea considerable a la vez que se utilizan eficazmente los recursos del sistema. (...)"
A priori, ¿cuál eligiríais? Pues no.

La cuestión es qué se considera "pequeño" en cuanto al número de conexiones. Y qué hardware tenemos. Y si el servidor Oracle compite por recursos con otros procesos importantes en la misma máquina. Y cómo se conectan las aplicaciones a la base de datos.

En resumidas cuentas, el modo compartido es un pool de conexiones. Pero nuestras aplicaciones (Java o lo que sea) ya gestionan las conexiones a través de uno o varios pooles por lo que lo único que estamos haciendo es anidar pooles. O lo que es lo mismo, en realidad en un escenario como el mío estoy tirando recursos y rendimiento a la basura. Cada shared server consume unos 20 megas de memoria adicional y, al fin y al cabo, termina abiendo conexiones reales dedicadas, claro.

Esquema del modo dedicado (Dedicated):

Esqueña del modo compartido (Shared Servers):


Por regla general podemos considerar que si vamos a tener menos de 500-600 sesiones abiertas y además hay pooles de conexiones en los servidores de aplicaciones cliente, se use el Modo Dedicado. En caso de un volumen mucho mayor el modo compartido.

¿Y cómo cambiar de un modo compartido a uno dedicado?. En Oracle 10g y superiores:
$ sqlplus system as sys dba
SQL> alter system set processes=400 scope=spfile;
SQL> alter system reset sessions scope=spfile;
SQL> alter system set shared_servers=0 scope=spfile;
SQL> alter system set max_shared_servers=0 scope=spfile;
SQL> alter system reset dispatchers scope=spfile;
Donde dice "400", establézcase el valor que corresponda. Si no se establece valor para sessions, el sistema lo tomará de la siguiente fórmula: sessions = (processes * 1.1) + 5.

Puesto que estos valores son estáticos, debe reiniciarse la instancia para que tome su valor.

¿Y cómo se consultan los valores actuales?:
SQL> show parameter [parametro]
P.D: Para los que conocen el init.ora y no los SPFILES, las cosas han cambiado, ahora los parámetros se establecen a través de estos comandos de sistema...

1 comentario:

Blogger dijo...

Bluehost is ultimately one of the best web-hosting company for any hosting plans you require.