¿Cuántos usuarios soporta Oracle?

Controlando Sesiones por Usuario en Oracle

Valoración: 4.48 (7712 votos)

La gestión eficiente de los recursos en una base de datos Oracle es fundamental para garantizar su rendimiento y estabilidad. Uno de los aspectos cruciales de esta gestión es el control del número de sesiones que los usuarios pueden establecer. Si bien Oracle Database puede manejar una gran cantidad de conexiones, es vital implementar mecanismos para evitar que un único usuario consuma una porción desproporcionada de los recursos disponibles, como CPU, memoria o procesos de servidor.

https://www.youtube.com/watch?v=ygUGI25ldGNh

La necesidad de limitar las sesiones por usuario surge directamente de la arquitectura de una base de datos multiusuario. Cada sesión consume recursos del sistema operativo y de la instancia de base de datos. Un número excesivo de sesiones, especialmente si son abiertas por un mismo usuario, puede llevar a la degradación del rendimiento general, tiempos de respuesta lentos e incluso a la indisponibilidad del servicio para otros usuarios. Por lo tanto, establecer límites sobre cuántas sesiones puede abrir un usuario de forma concurrente es una práctica de administración recomendada.

¿Cómo aumentar el límite de sesión en la base de datos Oracle?
Edite el perfil predeterminado (DEFAULT) asignado a todos los usuarios. Inicialmente, el perfil DEFAULT define recursos ilimitados, incluyendo SESSIONS_PER_USER. Puede modificar estos límites con la instrucción ALTER PROFILE .
Índice de Contenido

Limitando Sesiones por Usuario con Perfiles

En Oracle Database, la forma estándar y más efectiva de controlar el número de sesiones concurrentes que un usuario puede tener es a través de los Perfiles (Profiles). Un perfil es una colección de límites de recursos y contraseñas que se asigna a uno o más usuarios. Cuando creas un usuario, le asignas un perfil (si no asignas uno explícitamente, se le asigna el perfil DEFAULT). Dentro de un perfil, puedes definir varios límites, y uno de los más importantes para la gestión de sesiones es el límite de sesiones por usuario.

El parámetro específico dentro de un perfil que controla este límite es SESSIONS_PER_USER. Al establecer un valor numérico para este parámetro en un perfil, estás indicando el número máximo de sesiones que cualquier usuario asignado a ese perfil puede tener activas al mismo tiempo. Si un usuario intenta abrir una nueva sesión y ya ha alcanzado el límite definido en su perfil, la base de datos rechazará la nueva conexión y devolverá un error.

Por ejemplo, si defines un perfil llamado 'LIMITADO' y estableces SESSIONS_PER_USER a 5, cualquier usuario asignado a este perfil solo podrá tener un máximo de 5 sesiones abiertas simultáneamente. Intentar abrir una sexta sesión fallará. Esto es increíblemente útil para restringir el impacto potencial de usuarios o aplicaciones que podrían accidentalmente (o intencionalmente) abrir una gran cantidad de conexiones.

Creando y Modificando Perfiles para Limitar Sesiones

Para implementar esta limitación, necesitas crear un nuevo perfil o modificar uno existente. La sintaxis SQL para crear un perfil con un límite de sesiones sería similar a esta:

CREATE PROFILE perfil_limitado LIMIT SESSIONS_PER_USER 10;

Esta sentencia crea un perfil llamado perfil_limitado donde cualquier usuario asignado a él estará limitado a un máximo de 10 sesiones concurrentes.

Si deseas modificar un perfil existente (por ejemplo, el perfil DEFAULT o uno que ya hayas creado), utilizas la sentencia ALTER PROFILE:

ALTER PROFILE DEFAULT LIMIT SESSIONS_PER_USER 5;

Este ejemplo modifica el perfil DEFAULT para limitar a 5 las sesiones por usuario para todos aquellos usuarios que no tienen un perfil específico asignado. Ten cuidado al modificar el perfil DEFAULT, ya que afecta a muchos usuarios.

¿Por qué hay tantas sesiones inactivas en Oracle?
Por lo general, una gran cantidad de sesiones inactivas a largo plazo se deben a problemas con una aplicación o un servidor de aplicaciones que no gestiona sus conexiones correctamente . Lo obvio es corregir el problema desde su origen.

Una vez que el perfil con el límite de SESSIONS_PER_USER está definido, debes asignar este perfil a los usuarios a los que deseas aplicar la restricción. La sentencia para asignar un perfil a un usuario es:

ALTER USER nombre_usuario PROFILE perfil_limitado;

