ďťż
 
Blokady zakładane przez insert ? Co tu może byćnie tak ? ďťż
 
Blokady zakładane przez insert ? Co tu może byćnie tak ?
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

Blokady zakładane przez insert ? Co tu może byćnie tak ?



Filip Sielimowicz - 27-01-2006 10:46
Blokady zakładane przez insert ? Co tu może byćnie tak ?
  Baza ibm db2 8.2, ale być może np. w MsSql'u jest podobnie, wiec nie dałem w
nagłówku.

Sytuacja wygląda tak:
1. OTWIERAMY TRANSAKCJĘ.
Każda transakcja modyfikująca dane w bazie na samym początku dba o
stworzenie
odpowiedniego kontekstu. W bazie siedzi tabela PARAMETRY_TRANSAKCJI_BD
z kluczem głównym. Pierwsze zapytanie w ramach transakcji to zawsze insert
rekordu
do tej tabeli.
insert into select ID from PARAMETRY_TRANSAKCJI_BD(ID) values(nextval for
MY_SEQ)

2. OPERACJE W RAMACH TRANSAKCJI
W czasie transakcji na różnych tabelach są robione operacje
insert/update/delete.
Operacje te są pilnowane, tzn. przed każdą zmianą są robione kopie starych
rekordów
i przepisywane do osobnych, wydzielonych tabel. Każda kopia jest oznaczana
m.in.
identyfikatorem transakcji, wydobywanym w sposób prosty:
select ID from PARAMETRY_TRANSAKCJI_BD
Czyli każdy trigger wykonuje takie zapytanie. Mamy więc coś na kształt
własnego
logu transakcyjnego.

3. KOŃCZYMY TRANSAKCJĘ
Na koniec jest wykonywane usunięcie rekordu kontekstu:
delete from PARAMETRY_TRANSAKCJI_BD

Sprawa jest wiec prosta: niezależnie od tego, czy transakcja siępowiedzie,
czy nie,
po jej zakończeniu nie ma prawa zostać żaden rekord w tabeli kontekstu.
Zakładając rozsądny poziom izolacji transakcji, nie ma też możliwości, by
inne
transakcje zobaczyły nie swój rekord.

PROBLEM:
To rozwiązanie budzi wiele wątpliwości pod względem blokad.
W praktyce obserwujemy, iż transakcje mają skłonność do zawieszania się na
operaji INSERT (krok 1), jeśli w tym samym czasie inne transakcje
są w trakcie (np. tuż przed delete, krok 3).
W zasadzie nie jest to skłonność, a pewniak w obecnej chwili.

Mam trudności z określeniem co tu jest dla kogo blokowane i dlaczego innym
ta blokada
przeszkadza.
Pytanie, raczej dla znawców db2: czy jest możliwe, że np. operacja
select ID from PARAMETRY_TRANSAKCJI_BD (w każdym triggerze)
zakłada mi table locka ? No bo czy jest inna możliwość dająca w efekcie
blokadę operacji
insert ?

Czy dodanie w tym zapytaniu FOR READ ONLY powinno istotnie pomóc ?

Czy może w ogóle należy zrezygnować z tabeli PARAMETRY_TRANSAKCJI_BD
i np. w jej miejsce robić tabele tymczasowe na każdym połączeniu z bazą
danych (tylko,
czy triggery takie coś przyjmą ?).
Czy należy oczekiwać, że ta tabela zawsze będzie wąskim gardłem w takiej
bazie, jak db2 ?

Może jest jakiś inny, lepszy sposób, by dla każdej transakcji db2 zapewnić
odpowiedni kontekst
(widoczny z triggerów) ?

Za wszelkie podpowiedzi będę bardzo wdzięczny.

--
Filip Sielimowicz
http://panda.bg.univ.gda.pl/~sielim/genetic/index.htm





