Hola Nicolas, Una respuesta un tanto disruptiva.
Veo que estas trabajando en un mapeador para persistencia de objetos. Realemente evaluaste las alternativas disponibles (decenas) y ninguna te sirve? O estas en un proyecto de investigacion? Carlos Peix -----Mensaje original----- De: [email protected] [mailto:[email protected]] En nombre de Nicolas Locatelli Enviado el: Martes, 16 de Diciembre de 2008 06:58 p.m. Para: [email protected] Asunto: [dbms] Re: [dbms] Re: RE: [dbms] Re: Re: RE: [dbms] DataReader: leer datos durante una transacción 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. > >
