Skip to main content

Oracle SHARED_SERVER vs DEDICATED_SERVER

El cambio de dedicated server a shared server es fácil. Comienzas editando el archivo init.ora para tu instancia. Vas a necesitar, o añadir una línea para dispatchers, o editar la línea existente (Cuando se crea una base de datos con DBCA en Windows, Oracle añade una línea, incluso si no requiere dispatchers. Entonces, se debe tener en cuenta el hecho de que puedes sencillamente cambiar esa linea). Como mínimo vas a necesitar:
dispatchers="(protocol=tcp)"
Una configuración más completa sería:
dispatchers="(protocol=tcp)(dispatchers=2)(service=mydatabase)"

El (dispatchers=2) que ves le dice a Oracle que cree 2 dispatchers al inicio.

Configurar los dispatchers puede ponerse más complejo. A menos que tengas experiencia y documentación para establecer una configuración más avanzada, es probablemente mejor permitirle a Oracle darte los valores por defecto para todo lo demás. A continuación se muestra una lista completa de todos los posibles parámetros de dispatcher:

dispatch_clause::= (PROTOCOL = protocol) | (ADDRESS = address) | (DESCRIPTION = description ) [options_clause] options_clause::= (DISPATCHERS = integer | SESSIONS = integer | CONNECTIONS = integer | TICKS = seconds | POOL = {1 | ON | YES | TRUE | BOTH | ({IN | OUT} = ticks) | 0 | OFF | NO | FALSE | ticks} | MULTIPLEX = {1 | ON | YES | TRUE | 0 | OFF | NO | FALSE | BOTH | IN | OUT} | LISTENER = tnsname | SERVICE = service | INDEX = integer )

Hay algunos otros parámetros que querrás cambiar a medida que vayas trabajando con dispatchers. Aquí un ejemplo:

# Dispatchers
dispatchers="(protocol=tcp)(dispatchers=2)(service=test)"

# shared servers al inicio
shared_servers=2

# máximo de sesiones shared server
shared_server_sessions=200

# máximo de shared servers
max_shared_servers=20

## máximo de dispatchers
max_dispatchers=20

Una vez cambiado el archivo init.ora y levantada tu base de datos, ¿Cómo puedes saber si las conexiones están yendo a través de dispatchers? Hay un número de vistas dinámicas de rendimiento que te pueden entregar esta información, por ejemplo v$session, v$dispatcher, v$queue. Para mantener las cosas fáciles, a continuación se muestra una vista que muestra los datos que queremos observar:

CREATE OR REPLACE FORCE VIEW SYSTEM.CURRENT_CONNECTIONS (SID, SERIAL#, USERNAME, OSUSER, STATUS, "SCNDS NOT ACTIVE", DISPATCHER) AS SELECT s.SID, s.serial#, s.username, s.osuser, s.status, DECODE (s.username, NULL, 0, s.last_call_et) "SCNDS NOT ACTIVE", NVL (d.NAME, 'none') "DISPATCHER" FROM v$session s, v$dispatcher d WHERE s.paddr = d.paddr(+) ORDER BY status ASC, last_call_et ASC; CREATE PUBLIC SYNONYM CURRENT_CONNECTIONS FOR SYSTEM.CURRENT_CONNECTIONS;

Salida de ejemplo:
SELECT * FROM SYSTEM.CURRENT_CONNECTIONS; SID SERIAL# USERNAME OSUSER STATUS SCNDS NOT ACTIVE DISPAT ------ ------- ------------ ------------ -------- ---------------- ------ 15 167 SYSTEM STOEVER ACTIVE 0 none 11 10 GENERAL GURJOBS_TEST ACTIVE 12535 none 1 1 @ ORACLE ACTIVE 0 none 2 1 @ ORACLE ACTIVE 0 none 3 1 @ ORACLE ACTIVE 0 none 4 1 @ ORACLE ACTIVE 0 none 5 1 @ ORACLE ACTIVE 0 none 6 1 @ ORACLE ACTIVE 0 none 7 1 @ ORACLE ACTIVE 0 none 8 1 @ ORACLE ACTIVE 0 none 18 176 WTAILOR jbautista INACTIVE 12 D000 16 191 WTAILOR jbautista INACTIVE 132 D001 10 212 WTAILOR jbautista INACTIVE 134 D001 13 119 WEB_USER SYSTEM INACTIVE 314 D000 14 20 SYSTEM vlugo INACTIVE 721 D001

Ahora puedes saber quién se está conectando y cómo, ya sea vía dispatcher o conexión dedicada.
¿Significa esto que ahora todas las conexiones serán a través de un dispatcher? No. Hay una gran cantidad de casos en los cuales querrás, o incluso, requerir una conexión que sea dedicada. Por ejemplo, para apagar la base de datos se necesita una conexión dedicada. Tambien, muchos procesos requieren muchos recursos y rendirán mejor con una conexión dedicada. Para crear una conexión dedicada, necesitarás editar el archivo TNSNAMES.ORA en la máquina desde la cual se está generando la conexión. Aquí un ejemplo:

# Conexión SHARED para probar la base de datos
TEST_SHARED = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = alpha2)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = SHARED) (SERVICE_NAME = test) ) )

