Gracias por sus comentarios, les cuento más en detalle el escenario motivo de consulta:
Supongan:
public class Clase
{
   private int _id;
   private int _campo;
   public int campo
   {
      get{}
      set{
         _campo = value;
         CampoMapper.GetOne(_id);
       }
   }
   private Campo _campoEntidad;
}

es decir que al asignar la propiedad 'campo' se intenta traer la entidad que representa y guardarla en _campoEntidad. Durante una transacción, al asignar esa propiedad se intenta leer en la BD, pero es inofensivo dado que los datos que busca están en otra tabla. Quisiera poder evitar que pinche sin tener que estar poniendo if por todos lados.
Saludos.



Jose Mariano Alvarez wrote:
El indice se necesita para evitar el scan y si esta bloqueada la pueda saltear si no la precisa. Si no tenes el idice hay que hacer un scan y queda bloqueada. Siempre lo muestro en mis cursos de performance.

--
--------------------------------
Ing. José Mariano Alvarez
SQL Total Consulting
Bogota 3631 P3B
1407 Buenos Aires-Argentina
Movil: (011)-15-4184-7541
Desde el exterior: (+54-911)-4184-7541
[email protected] <mailto:[email protected]>




2008/12/16 Cuzziol, Juan Jose <[email protected] <mailto:[email protected]>>

    Hola a todos nuevamente, sobre este tema la experiencia personal
    que tuve usando hints concretamente el ROWLOCK y READPAST fue la
    siguiente:
    Con el ROWLOCK bloqueo solo la fila que tengo que actualizar y con
    el READPAST leo todas las filas exceptos las bloqueadas.  Aparte
    hay que definir un indice unico por el/las columnas  que
    actualizacion para que el motor bloquee solo ese registro.
    No se si es lo que Nicolas estas necesitando, pero algo puede ayudar.
Salu2.
    P/D: Aclaro que esto fue sobre 2000, si hubiese sido 2005/8 creo
    que no hubiese sido necesario usar los hints, con el Isolation
    Level en nivel Snapshot seria suficiente.
Juan Jose Cuzziol
        -----Mensaje original-----
        *De:* Jose Mariano Alvarez
        [mailto:[email protected]
        <mailto:[email protected]>]
        *Enviado el:* Martes, 16 de Diciembre de 2008 01:07 p.m.
        *Para:* Cuzziol, Juan Jose
        *Asunto:* [dbms] Re: Re: RE: [dbms] DataReader: leer datos
        durante una transacción

        El select a menos que estés en en el nivel de aislamiento READ
        UNCOMMITED o uses el HINT NOLOCK emite al menos SHARED LOCK
        durante el select. Dependiendo de si estas en READ COMMITED,
        REPETEABLE READS o SERIALIZABLE ese Lock permanece o se libera
        al terminara el select o al terminar la transaccion. Hay unos
        cuantos detalles adicionales pero no vienen al caso por el
        tema de fantasmas y otros problemas asociados que provocan
        escalamientos en los logs para resolver estos requerimientos
        de aislamiento.

        Sin embargo me preocupa mucho mas el motivo de por que están
        tratando de hacer esas lecturas sin locks. .

        La respuesta obvia de evitar bloqueos no tiene sentido dentro
        de una transacción sino que me interesa la respuesta funcional.

        saludos
-- --------------------------------
        Ing. José Mariano Alvarez
        SQL Total Consulting
        Bogota 3631 P3B
        1407 Buenos Aires-Argentina
        Movil: (011)-15-4184-7541
        Desde el exterior: (+54-911)-4184-7541
        [email protected]
        <mailto:[email protected]>




        2008/12/16 Maxi Accotto <[email protected]
        <mailto:[email protected]>>

            Carlos y Nicolas, un select no hace loqueos por default,
            lo que sucede
            que si hay loqueos espera! si usan 2005 les aconsejo que
            miren el
            isolation level snapshot

            El día 16 de diciembre de 2008 11:31, Carlos Peix
            <[email protected]
            <mailto:[email protected]>> escribió:
            > Hola Nicolas,
            >
            > No creo que sea desaconsejado leed durante una
            transaccion y no
            > necesariamente tenes que tener problemas de bloqueos. Lo
            que tenes que hacer
            > es leer "sobre la misma conexión", de esta manera te
            aseguras de que estas
            > sobre la misma conexión.
            >
            > A partir de ADO.NET <http://ADO.NET> 2.0 podes usar la
            conexión para mas de un resultado,
            > busca informacion sobre MARS (multiple active recordsets)
            >
            > Carlos Peix
            >
            > -----Mensaje original-----
            > De: [email protected] <mailto:[email protected]>
            [mailto:[email protected] <mailto:[email protected]>] En
            nombre de Nicolas Locatelli
            > Enviado el: Martes, 16 de Diciembre de 2008 11:20 a.m.
            > Para: [email protected]
            <mailto:[email protected]>
            > Asunto: [dbms] DataReader: leer datos durante una
            transacción
            >
            > Hola a todos, tengo una consulta sobre DataReader contra SQL
            > Server:
            > Es posible leer hacer una consulta a la BD con un
            DataReader en medio de una
            > transacción? Cómo se puede hacer para que los bloqueos
            no sean tan
            > estrictos?
            > Puede que no sea una operación "aceptada" la de leer
            durante, pero es
            > simplemente para saber.
            >
            > Muchas gracias a quién me pueda orientar y sugerir.
            > Nicolas
            >
            >
            >
            >
            >
            >



            --
            -----------------------------------------------------------
            Microsoft MVP en SQL Server
            Consultor en SQLTotalConsulting
            Excelencia en servicios y consultoria  SQLServer
            www.sqltotalconsulting.com <http://www.sqltotalconsulting.com>
            -----------------------------------------------------------



------------------------------------------------------------------------


Se certificó que el correo entrante no contiene virus.
Comprobada por AVG - http://www.avg.es Versión: 8.0.176 / Base de datos de virus: 270.9.18/1852 - Fecha de la versión: 16/12/2008 06:11 p.m.


Responder a