MTBASE / SYBASE DE COLOMBIA
 
Búsqueda avanzada...
Versión para imprimir Versión para imprimir Enviar vínculo por e-mail Enviar por e-mail Ver atributos del documento Atributos del documento
 

Configuración y Uso de Múltiples Bases de Datos Temporales en Adaptive Server Enterprise

Introducción

Adaptive Server Enterprise (ASE) 12.5.0.3 introduce nuevas características en el servidor de datos, incluyendo el soporte a Múltiples Bases de Datos tempdb (MTDB); el término "tempdb de usuario" (el cuál usaremos a lo largo de éste documento) también hace referencia a ésta nueva característica de ASE. Al definir varias tempdb de usuario, podemos reducir la contención sobre las tablas del sistema de la base de datos tempdb. Esto es muy perceptible sobre todo con aplicaciones que hacen uso frecuente de tablas temporales y SQL que genera tablas de trabajo (worktables), como distinct, order by, etc. Otro beneficio importante es que si un usuario llegase a llenar una tempdb de usuario, sólo los usuarios asociados a esa base de datos quedarían eventualmente suspendidos (si quisieran modificar datos en esa tempdb); otros usuarios, asociados a otras bases de datos temporales, continuarían trabajando normalmente. Por último, dado que las tempdb de usuario se pueden borrar y volver a crear, sería relativamente fácil redimencionarlas (borrarlas y crearlas con un nuevo tamaño), lo que no se puede hacer con la tempdb del sistema.

Antes de poder implementar las MTDB, se requiere de alguna planeación. Usted deberá decidir el número de bases de datos temporales, su ubicación física, sus tamaños, cómo serán asignadas y el efecto de su uso desde el punto de vista de las aplicaciones existentes. Otro aspecto importante que también debe ser considerado es la creación de cachés con nombre para dichas bases de datos. El enfoque de éste documento es brindar una introducción y describir la funcionalidad de las MTDB. Los aspectos de rendimiento y afinamiento, tales como cachés y ubicación física, no son directamente cubiertos.

La implementación inicial de MTDB de ASE 12.5.0.3 tiene un alcance limitado con respecto a la funcionalidad planeada para versiones futuras. En ésta versión inicial, existen algunas limitantes en el uso de las tempdb de usuario. Estas limitantes serán discutidas en este documento. ASE 12.5.1 elimina algunas de esas limitantes e incorpora soporte a MTDB a través de Sybase Central 4.1.

Contenido

Este documento técnico contiene las siguientes secciones:

Creación de una Base de Datos Temporal

El primer paso consiste en crear una o más tempdb de usuario. Antes, usted debe usar el comando disk init para crear dispositivo(s) para las bases de datos temporales. El comando create database fue modificado ligeramente, agregando la opción temporary. Por ejemplo:

/* Crea una base de datos temporal llamada 'satempdb', de 20Mb, sobre el dispositivo 'satempdb_dev' */
create temporary database satempdb 
on satempdb_dev = 20
go

/* Crea una base de datos temporal llamada 'tempdb01', de 30Mb, sobre el dispositivo 'tempdb01_dev' */
create temporary database tempdb01 
on tempdb01_dev = 30
go

Al usar la opción temporary, le estamos indicando a ASE que estás serán tempdb de usuario. Un bit en la columna status3 de la tabla del sistema master..sysdatabases se activa para indicar esto. La base de datos existirá hasta tanto no sea eliminada con el comando drop database, como cualquier otra base de datos de usuario. Al crear una nueva base de datos temporal, se recomienda no usar las opciones for load ni for proxy_update. Otra recomendación es que todas las bases de datos temporales tengan el mismo tamaño para asegurar que todos los usuarios tengan la misma disponibilidad de espacio, aunque esto no es necesariamente obligatorio.

Una tempdb de usuario es limpiada durante el arranque de ASE, tal como la base de datos tempdb del sistema. Sinembargo, dado que las tempdb de usuario no son bases de datos del sistema, éstas son recuperadas usando el orden normal de recuperación (según el dbid de cada una). Si un servidor tiene varias bases de datos de usuario, los usuarios pueden comenzar a  trabajar antes de que las bases de datos temporales hayan sido recuperadas. Usted puede usar el procedimiento sp_dbrecovery_order para cambiar el orden de recuperación de tal manera que las tempdb de usuario sean recuperadas antes que las bases de datos de usuario.

