Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wstrzymanie triggera na potrzeby transakcji
extreme-dh
post 21.01.2010, 17:15:55
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 3
Dołączył: 25.05.2008

Ostrzeżenie: (0%)
-----


Chciałem zobie trochę zoptymalizować funkcję rekurencyjną w PL/PGSQL. Wykonuje ona kilka(naście/dziesiąt/set) powiązanych ze sobą logicznie wierszach. Na tabeli w której są te wiersze wisi sobie trigger, który tworzy mi na podstawie danych z wiersza kolumnę pod tsearch2 (buduje z kilku pól jeden tsvector), ale mniejsza z tym.

Chciałem zawiesić wyzwalanie tego triggera na czas działania funkcji zeby niepotrzebnie nie mielił po bazie jak jeszcze się wszystko zmienia. Sprawę załatwiłem tak, że wewnątrz transakcji wykonuję:

ALTER TABLE jakas_tabela DISABLE TRIGGER jakis_trigger;
EXECUTE recurs(i, j);
ALTER TABLE jakas_tabela ENABLE TRIGGER jakis_trigger;

Wynik działania jest świetny wzrost wydajności dla testowej próbki danych 3-krotny
Tylko teraz mam problem, bo o ile dla jednego wątku wszystko działa jak należy to nie wiem jak taka funkcja zachowa się jeśli w czasie jej działania inny wątek będzie chciał zapisać jakieś dane do tej samej tabeli.
Czy wtedy jako ze triggery są przez ten moment wyłączone nie zadziałają w ogóle, czy też zadziałają bo blokada jest wykonywana w transakcji?

Nie wiem jak wybrnąć z tej sytuacji, bo nie znalazłem lepszego sposobu na zablokowanie wyzwalaczy wyłącznie dla aktualnej transakcji. Z tego co się orientuję to transakcja nic chyba nie da dla zapytania "ALTER TABLE" tak czy siak.

Jedyny pomysł jaki mi przychodzi do głowy to dorzucić tam LOCK TABLE, tylko nie wiem czy to dobry pomysł, a jeśli tak to jakiego typu (tylko blokada zapisu zeby poczekać na właczenie triggerów, odczyt zostaje dostępny) musiałby być ten LOCK.

Bardzo proszę o radę jesli ktoś tu zna się na rzeczy :]

Ten post edytował extreme-dh 21.01.2010, 17:16:23
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
goroteb
post 21.01.2010, 21:38:44
Post #2





Grupa: Zarejestrowani
Postów: 20
Pomógł: 1
Dołączył: 16.03.2009

Ostrzeżenie: (0%)
-----


Zainteresował bym się tym jakiego typu ISOLATION LEVEL zastosować w tym przypadku. Znasz ten temat?
Go to the top of the page
+Quote Post
extreme-dh
post 21.01.2010, 22:35:24
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 3
Dołączył: 25.05.2008

Ostrzeżenie: (0%)
-----


O uszy mi się obiło, ale nie znam szczegółów
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.06.2025 - 12:15