Filip Sielimowicz - 27-01-2006 10:46

 
Użytkownik "Filip Sielimowicz" <sielim@poczta.onet.pl> napisał w wiadomości
news:dra6ec$g8j$1@news.onet.pl...
> Baza ibm db2 8.2, ale być może np. w MsSql'u jest podobnie, wiec nie dałem
w
> nagłówku.
>
> Sytuacja wygląda tak:
> 1. OTWIERAMY TRANSAKCJĘ.
> Każda transakcja modyfikująca dane w bazie na samym początku dba o
> stworzenie
> odpowiedniego kontekstu. W bazie siedzi tabela PARAMETRY_TRANSAKCJI_BD
> z kluczem głównym. Pierwsze zapytanie w ramach transakcji to zawsze insert
> rekordu
> do tej tabeli.
> insert into select ID from PARAMETRY_TRANSAKCJI_BD(ID) values(nextval for
> MY_SEQ)

Tu się wkradł jakiś paszkwil. Powinno być:
insert into PARAMETRY_TRANSAKCJI_BD(ID) values(nextval for MY_SEQ)




Filip Sielimowicz - 27-01-2006 10:47

 
Użytkownik "Filip Sielimowicz" <sielim@poczta.onet.pl> napisał w wiadomości
news:dra6ec$g8j$1@news.onet.pl...

> Mam trudności z określeniem co tu jest dla kogo blokowane i dlaczego innym
> ta blokada
> przeszkadza.
> Pytanie, raczej dla znawców db2: czy jest możliwe, że np. operacja
> select ID from PARAMETRY_TRANSAKCJI_BD (w każdym triggerze)
> zakłada mi table locka ? No bo czy jest inna możliwość dająca w efekcie
> blokadę operacji
> insert ?
>
> Czy dodanie w tym zapytaniu FOR READ ONLY powinno istotnie pomóc ?

To ostatnie odpada, bo wewnątrz triggerów nie można stosować for read only.

Za to, coraz bardziej przekonani, że to ten select robi blokadę na całej
tabeli,
obadamy rozwiązanie, w którym użyjemy funkcji application_id() do oznaczania
rekordów w tabeli z kontekstem.

Będzie więc insert z oznaczeniem identyfikatorem połączenia z bd,
potem select też będzie filtrowany po id połączenia i podobnie na końcu
delete. Liczę na to, że teraz będą już locki tylko na jednym rekordzie, więc
problem powinien zniknąć. Zobaczymy.

--
Filip Sielimowicz
http://panda.bg.univ.gda.pl/~sielim/fractal/index.htm
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [postgresql] INSERT OR UPDATE - jak =?ISO-8859-2?Q?b=EAdzie_na?==?ISO-8859-2?Q?jlepiej=3F?= Tworzenie tabeli z =?ISO-8859-2?Q?nazw=B1_ustalan=B1_przez_?==?ISO-8859-2?Q?usera?= [ORACLE] - jak =?ISO-8859-2?Q?zwr=F3ci=E6_list=EA_u=BFytkown?==?ISO-8859-2?Q?ik=F3w_tworzonych_przez_Oracle?= [PostgreSQL] jak =?ISO-8859-2?Q?pobra=E6_warto=B6=E6_zwracan?==?ISO-8859-2?Q?=B1_przez_funkcj=EA=3F?= Insert do tabeli danymi z innej tabeli Firebird [mssql] insert do tabeli na podstawie danych z innej tabeli Insert do tabeli z danych innej tabeli plus dodatkowa wartośćpola (Firebird) [oracle] =?ISO-8859-2?Q?zmia=BFd=BFony_przez_problem=3A_za?==?ISO-8859-2?Q?pytanie_do_hierarchi?= Import faktur do Insert Subiekt GT oraz Wapro Wf-Mag z innego programu =?iso-8859-2?Q?=5BMySQL=5D_Wy=B6wietlenie_wszystkich_rekordow _zawierajacy?==?iso-8859-2?Q?ch_duplikat_a__moze_inna_struktura_bazy_danych ?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • red-hacjenda.opx.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com