Las opciones select into/bulkcopy/pllsort y trunc log on chkpt son automáticamente activadas para las tempdb de usuario, al igual que para la base de datos tempdb del sistema. Adicionalmente, las tempdb de usuario tienen activa la opción user created tempdb. Estas opciones se pueden observar usando el procedimiento almacenado sp_helpdb, tal como para cualquier otra pase de datos del servidor. Por ejemplo,

sp_helpdb satempdb
go

name     db_size owner dbid created status
----     ------- ----- ---- ------- ------
satempdb 20.0 MB sa       4 Jan 22, 2003 select into/bulkcopy/pllsort, trunc log on chkpt, user created temp db

device_fragments size    usage        created            free kbytes
---------------- ----    -----        -------            -----------
satempdb_dev     20.0 MB data and log Jan 22 2003 3:12PM        1786

Para llevar a cabo las operaciones de administración de las tempdb de usuario, ASE incorpora ahora el procedimiento almacenado sp_tempdb. A lo largo del documento discutiremos las diferentes opciones de éste procedimiento. Vea también la sección Sintaxis del Procedimiento sp_tempdb, más adelante.

Creación de un Grupo de Bases de Datos Temporales

Una vez creadas las bases de datos temporales, usted puede crear grupos de bases de datos temporales. Si usted no crea grupos, una tempdb de usuario sólo será usada si una aplicación o el login sa es específicamente asociado a dicha base de datos.

Para crear nuevos grupos de bases de datos use la opción create del procedimiento almacenado sp_tempdb. Por ejemplo,

sp_tempdb 'create', 'nombre_del_grupo'
go

donde nombre_del_grupo es el nombre del nuevo grupo.

Inicialmente, sólo existe el grupo default, y sólo la base de datos del sistema tempdb pertenece a éste grupo.

Limitante:
En la implementación actual de MTDB, no se permiten grupos diferentes al grupo default. Si usted intenta crear un grupo diferente al default, ASE arrojará el siguiente mensaje de error:

Server Message: Number 18941, Severity 16 
Server 'ase12503', Procedure 'sp_multdb_creategroup', Line 67: 
Only the 'default' group is currently supported.

Puede que esta funcionalidad sea extendida en futuras versiones de ASE. 

Para agregar otras bases de datos al grupo default use la opción add del procedimiento almacenado sp_tempdb. Por ejemplo,

sp_tempdb 'add', 'tempdb01', 'default'
go

Asociación de Usuarios a Bases de Datos Temporales

Para asociar logins o aplicaciones a bases de datos temporales, use la opción bind del procedimiento sp_tempdb. Por ejemplo:

-- Asocia el login 'sa' a la base de datos temporal 'satempdb'
sp_tempdb 'bind', 'lg', 'sa', 'db', 'satempdb'
go

-- Asocia el login 'javila' a la base de datos temporal 'tempdb01'
sp_tempdb 'bind', 'lg', 'javila', 'db', 'tempdb01'
go

-- Asocia el login 'operador' al grupo 'default'
sp_tempdb 'bind', 'lg', 'operador', 'gr', 'default'
go

Es recomendado crear una base de datos temporal para uso exclusivo del login sa, lo que significa que ésta no debe ser asociada al grupo default. Al hacer esto, se garantiza que el login sa siempre tenga disponibilidad de espacio temporal.

Limitantes:

  1. En ASE 12.5.0.3, solo el login sa podía ser asociado específicamente a una base de datos temporal. Si usted intentaba asociar un usuario diferente al sa, ASE arrojaba el siguiente mensaje de error:

    Server Message: Number 18952, Severity 16 
    Server 'ase12503', Procedure 'sp_multdb_bind', Line 216: 
    Only the 'sa' login is currently supported.

  1. En ASE 12.5.0.3, la opción bind del procedimiento almacenado sp_tempdb sólo permitía especificar una base de datos temporal, y no un grupo de bases de datos temporales.

Para asociar un login diferente al 'sa' a una base de datos temporal, o para asociar un login cualquiera a un grupo de bases de datos temporales, usted requiere como mínimo la versión 12.5.1 de ASE -- esta funcionalidad no estaba implementada en la versión inicial de MTDB de ASE 12.5.0.3.

Asociación de Aplicaciones a Bases de Datos Temporales

Usted puede asociar una aplicación a una base de datos temporal específica. Si no lo hace, se usará el grupo default. Esto puede ser útil para aplicaciones que requieran una tempdb muy grande, o que deban ser aisladas de otras aplicaciones. Para llevar a cabo esto, use el procedimiento sp_tempdb; por ejemplo:

sp_tempdb 'bind', 'ap', 'isql', 'db', 'tempdb01'
go

Todos los usuarios que se conecten a ASE usando isql tendrán a tempdb01 como su base de datos temporal. Existe un parámetro adicional en la función bind, el cual no se muestra en el ejemplo. Este parámetro es llamado hardness y puede tomar los valores 'hard' o 'soft'. El valor predeterminado del sistema es 'soft'. Tenga cuidado al usar el valor 'hard', ya que si lo hace y la base de datos temporal asociada no se encuentra disponible por alguna razón, la conexión a ASE será rechazada. Esto es contrario al valor 'soft', para el cuál si la tempdb de usuario no está disponible, se asignará en cambio la base de datos tempdb del sistema. El siguiente ejemplo demuestra esto.

Supongamos que ejecutamos el siguiente comando:

sp_tempdb 'bind', 'ap', 'isql', 'db', 'mytempdb02', NULL, 'hard'
go

Si por alguna razón la base de datos mytempdb2 no se encuentra disponible, ASE rechazaría la conexión y generaría el siguiente mensaje de error:

Msg 10513, Level 16, State 4: 
Temporary database based on specified binding could not be assigned. 
Since binding is hard, this results in a login failure. 
Msg 4002, Level 14, State 1: 
Login failed.

Tenga cuidado con esta opción, ya que todos los usuarios isql podrían quedar por fuera de ASE. Una alternativa en éste caso sería usar otra herramienta como SQL Advantage para establecer la conexión con ASE.

Para cambiar la opción de hardness use la opción bind del procedimiento sp_tempdb:

sp_tempdb 'bind', 'ap', 'isql', 'db', 'mytempdb02', NULL, 'soft'
go

Asignación de la Base de Datos Temporal

Si no existen asociaciones a nivel de aplicación, a los usuarios son asignados a las bases de datos temporales del grupo default, en orden de conexión. Por ejemplo, si el grupo default consistiera de las bases de datos tempdb, tempdb01 y tempdb02, al primer usuario en conectarse a ASE se le asignaría la base de datos tempdb, al segundo la base de datos tempdb01 y al tercero la base de datos tempdb02 (el orden de asignación de cada base de datos se basa en el dbid de cada base de datos). Esto continuará así hasta que ASE sea bajado. Al ser reiniciado, ASE comenzará de nuevo con la asignación.

Una vez el usuario ha establecido su conexión y se la ha asignado una tempdb de usuario, ésta no cambia durante la sesión. Una nueva variable del sistema está disponible para determinar cuál base de datos temporal le fue asignada al usuario. El siguiente comando retornará el dbid de la base de datos temporal asignada:

select @@tempdbid
go

Para obtener el nombre de la base de datos, el cual puede ser requerido para llevar a cabo alguna tarea, use la función del sistema db_name( ):

select db_name(@@tempdbid)
go

Cabe anotar que los procesos internos, tales como el housekeeper, etc. sólo usarán la base de datos tempdb del sistema. Para ver quién está usando una base de datos temporal en particular, use la opción who del procedimiento sp_tempdb:

sp_tempdb 'who', 'tempdb01'
go


spid    loginame
-----   ---------
21      mperez
25      pdiaz

Borrado de Bases de Datos Temporales

Para poder remover una base de datos temporal, usted debe tener acceso exclusivo a dicha base de datos. Para llevar a cabo esto, remueva la base de datos del grupo default y espere a que los usuarios ya asignados a esa base de datos se desconecten. Para hacer esto, use las opciones remove y who del procedimiento sp_tempdb. Por ejemplo:

sp_tempdb 'remove', 'tempdb02', 'default'
go
sp_tempdb 'who', 'tempdb02'
go

Una vez usted tenga acceso exclusivo a la base de datos, elimine las asociaciones y finalmente borre la base de datos con el comando drop database. Las asociaciones se pueden eliminar una a una, usando la opción unbind del sp_tempdb, o todas a la vez, usando la opción unbindall_db. Por ejemplo:

/* Elimina la asociación de un usuario /*
sp_tempdb 'unbind', 'lg', 'jperez', 'tempdb02'
go

/* Elimina la asociación de una aplicaión /*
sp_tempdb 'unbind', 'ap', 'isql', 'tempdb02'
go

/* Elimina todas las asociaciones a la base de datos temporal 'tempdb02'
sp_tempdb 'unbindall_db', 'tempdb02'
go

/* Borra la base de datos */
drop database tempdb02
go

Dado que es posible borrar y volver a crear las tempdb de usuario, sería relativamente fácil redimencionarlas, borrándolas y creándolas con un nuevo tamaño, lo que no se puede hacer con la tempdb del sistema.

Nota:
Usted no puede remover la base de datos del sistema tempdb del grupo default.

Aplicaciones Existentes

Es posible que aplicaciones existentes creen tablas temporales compartidas en la base de datos del sistema tempdb usando un comando como create table tempdb..tabla1(...). Estas tablas seguirán siendo creadas en la base de datos del sistema tempdb y trabajarán sin importar a cuál tempdb de usuario el usuario esté asignado.

Sinembargo, si las aplicaciones buscan la existencia de una tabla temporal como #temp en tempdb, puede que sea necesario cambiarlas, ya que las tablas temporales como #temp son ahora creadas en la tempdb de usuario asignada al usuario.

Otros Aspectos

Optimización de Consultas

Cuando una consulta es optimizada, ASE considera la configuración de caché para determinar el mejor plan de ejecución. Por ésta razón, es importante que las tempdb de usuario tengan características similares en lo relacionado con tamaño del caché. De otra manera, el rendimiento puede variar dependiendo de cual base de datos temporal sea asignada a los usuarios.

Opciones de Base de Datos

También es importante que las opciones de las tempdb de usuario sean las mismas. Esto es especialmente importante para allow nulls by default, ya que esto  puede tener impacto en las características de las columnas de tablas temporales que se creen sin indicar específicamente null o not null para las columnas.

Configuraciones de HA

En configuraciones HA (Alta Disponibilidad), los servidores primario y secundario deben estar configurados de igual manera, con respecto a las propiedades de las bases de datos temporales.

Consultas Paralelas

Las consultas paralelas generan tareas obreras (worker processes). Dado que estas tareas no llevan a cabo un proceso de login, ellas heredan la asignación de base de datos temporal de su tarea padre.

Configuración de ASE

Existe un límite fijo de 512 bases de datos temporales. Puede que éste límite cambie en versiones futuras cuando se permitan grupos de bases de datos distintos al default. El parámetro "number of open databases" debe ser incrementado en el número de bases de datos temporales.

Sintaxis de sp_tempdb

Use la opción help del procedimiento para visualizar la sintaxis resumida del procedimiento almacenado. Por ejemplo:

sp_tempdb 'help'
go


Usage: sp_tempdb 'help' 
sp_tempdb 'create', <groupname> 
sp_tempdb 'drop', <groupname> 
sp_tempdb 'add', <tempdbname>, <groupname> 
sp_tempdb 'remove', <tempdbname>, <groupname> 
sp_tempdb 'bind', <objtype>, <objname>, <bindtype>, <bindobj>, <scope>, <hardness> 
sp_tempdb 'unbind', <objtype>, <objname>, <scope> 
sp_tempdb 'unbindall_db', <tempdbname> 
sp_tempdb 'show', <command>, <name> sp_tempdb 'who', <dbname>

<objtype> = ['LG' ('login_name') | 'AP' ('application_name')]; 
<bindtype> = ['GR' ('group') | 'DB' ('database')] 
<hardness> = ['hard' | 'soft'] <command> = ['all' | 'gr' | 'db' | 'login' | 'app']

