zymmon
12th September 2014, 22:32
Buenas tardes.

Escribo este post porque estoy teniendo una duda respecto al hint "with(nolock)" que uso en los selects que escribo en mis programas. Antes que nada, el entorno que utilizo tiene como base de datos SQL Server, ya que es en donde aplica el hint "with(nolock)".
Basicamente la duda que tengo es que si utilizo ese hint en una consulta que involucra a mas de una tabla, dicho hint aplica o no, y si lo hace lo hace para todas las tablas o para la tabla sobre la cual se seleccionan registros. Si bien yo en SQL Server explicito "with(nolock)" para cada tabla utilizada, en LN lo que hago es utilizar hint "with(nolock)" antes del selectdo.
El ejemplo seria algo asi

select tabla1.campo1
from tabla1,
tabla2
where tabla1._index1 = {:variable}
and tabla2._index1 = tabla1.otrocampo
hint "with(nolock)"
selectdo
TODO
......
endselect

Por lo que experiemente (a prueba y error) es que este hint no estaría aplicando a todas las tablas cuando en una consulta tengo mas de una tabla. Si en el select tengo solamente una tabla el hint funciona perfecto.
Por eso el post, para saber si alguien podia comentarme su experiencia, si se han encontrado con un problema asi y como lo han resuelto.

Les agredezco de antemano.

Saludos,

vahdani
13th September 2014, 13:15
hola,

No sé por qué deseas utilizar esta hint. En Baan no hay ningun necesidad de este. En primer lugar Baan es independiente base de datos. Un selecto normal es sin bloqueo. Sólo si tienes la intención de cambiar un registro seleccionado es necesario especificar "... from ttxyz with update". Entonces es cada registro de este table está bloqueado y se puede actualizar:


select tabla1.campo1
from tabla1 for update,
tabla2
where tabla1._index1 = {:variable}
and tabla2._index1 = tabla1.otrocampo
hint "with(nolock)"
selectdo
...
tabla1.campo2 = xyz
db.update(ttabla1, db.retry)
...
endselect

zymmon
15th September 2014, 19:11
Hola. Antes que nada gracias por responder.
Mira, el tema del uso del hint, justamente es porque mi cliente usa SQL Server. El motor que usan, entiendo yo que esta mal tuneado debido a que hace los locks de las tablas (siempre los hay) por página de tabla y no por registro, lo que hace que cuando la tabla tiene pocos registros (unos miles) en vez de lockear un registro lockee mas de una página de registros cuando no la tabla entera.

Dado eso, encontramos en su momento que utilizar el hint "with(nolocks)", a semejanza de las consultas directas sobre el sql server, mejoraban mucho el tiempo de respuesta de las consultas (con trace, debug bshell, y tiempo cronometrado).

Con el correr de los años, empece a sospechar de que el algunas consultas complejas, que involucraban mas de una tabla, ese hint no surtia todos los efectos que uno puede pre-suponer y por eso me entro la duda de como seria el funcionamiento para cuando existe mas de una tabla en el select y/o como seria la sintaxis de los hints en ese caso.

De antemano, gracias por cualquier aporte.

Saludos,