¿como evitar los hot blocks?

04/05/2008 - 18:38 por AntonioFox | Informe spam
¿Que tal?

Estaba traspasando una clasica tabla de contadores (donde llevo contador
de facturas, documentos de venta, pedidos ...) a SQL Server y leo que
esta practica no es recomendada por el problema de los hot blocks

Entonses ¿que me recomienda para no tener el problema de los hot blocks
y como hago para tambien tener mis contadores? No me valen identities ya
que nesecito que me genere numeros realez

Gracias

AntonioFox
 

Leer las respuestas

#1 Leonardo Azpurua
04/05/2008 - 19:27 | Informe spam
"AntonioFox" <antoniofox> escribió en el mensaje
news:
¿Que tal?

Estaba traspasando una clasica tabla de contadores (donde llevo contador
de facturas, documentos de venta, pedidos ...) a SQL Server y leo que esta
practica no es recomendada por el problema de los hot blocks

Entonses ¿que me recomienda para no tener el problema de los hot blocks y
como hago para tambien tener mis contadores? No me valen identities ya que
nesecito que me genere numeros realez



Hola, Antonio:

Una "clásica tabla de contadores" es un "hot block", lo quieras o no.

Lo peor es estructurar la tabla así:

ProximaFactura BigInt,
ProximaEntrega Bigint,
...
ProximaX Bigint

porque cada actualización bloquea toda la tabla para todas las operaciones.

Mas sensato es:

TipoDoc char(X)
ProximoNumero Bigint,

usando bloqueos a nivel de registro (que creo que es la conducta por omisión
de SQL Server).

Los "hot blocks" son una condición inevitable, no un "problema". Los
productos más vendidos, o la fila que contiene la cuenta de caja, o de
ingresos por ventas en una aplicación de punto de ventas, por ejemplo, serán
tan "hot spot" como una tabla de contadores. El tratamiento correcto es
reducir los tiempos de bloqueo tanto como sea posible.

La optimización más extrema de los tiempos de bloqueo es la que obtienes
cuando guardas todos los datos necesarios para el registro de la operacion
en tablas temporales y luego ejecutas un procedimiento del lado del servidor
que se ocupe de realizar todo el proceso en una sola pasada.

Si desde tu aplicacion creas las tablas temporales con un nombre precedido
por "#", y si ejecutas el SP de actualización desde la misma conexión
utilizada para crear las tablas temporales, puedes usar directamente esos
nombres dentro del SP, ahorrandote la necesidad de crear dinámicamente las
consultas.

Salud!

Preguntas similares