On 30.10.2013. 0:24, Dario wrote:
>>>> Normalno je ukoliko na SQL Serveru koristis (default) isolation level
>>>> "read commited". Neki vendori imaju isti isolation level implementiran
>>>> na drugi nacin pa nema lockanja readera od strane writera.
>>>>
>>>> Preporucljivo je prije koristenja bilo cega (pa tako i database
>>>> servera)
>>>> detaljno prouciti upute za upotrebu, za konkretan problem je vrlo
>>>> korisno sljedece:
>>>>
>>>>
http://www.red-gate.com/products/dba/sql-monitor/entrypage/sql-server-concurrency-ebook
>> Shvacam o cemu se radi samo ne znam zasto se dogadja.
>>
>> Zar ovo nije jedan od nacina stjecanja znanja?
>> Usput, cemu sluzi onda ovaj forum?
>>
> Grupa služi za prebiranje po svojim iskustvima i dijeljenje istih manje
> ili više uspješno. Pitanje mora biti precizno ili se jave teoretičari.
>
> Npr. kako znaš da je baza nedostupna?
Pitanje stvarno nije precizno, ali je dovoljno precizno da se shvati u
cemu je problem:
"Nemam neke zahtjevne upite nego upisujem 10-ak slogova u par tablica.
Dok sam testirao transakciju htio sam nešto drugo vidjeti u drugom
prozoru ali ne ide dok ne napravi COMIT. "
Dakle, baza mu nije nedostupna, reader ("nešto drugo vidjeti u drugom
prozoru") nailazi na lock od strane writera ("nego upisujem 10-ak
slogova... ne ide dok ne napravi COMIT").
To je ocekivano i ispravno ponasanje SQL Servera u defaultnoj
konfiguraciji, gdje je read commited isolation level implementiran na
"pesimistican" nacin pa baza stavlja lockove na retke koji dozivljavaju
DML (odnosno lockove na cijeli page, vise page-ova ili pak cijelu
tablicu nakon eskalacije lock-a, ovisno o okolnostima) i na taj nacin
sprjecava ostale readere ili writere da "vide" promijenjene podatke dok
transakcija koja ih mijenja ne odluci hoce li napraviti commit ili rollback.
Od verzije 2005 nadalje postoji (izmedu ostalog) "optimisticna"
varijanta read-commited isolation levela koja se zove "read commited
snapshot", pri cemu tempdb sluzi (uz svoju uobicajenu namjenu) kao
"version store" za prethodne vrijednosti (prije promjene) promijenjenih
podataka, cime se (donekle, u odnosu na neke konkurente) ostvaruje
"multiversion consistency" model. Takav rezim rada baze omogucuje
ostalim session-ima dobivanje read-consistent slike podataka iz trenutka
kada su zapoceli citanje (select), bez obzira mijenjaju li se podaci
koje citaju ili ne. Takva implementacija ima dodatni overhead u obliku
dodatnog IO-a na tempdb, jer se u tempdb moraju zapisivati prethodne
vrijednosti SVIH promijenjenih readaka.
Ako ne razumijes sto sam napisao (ti, OP, ili bilo tko, nemoj shvatiti
osobno), ne zanima te, smatras to nepotrebnim teoretiziranjem, cini ti
se glupo, dosadno ili suvisno, onda je moj dobronamjeran savjet (nakon
15 godina bavljenja bazama, a ne teoretiziranjem) - ili latiti se knjige
(teorije) ili okaniti se programiranja na bilo kojoj bazi.
U protivnom ce rezultat biti neispravan kôd koji u pravilu uzrokuje
logicku korupciju podataka ili pak teske performansne probleme (uslijed
lockova itd) osobito kod vise-korisnisnickih aplikacija.
Pozdrav