🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.bazy-danych
Article #183312

Re: Transakcje

#183312
From: Paweł Filipiak
Date: Tue, 07 Jul 2009 19:21
35 lines
3149 bytes
Użytkownik "Adam K." <akobylin@nospam.op.pl> napisał w wiadomości 
news:h2ut2h$hli$1@news.onet.pl...
[...]
> 2. Uruchomiłem swoją aplikację, w niej rozpocząłem transakcję, dodawanie 
> rekordu (także bez commita), uruchomiłem na tym samym komputerze Microsoft 
> SQL Server Management Studio, podłączyłem się do tej samej bazy i 
> wykonałem SELECT * FROM tabelka, i to polecenie zawisło do czasu COMMIT w 
> mojej aplikacji.

Witaj w świecie rozległego blokowania rekordów ms sql... To niestety nie 
Oracle, gdzie transakcje blokują dane "normalnie", czyli jedna transakcja 
robi insert/update/delete, druga transakcja robi select i "widzi" stan 
rekordów sprzed rozpoczęcia pierwszej transakcji (oczywiście mowa o select 
"read only" bez klauzuli "for update").
MS SQL ma przykry zwyczaj blokowania większego obszaru danych, niż tylko 
rekordy objęte transakcją, przy czym chyba żaden dokument nie wyjaśnia 
dokładnie, jak wyliczyć blokowany obszar danych. Spróbuj w swoim teście 
zmienić select * from tab na select kolumna from tab where id=1 (przy 
założeniu, że rekord o id=1 istnieje i nie został objęty niezakończoną 
transakcją) i jest szansa, że dane zostaną pobrane.
Tu jest opisane http://msdn.microsoft.com/en-us/library/ms189849.aspx jakie 
"gradacje" blokad zna sql server, ale prawdę mówiąc wiele z tego nie 
wynika - nie oszacujesz ile stron zajmują rekordy w bazie...
Generalnie trzeba dążyć, żeby transakcja była możliwie najkrótsza; może 
droga zaproponowana przez Sławka jest dobra - czyli ładowanie wstępne danych 
do tabel specjalnie wydzielonych, z których nie korzysta aplikacja, tam 
obróbka, a potem tylko możliwie najprostszy insert/update tak, aby dane w 
tabelach wykorzystywanych przez aplikację były blokowane przez możliwie 
krótki okres czasu.
Izolacja transakcji na poziomie "snaphot" może pomóc, ale musiałbyś zmusić 
aplikację, aby też używała tego poziomu izolacji.

-- 
pozdrawiam,
Paweł Filipiak 
Technical Details
Message-ID: <h3070e$43h$1@atena.e-wro.net>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.e-wro.pl!not-for-mail
References: <h2ti2l$1vo$1@news.onet.pl> <4ba0026d-5f7f-4fe5-8669-103dd4c3fa7d@s31g2000yqs.googlegroups.com> <h2tkja$8tr$1@news.onet.pl> <h2tt2q.2lk.1@slaszyszCIACHTO.list.pl> <h2ul9o$lg$1@news.onet.pl> <h2usc5$9ct$1@achot.icm.edu.pl> <h2ut2h$hli$1@news.onet.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.e-wro.pl!not-for-mail
From: Paweł Filipiak <pfilipiak@poczta.fm>
Newsgroups: pl.comp.bazy-danych
Subject: Re: Transakcje
Date: Tue, 7 Jul 2009 21:21:04 +0200
Organization: Miejskie Sieci Informatyczne e-wro
Lines: 36
Message-ID: <h3070e$43h$1@atena.e-wro.net>
References: <h2ti2l$1vo$1@news.onet.pl> <4ba0026d-5f7f-4fe5-8669-103dd4c3fa7d@s31g2000yqs.googlegroups.com> <h2tkja$8tr$1@news.onet.pl> <h2tt2q.2lk.1@slaszyszCIACHTO.list.pl> <h2ul9o$lg$1@news.onet.pl> <h2usc5$9ct$1@achot.icm.edu.pl> <h2ut2h$hli$1@news.onet.pl>
NNTP-Posting-Host: h82-143-129-30-static.e-wro.net.pl
Mime-Version: 1.0
X-Trace: atena.e-wro.net 1246994254 4209 82.143.129.30 (7 Jul 2009 19:17:34 GMT)
X-Complaints-To: abuse@e-wro.pl
NNTP-Posting-Date: Tue, 7 Jul 2009 19:17:34 +0000 (UTC)
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2900.5512
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit