Está en la página 1de 1

 Home  Foro   Red Hat   Bases de Datos   Contacto 

Política de Privacidad

Base de Datos
SQL Server, Oracle, Sybase, MySQL.

TIPS
Consejos para disminuir los niveles de

contensión y aumentar la concurrencia Para cambiar el esquema por


default de tu conexión en Oracle
solo es necesario ejecutar:

Categoría de nivel principal o raíz: Sybase Categoría: Administración


ALTER SESSION SET current_s
chema="Nombre_esquema"
Este documento proporciona algunas recomendaciones prácticas que pueden ayudar a disminuir los
niveles de contención (bloqueo) en Adaptive Server Enterprise (ASE). Se dan dos enfoques al problema
Dar formato a la fecha
de la contención: desde el punto de vista del diseño físico de bases de datos y desde el punto de vista
de las operaciones SQL.
ALTER SESSION SET nls_date_
1. Considere cambiar índices clustered por índices nonclustered. format='DD-MON-YYYY HH24:M
I:SS';

Los índices nonclustered generan menos contención (bloqueos) para operaciones masivas
y concurrentes de modificación (insert/delete/update), mejorando así el rendimiento de las
aplicaciones. Así mismo, se reduce el riesgo de deadlocks.

Es importante tener en cuenta que los índices nonclustered ocupan más espacio que los
clustered y pueden ser algo menos eficientes para ciertas operaciones de lectura (select).

2. Considere disminuir el número de filas por página de datos.

Las tablas densas (muchas filas por página), que sean muy utilizadas, tienden a generar
altos niveles de contención, e incluso deadlocks.

Utilizando la cláusula with max_rows_per_page = x del comando create table es posible


disminuir el número de filas por página, haciendo que la tabla sea menos densa, lo que
eventualmente reduce la contención sobre las páginas de datos y aumenta los niveles de
concurrencia.

Es importante resaltar que ASE mantiene constante el valor de max_rows_per_page, a


pesar de que la tabla sea modificada.

3. Considere utilizar bloqueo a nivel de fila

Versiones anteriores a la 11.9.2

Utilizando un valor de 1 para la opción max_rows_per_page es posible "simular" un bloqueo


a nivel de fila en versiones de ASE anteriores a la 11.9.2, aún cuando éste no es un
"verdadero" bloqueo a nivel de fila. Es factible utilizar este procedimiento si:

Usted no quiere que la aplicación se bloquee debido a la contención de páginas


Usted experiencia contención de bloqueos
Usted actualmente tiene más de una fila por página
Usted se puede dar el lujo de aumentar el espacio de almacenamiento en disco - tenga
en cuenta que entre menos filas por página, más espacio ocuparía la tabla en disco.

ASE 11.9.2 en adelante

A partir de ASE 11.9.2 se manejan tres tipos de bloqueos de datos:

Allpage Locking - Es el esquema tradicional de páginas de datos que siempre ha


utilizado ASE, en el cual se bloquean páginas de datos y páginas de índices.
Datapage Locking - Es el esquema de bloqueo en el que se generan bloqueos de página
para los datos, mientras que las páginas de índices permanecen libres de bloqueos.
Este nivel de bloqueo proporciona un nivel medio de contención.
Datarow Locking - Es el esquema de bloqueo conocido como "bloqueo a nivel de fila", en
el cual no se bloquean páginas de datos (que pueden contener varias filas), sino filas
individuales de datos. Este nivel de bloqueo proporciona el nivel más bajo de
contención.

Para mayor información sobre los nuevos niveles de bloqueo introducidos en ASE 11.9.2,
vea el documento "Notas Sobre Bloqueo a Nivel de Fila En Adaptive Server Enterprise
11.9.2" (documento número 10025).

4. Considere utilizar el particionamiento de tablas.

Las tablas donde se realicen operaciones masivas y concurrentes de insert son candidatas
número 1 a ser particionadas utilizando el comando alter table ... partition x. Esto
disminuye la contención sobre las páginas de datos de la tabla, aumentando los niveles de
concurrencia.

Recuerde que en ASE 11.0.x NO es posible crear índices de tipo clustered sobre tablas
particionadas. A partir de ASE 11.5 no existe esta restricción.

5. Haga uso adecuado de los cursores.

El cursor es un mecanismo utilizado para procesar, una a una, un conjunto de filas


asociadas a un comando select. Sin embargo, la utilización inadecuada de los cursores
puede causar niveles muy elevados de contención y en consecuencia poca concurrencia.

