Article View: pl.comp.bazy-danych
Article #183312Re: Transakcje
From: Paweł Filipiak
Date: Tue, 07 Jul 2009 19:21
Date: Tue, 07 Jul 2009 19:21
35 lines
3149 bytes
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-mailReferences:
<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