Al asignar el perfil perfil_limitado al usuario nombre_usuario, este usuario quedará sujeto al límite de 10 sesiones concurrentes definido en ese perfil.

Es importante monitorear el uso de sesiones y ajustar estos límites según sea necesario. Un límite demasiado bajo podría impedir que usuarios legítimos realicen su trabajo, mientras que un límite demasiado alto podría no ofrecer suficiente protección contra el consumo excesivo de recursos.

¿Qué Pasa con el Límite Total de Sesiones?

Además del límite por usuario controlado por los Perfiles, Oracle Database también tiene un límite global en el número total de sesiones que pueden existir en una instancia. Este límite está controlado principalmente por el parámetro de inicialización PROCESSES. Cada conexión de usuario a la base de datos requiere un proceso de servidor (o un hilo, dependiendo de la configuración del dispatcher y el sistema operativo). El parámetro PROCESSES define el número máximo de procesos del sistema operativo que pueden conectarse a Oracle. El parámetro SESSIONS se deriva automáticamente de PROCESSES (normalmente SESSIONS = (1.1 * PROCESSES) + 5) y establece el número máximo de sesiones de usuario y de fondo combinadas.

Aumentar el límite total de sesiones implica modificar el valor de PROCESSES (y, por extensión, SESSIONS) en el archivo de parámetros de inicialización (SPFILE o PFILE) y reiniciar la instancia de la base de datos para que el cambio tenga efecto. Sin embargo, aumentar estos parámetros sin una justificación adecuada y sin considerar la capacidad del hardware subyacente puede ser contraproducente, ya que cada proceso/sesión consume memoria y otros recursos del sistema operativo. Un valor demasiado alto podría llevar al agotamiento de los recursos del sistema operativo antes de que la base de datos alcance su propio límite.

Es crucial entender que el límite per-usuario (`SESSIONS_PER_USER` en el perfil) y el límite total de sesiones (`PROCESSES`/`SESSIONS` a nivel de instancia) son controles complementarios. El límite total establece la capacidad máxima de la instancia, mientras que el límite per-usuario distribuye de manera justa (o controlada) esa capacidad máxima entre los usuarios.

Sesiones Inactivas: Un Desafío Común

Otro aspecto importante de la gestión de sesiones son las Sesiones Inactivas. A menudo, los administradores de bases de datos observan un gran número de sesiones listadas como 'INACTIVE' en las vistas de rendimiento (como V$SESSION). ¿Por qué existen tantas sesiones inactivas y por qué persisten?

Una sesión se marca como inactiva cuando el usuario o la aplicación cliente han completado una operación (como ejecutar una consulta o una transacción) y no están ejecutando activamente otra operación en ese momento. La conexión con el servidor de base de datos sigue abierta, pero el proceso de servidor asociado está esperando la siguiente instrucción del cliente. Esto es un comportamiento normal y esperado.

¿Cómo aumentar el límite de sesión en la base de datos Oracle?
Edite el perfil predeterminado (DEFAULT) asignado a todos los usuarios. Inicialmente, el perfil DEFAULT define recursos ilimitados, incluyendo SESSIONS_PER_USER. Puede modificar estos límites con la instrucción ALTER PROFILE .

Sin embargo, las sesiones inactivas pueden convertirse en un problema si el cliente termina de forma anormal (por ejemplo, la aplicación se cierra forzosamente, la red se cae, el ordenador cliente se apaga) sin cerrar correctamente la conexión a la base de datos. En estos casos, el proceso de servidor en el lado de la base de datos puede no darse cuenta inmediatamente de que el cliente ha desaparecido. La sesión queda colgada en estado 'INACTIVE', consumiendo recursos (aunque menos que una sesión activa) y manteniendo bloqueos o transacciones abiertas si no se han comprometido o revertido correctamente.

Oracle Database tiene mecanismos para detectar conexiones terminadas de forma anormal, como el 'dead connection detection' (DCD), que envía paquetes de sondeo a los clientes inactivos periódicamente. Si el cliente no responde, la sesión se termina del lado del servidor. Sin embargo, como se mencionó en la información proporcionada, existen limitaciones en esta detección. Si el cliente aún está 'técnicamente' conectado a nivel de red (aunque la aplicación no esté funcionando), el paquete de sondeo podría ser descartado por el sistema operativo del cliente sin que el proceso de servidor de Oracle se dé cuenta de que la aplicación ya no existe. Esto puede llevar a que las sesiones inactivas persistan por más tiempo del deseado.

Diferencia entre Sesiones Activas e Inactivas