Notas:

  • Los parámetros 'LG', 'AP', 'GR', 'DB', 'hard' y 'soft' pueden ser especificados en minúscula o mayúscula. 
  • La versión texto de cada uno de ellos también se puede usar; por ejemplo, login_name para LG, database para DB, etc.
  • Es posible omitir las comillas para los parámetros del procedimiento sp_helpdb, siempre y cuando la opción no coincida con una palabra reservada. Por ejemplo, sp_helpdb help es válido, mientras que sp_helpdb create... no lo es (se debe usar 'create').

Limitante:
El parámetro scope de la opción bind no se soporta en la versión 12.5.0.3, y debe ser omitido. En consecuencia no se describe en ninguna parte de éste documento. Si se utiliza la opción hardness, especifique NULL para scope.

Sybase Central

A partir de ASE 12.5.1, el Plug-in de ASE para Sybase Central 4.1 incluye soporte a MTDB desde la carpeta 'Temporary Databases', como se muestra en la Figura 1:

Figura 1 - Soporte a MTDB en Syabse Central 4.1

Ejemplo de Uso

Suponga que usted quiere asignar una base de datos temporal a sus usuarios, independientemente de la aplicación, pero asegurando que el login sa tenga su propia tempdb de usuario. Para esto, siga estos pasos:

  1. Cree una nueva tempdb de usuario usando el comando create temporary database. Por ejemplo:
create temporary database satempdb 
on satempdb_dev = 20
go
  1. Asocie la nueva tempdb de usuario al login sa usando la opción bind de sp_tempdb. Por ejemplo:
sp_tempdb bind, login_name, sa, 'database', satempdb
go

A partir de éste momento, el login sa hará uso exclusivo de la base de datos temporal satempdb. Los demás usuarios, al conectarse, quedarán asociados a la(s) bases de datos pertenecientes al grupo default. Ver la sección Asignación de la Base de Datos Temporal, arriba.

Notas:

  • Para que el cambio tome efecto, el login sa debe desconectarse y volver a conectarse.
  • Observe que la base de datos satempdb no se agrega al grupo default.
  • Inicialmente la única base de datos que pertenece al grupo default es la base de datos del sistema tempdb. Posteriormente usted podría agregar más bases de datos temporales a dicho grupo.
  • Las tareas del sistema (por ejemplo el housekeeper) siempre usan la base de datos del sistema tempdb.

Conclusión

El soporte a Múltiples Bases de Datos tempdb (MTDB) introducido en ASE 12.5.0.3 permite definir varias tempdb de usuario, con lo cual podemos reducir la contención sobre las tablas del sistema de la base de datos tempdb. Esto es importante sobre todo para aplicaciones que hacen uso frecuente de tablas temporales y SQL que genera tablas de trabajo (worktables), como distinct, order by, etc. Otro beneficio importante es que si un usuario llegase a llenar una tempdb de usuario, sólo los usuarios asociados a esa base de datos quedarían eventualmente suspendidos (si quisieran modificar datos en esa tempdb); otros usuarios, asociados a otras bases de datos tempdb, continuarían trabajando normalmente. Por último, dado que las tempdb de usuario se pueden borrar y volver a crear, sería relativamente fácil redimencionarlas (borrarlas y crearlas con un nuevo tamaño), lo que no se puede hacer con la tempdb del sistema. Aunque la implementación inicial de MTDB tiene ciertas limitantes, algunas de ellas han sido eliminadas en versiones más recientes de ASE.

Atributos del Documento
Resumen: Adaptive Server Enterprise 12.5.0.3 introduce el soporte a Múltiples Bases de Datos tempdb (MTDB) o tempdb de usuario. Este documento describe la funcionalidad básica de ésta nueva característica, junto con algunas limitantes.
Código: 10134 Última Modificación: May 10, 2004
Temas: Administración, Configuración Tipo de Documento: Documento Técnico
Productos: Adaptive Server Enterprise Versión: 12.5.0.3 en adelante
Plataformas: Todas las Plataformas Sistema Operativo: Todos los Sistemas Operativos
 
 Inicio   Sobre MTBASE   Sobre Sybase   Empleos en MTBASE   Mapa del Sitio   Aspectos Legales y Políticas de Privacidad