Re: Isolation level question

Tech Tip: Click here to run a free scan for Windows Errors and optimize PC performance

From: Kalen Delaney (replies_at_public_newsgroups.com)
Date: 12/01/04


Date: Tue, 30 Nov 2004 22:01:47 -0800

Hi Ed

HTH = Hope this helps :-)

-- 
HTH
----------------
Kalen Delaney
SQL Server MVP
www.SolidQualityLearning.com
"Ed" <Ed@discussions.microsoft.com> wrote in message 
news:F0E67124-9AB6-4209-B249-8F9DD12B2928@microsoft.com...
> HTH,
>  You are exactly correct...  I always enjoy seeing your post...
> Ed
>
> "Kalen Delaney" wrote:
>
>> Hi Vincent
>>
>> Your understanding of read uncommitted is incorrect. Read uncommitted 
>> does
>> not take SHARE locks and it ignores EXCLUSIVE locks held by other 
>> processes.
>> But you are getting an EXCLUSIVE lock when update the row where nunber = 
>> 1.
>>
>> The behavior you see happens because there are no indexes on your table, 
>> so
>> the only way the second connection can find the row where number = 10000 
>> is
>> to scan the whole table. It gets to the first row, which is locked, and 
>> it
>> can't tell if that is a row it needs to return or not, so it has to wait.
>>
>> If you build an index on the number column you should have the behavior 
>> you
>> are expecting.
>>
>> -- 
>> HTH
>> ----------------
>> Kalen Delaney
>> SQL Server MVP
>> www.SolidQualityLearning.com
>>
>>
>> "Vicent Palasí" <vpalasi@nospamaurumsol.com> wrote in message
>> news:uGKKZX11EHA.2180@TK2MSFTNGP10.phx.gbl...
>> > Hi.
>> >
>> > I am learning about transaction isolation levels. The problem is that I
>> > see
>> > is that one single update (with "read uncommitted") can lock the whole
>> > table, which does not make sense to me. I explain with an example.
>> >
>> > I have a simple table "isolation_test" with two columns "number"(int) 
>> > and
>> > "name"(char(20)). I have 10,000 records like this
>> >
>> > number        name
>> > -------        -------
>> > 1                 Record number 1
>> > 2                 Record number 2
>> > 3                 Record number 3
>> > and so on, until
>> > 10000         Record number 10000
>> >
>> > Now I open two windows in query analyzer, that is, 2 DB connections. In
>> > the
>> > first window I run :
>> >
>> > set transaction isolation level read uncommitted
>> > BEGIN TRAN
>> > UPDATE isolation_test
>> >   SET name = 'New value' where number=1
>> >
>> > (Please note that the transaction remains unfinished).
>> >
>> > In the second window, I execute
>> >
>> > set transaction isolation level read committed
>> > select * from isolation_test where number =10000
>> >
>> > And when I run this second window, this window gets stuck (that is, the
>> > window is waiting and gives no result). Obviously, it is locked 
>> > because,
>> > when I finish first transaction in first window (either with COMMIT or
>> > ROLLBACK), the window stops waiting and returns the rows produced by
>> > SELECT
>> > command.
>> >
>> > That is, one single update in one row locks the whole table. I couldn´t
>> > believe my eyes. This is very weird to me. I have read that "read
>> > uncommitted" doesn´t lock anything at all and "read committed" allows 
>> > to
>> > read. So first window should not lock second window. Please can 
>> > somebody
>> > explain this to me? Any information would be greatly appreciated.
>> >
>> > Thanks in advance,
>> >
>> > Vicent Palasi
>> >
>> >
>>
>>
>> 


Relevant Pages

  • Re: RV Break-ins/Theft - Any Advice?
    ... window center support a bit trying. ... We keep ALL locks on the basement storage ... to folks passing on the street while we're leaving. ... artists than folks breaking in while we're away. ...
    (rec.outdoors.rv-travel)
  • Re: Isolation level question
    ... > first window I run: ... > set transaction isolation level read uncommitted ... > In the second window, ...
    (microsoft.public.sqlserver.programming)
  • Re: fire alarm that disengages a lock
    ... Not every window would need one. ... > upstairs bedroom window and the front door. ... > fire alarm system built into the wiring of the house. ... Whatever you do, make sure you still end up with decent locks, though. ...
    (misc.kids)
  • Re: Isolation level question
    ... But you are getting an EXCLUSIVE lock when update the row where nunber = 1. ... > first window I run: ... > set transaction isolation level read uncommitted ... > In the second window, ...
    (microsoft.public.sqlserver.programming)
  • Re: Isolation level question
    ... "Kalen Delaney" wrote: ... > not take SHARE locks and it ignores EXCLUSIVE locks held by other processes. ... >> set transaction isolation level read uncommitted ... >> window is waiting and gives no result). ...
    (microsoft.public.sqlserver.programming)