CaracterísticaSesión ActivaSesión Inactiva
Estado actualEjecutando una sentencia SQL o PL/SQLEsperando la siguiente instrucción del cliente
Consumo de CPUAlto durante la ejecuciónMuy bajo (casi nulo)
Consumo de MemoriaAsigna PGA (Program Global Area), puede ser significativoMantiene PGA asignada, pero no aumenta activamente
Proceso/Hilo ServidorOcupado ejecutandoEsperando, proceso/hilo 'ocioso'
Impacto en RecursosDirecto y potencialemente altoIndirecto (manteniendo recursos asignados, bloqueos)
Detección de Terminación AnormalMás evidente si la operación fallaDepende de mecanismos como DCD

Gestionar un gran número de Sesiones Inactivas a menudo implica configurar adecuadamente los parámetros de red (como DCD), implementar timeouts a nivel de perfil o base de datos, y educar a los desarrolladores de aplicaciones para que cierren explícitamente las conexiones cuando ya no las necesiten.

Consideraciones sobre Límites en Otros Componentes

Es importante no confundir los límites de sesiones de la base de datos Oracle con los límites de sesiones en otros productos o componentes de Oracle. Por ejemplo, la información proporcionada mencionaba límites de sesiones para Oracle ILOM (Integrated Lights Out Manager) en servidores SPARC (10, 5 o 25 sesiones concurrentes). Estos límites se refieren a las conexiones administrativas (serial, SSH, web) al hardware de gestión del servidor, no a las conexiones de usuarios a la base de datos Oracle que se ejecuta en ese servidor. Son contextos completamente diferentes y los límites no son transferibles.

Preguntas Frecuentes

¿Por qué debería limitar las sesiones por usuario?

Limitar las sesiones por usuario ayuda a prevenir que un solo usuario o aplicación consuma una cantidad excesiva de recursos de la base de datos (CPU, memoria, procesos), lo que podría afectar el rendimiento y la disponibilidad para otros usuarios. Es una medida de control de recursos y estabilidad.

¿Cuál es el número máximo de sesiones por usuario en Oracle?
Oracle ILOM admite un máximo de 10 sesiones de usuario activas simultáneas para un SP de un solo servidor . Algunos SP de un solo servidor SPARC tienen un límite de 5 sesiones de usuario activas simultáneas.

¿Cómo implemento el límite de sesiones por usuario en Oracle?

Utilizas Perfiles. Dentro de un perfil, estableces el parámetro SESSIONS_PER_USER al número máximo de sesiones concurrentes permitidas para los usuarios asignados a ese perfil.

¿Qué parámetro controla el límite total de sesiones en la instancia?

El parámetro principal es PROCESSES, que determina el número máximo de procesos del sistema operativo que pueden conectarse a Oracle. El parámetro SESSIONS se deriva de PROCESSES y controla el número total de sesiones (usuarios y fondo).

¿Por qué tengo tantas sesiones inactivas?

Las sesiones inactivas son conexiones abiertas donde el cliente no está ejecutando ninguna operación. Pueden persistir si el cliente termina de forma anormal (cierre forzoso, caída de red) sin cerrar correctamente la conexión, y los mecanismos de detección de conexión muerta no actúan de inmediato.

¿Las sesiones inactivas consumen recursos?

Sí, aunque mucho menos que las sesiones activas. Mantienen asignada memoria (PGA) y un proceso de servidor. Un número excesivo de sesiones inactivas puede consumir una cantidad significativa de memoria total y agotar el número de procesos disponibles definidos por el parámetro PROCESSES.

En resumen, la gestión de sesiones en Oracle Database es multifacética. Si bien existe un límite total de sesiones definido por los parámetros de instancia, la capacidad de limitar las sesiones a nivel de usuario mediante Perfiles y el parámetro SESSIONS_PER_USER es una herramienta poderosa para controlar el uso de recursos y proteger la estabilidad de la base de datos frente a comportamientos inesperados o abusivos de los clientes. Comprender la diferencia entre sesiones activas e inactivas y cómo gestionar estas últimas también es clave para una administración de base de datos eficiente.

Si quieres conocer otros artículos parecidos a Controlando Sesiones por Usuario en Oracle puedes visitar la categoría Bases de datos.

Ivan

Soy un entusiasta de la tecnología con especialización en bases de datos, particularmente en MySQL. A través de mis tutoriales detallados, busco desmitificar los conceptos complejos y proporcionar soluciones prácticas a los desafíos cotidianos relacionados con la gestión de datos

Aprende mas sobre MySQL

Subir