Para mayor información sobre uso de cursores en ASE, consulte el documento "Cursores:
Recomendaciones sobre Rendimiento y Uso" (documento número 10034).

6. Considere la reorganización de los datos para minimizar la fragmentación.

Todos los sistemas de almacenamiento de datos (sistemas operativos, bases de datos,


etc.) sufren de un fenómeno conocido como fragmentación. Este fenómeno causa que
existan muchas áreas pequeñas no contiguas de datos que pertenecen a un mismo
elemento de información (un archivo en un sistema operativo, una tabla en una base de
datos, etc.), haciendo que dicho elemento no pueda ser utilizado de forma eficiente.

La fragmentación de datos en ASE ocurre cuando las tablas son modificadas


constantemente, agregando nueva información y/o borrando información existente.

Aun cuando la fragmentación de datos en ASE no tiene que ver directamente con los
niveles de concurrencia, el hecho de contar con datos contiguos permite a ASE hacer un
uso más eficiente del objeto (tabla, índice), mejorando los tiempos de acceso a los datos y
en consecuencia reduciendo el tiempo durante el cual se mantienen los bloqueos.

En general, la técnica de reorganización que se utiliza en ASE incluye los siguientes pasos:

Esto permite que los datos vuelvan a un estado mínimo de fragmentación.

ASE 11.9.2 introduce el comando Transact-SQL reorg, el cual reorganiza el uso de espacio
de tablas creadas con esquemas de bloqueo datapage y datarow.

Operacione SQL

1. Evite los bloqueos a nivel de tabla. Esto tiene un efecto adverso sobre grandes volúmenes de
información.
2. ¡Mantenga las transacciones SQL tan cortas como le sea posible! El mantener bloqueos por largos
períodos de tiempo previene que otros usuarios completen sus transacciones.
3. ¡Evite el uso de holdlock cuando le sea posible! Esto hace que los bloqueos se mantengar por
períodos más largos de tiempo. La única excepción ocurre en situaciones donde se requiere de
consistencia de operaciones de lectura dentro de una transacción.
4. Mantenga todas las sentencias SQL de una transacción dentro de pocos paquetes de red como le
sea posible, de tal manera que el rendimiento y los problemas de su red no afecten la duración de
los bloqueos.
5. Evite por completo la interacción de usuario dentro de una transacción, de tal manera que la
duración de los bloqueos no se encuentre bajo el control humano.
6. Para un mejor rendimiento en bases de datos sometidas a frecuentes operaciones de update,
considere diseñar la base de datos para que ocurran operaciones de "actualización en sitio" (update
in place). La siguientes condiciones se deben cumplir:
1. La tabla no puede tener triggers de update.
2. Las columnas que se actualicen no pueden ser de longitud variable ni aceptar valores nulos.
3. Las columnas que se actualicen no pueden formar parte del índice utilizado en el plan de
ejecución del optimizador.
4. El update solamente puede afectar una fila a la vez y esta debe poder ser determinada por el
optimizador en el plan de consulta (por ejemplo, utilice un argumento de búsqueda que
corresponda al índice único).

You are not authorised to post comments.

Comments (0)

Comments powered by CComment

DBASupport - Foro

Trending Topics Popular Topics Latest Topics Most Liked Topics

Mirroring con estados disconnected


Topic started by carlos25 in Database Mirroring 4 years ago. 4 years ago.

Hola, el día de hoy después de reiniciar mi servidor de destino a donde realizo el mirroring ya no pude replicar más, el error que muestra es que...

Se me duplica el mensaje en /etc/motd


Topic started by agamez in General 4 years ago. 4 years ago.

Buen día, alguien tiene idea porque después de actualizar a fedora 28 se me esta duplicando la salida de mi /etc/motd?

Cómo puedo filtrar un mensaje en el log messages


Topic started by carlos25 in General 4 years ago. 4 years ago.

Buenos días, estoy recibiendo en mi log de errores muchos mensajes de cron, ya que tengo varios crones configurados en mi server. Existe alguna...

Cómo validar la hora de ejecución de un proceso


Topic started by agamez in Transact-SQL 4 years ago. 4 years ago.

Hola, estoy tratando de validar que un proceso sólo pueda ser ejecutado dentro de un periodo de tiempo, en este caso entre las 7:00 AM y las 7:00...

Estadisticas en la base de datos


Topic started by agamez in Performance and Tunning 4 years ago. 4 years ago.

Buenos días, estoy teniendo problemas de performance en mis queries y quisiera saber como puedo validar que mis tablas tienen las estadisticas...

 Ir arriba

© 1999 - 2019 by DBASupport. All rights reserved.

También podría gustarte