Limitaciones de Bloqueo en Adaptive Server Anywhere

Problema
Las bases de datos que contienen un número muy grande de filas, ocasionalmente experimentan errores al manipular un número grande de filas (millones) en una transacción. Estos errores no al trabajar con conjuntos más pequeños de filas.
Por ejemplo, el siguiente error puede ser arrojado al realizar un INSERT INTO tabla SELECT, incluso aunque no haya más usuarios conectados a la base de datos:
-210: "User 'another user' has row in <table> locked"
Explicación
La estructura de datos usada para manejar los candados sobre una tabla específica tiene un límite sobre el número de entradas que puede tener. Este límite es un rango basado en el tamaño de página. El número aproximado de entradas para cada tamaño de página es:
| Tamaño de Página |
Límite |
| 1024 |
5 millones |
| 2048 |
11 millones |
| 4096 |
22 millones |
| 8192 |
44 millones |
Caminos Alternos
El camino alterno más obvio es partir la transacción y consecuencia bloquear un número más pequeño de filas. Esto tiene el beneficio agregado de aumentar la concurrencia, reducir el tamaño de log y reducir el tiempo de recuperación, si es que el sistema dejara de responder durante la transacción.
En algunos casos no es fácil o no se desea partir la transacción. En estos casos, usted debería considerar bloquear explícitamente la tabla. Si la opción SUBSUME_ROW_LOCKS está en ON (valor predeterminado), siempre que una tabla T es bloqueada de manera exclusiva con LOCK TABLE T IN EXCLUSIVE MODE, la base de datos no necesita continuar adquiriendo candados individuales de fila para la tabla T. Esto puede resultar una mejora significativa de rendimiento si se llevan a cabo actualizaciones extensivas a la tabla T en una sola transacción, especialmente si T es grande, comparada al tamaño del caché.
Un problema de definir SUBSUME_ROW_LOCKS en ON es que los cursores tipo "keyset" sobre una tabla bloqueada de esta manera no trabajan como se espera. Por ejemplo, pueden arrojar advertencias de "fila modificada" para cada fila del cursos para cualquier fila de la base de datos que haya sido modificada. También, el servidor de bases de datos puede convertir un cursor actualizable con un ORDER BY en un cursor "keyset".
Atributos del Documento
|
| Resumen: |
Este documento explica la causa de errores que pueden ocurrir al manipular un número grande de filas en una transacción, así como caminos alternos para evitar la situación. |
| Código: |
10191 |
Última Modificación: |
Abr 29, 2005 |
| Temas: |
Configuración, Administración |
Tipo de Documento: |
Documento Técnico |
| Productos: |
Adaptive Server Anywhere |
Versión: |
Todas las Versiones |
| Plataformas: |
Todas las Plataformas |
Sistema Operativo: |
Todos los Sistemas Operativos |
|