# Conexión DEDICATED para probar la base de datos
TEST_DEDICATED = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = alpha2)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = test) ) )

Ahora para conectar a través del dispatcher, prueba esto:
SQLPLUS scott/tiger@test_shared

Para conectar a través de un proceso dedicado del servidor, prueba esto:
SQLPLUS scott/tiger@test_dedicated

Referencia documentación oficial

Articulo original

Comments

Popular posts from this blog

How to "safely" truncate history tables in Zabbix 6 before enabling timescale.

The script was tested against Zabbix 6.0 and 6.2. I'll add a proper introduction soon. If you don't fully understand every single line better don't run it in production. --RECREATING HISTORY TABLES WITH DATA. INSTEAD OF "WHERE FALSE" YOU CAN USE "WHERE CLOCK > X" IF YOU WANT TO PRESERVE SOME DATA ALTER TABLE history RENAME TO history_big; CREATE TABLE history as SELECT * FROM history_big where false; ALTER TABLE history_uint RENAME TO history_uint_big; CREATE TABLE history_uint as SELECT * FROM history_uint_big where false; ALTER TABLE history_str RENAME TO history_str_big; CREATE TABLE history_str as SELECT * FROM history_str_big where false; ALTER TABLE history_log RENAME TO history_log_big; CREATE TABLE history_log as SELECT * FROM history_log_big where false; ALTER TABLE history_text RENAME TO history_text_big; CREATE TABLE history_text as SELECT * FROM history_text_big where false; ALTER TABLE history_text RENAME TO history_text_big; CREATE TABLE...

Consulta de espacio ocupado de logs SQL SERVER

SQLPERF Pese a que en SQL SERVER disponemos de funciones simples que nos devuelven información relevante sobre el uso de la base de datos, muchas veces necesitamos especificar campos específicos sobre una funcion predeterminada. En el ejemplo siguiente, se muestra la consulta equivalente a realizar una de las DMF más usadas: DBCC sqlperf(logspace) La consulta anterior es exactamente igual a la siguiente: SELECT instance_name AS DatabaseName,        [Data File(s) Size (KB)],        [LOG File(s) Size (KB)],        [Log File(s) Used Size (KB)],        [Percent Log Used] FROM (    SELECT *    FROM sys.dm_os_performance_counters    WHERE counter_name IN    (        'Data File(s) Size (KB)',        'Log File(s) Size (KB)',        'Log File(s) Used Size (KB)',        'Per...

Uso de memoria en SQL Server

Configuración de memoria Muchas veces, nos encontramos con que un servidor SQL Server está consumiendo demasiada memoria. Las causas de esto pueden ser muchas; Demasiados usuarios conectados o un exceso de carga de trabajo pueden ser las causantes. Sin embargo, una de las características que mas destacan de SQL Server , es que una vez que le asignamos memoria , la instancia es la encargada de administrarla, me explico. Cuando miramos el administrador de tareas de Windows (Task manager) nos daremos cuenta de que en la pestaña de rendimiento se observa muy poca memoria disponible. Esto no quiere decir que sea esa la memoria utilizada (aunque explícitamente lo diga), debido a que la instancia administra su propia memoria libre dentro de su memoria utilizada. Por ejemplo, si tenemos un servidor con 100GB de memoria RAM, y Task manager nos indica que tenemos 2 GB libres, y además, SQL Server está ocupando 90GB de RAM, tenemos que tomar en cuenta que dentro de esos 90GB ocupados por la i...