Czy /*+parallel(10) enable_parallel_dml*/ może powodować blokowanie sesji?

0

Hejka mam pytanko. Co jakiś czas pojawia mi się raport z poniższego zapytania:

SELECT *
  FROM gv$session a
 WHERE FINAL_BLOCKING_SESSION_STATUS = 'VALID';
       AND  a.last_call_et > 100 

Dzisiaj postanowiłem sobie zalogować dodatkowo listę z V$SQL aby dowiedzieć się które zapytania to blokują i zdarza się to w wielu miejscach systemu natomiast elementem wspólnym jest to:

/*+parallel(10) enable_parallel_dml*/

Czy ten hint może być przyczyną blokad na chainach?

2

Co masz na myśli pisząc "blokady na chainach"?

enable_parallel_dml sugeruje, że robisz nie tyle zapytania, co aktualizacje danych (DELETE/INSERT/UPDATE). Oracle dzieli robotę na równoległe sesje w oparciu o granule danych (nie wiersze, a bloki albo partycje), więc może się zdarzyć tak, że dwie sesje operujące na różnych blokach, trafią w ten sam logiczny obiekt (np. id klienta) i spróbują coś tam zaktualizować równolegle. W efekcie jedna przyblokuje drugą. W skrajnych przypadkach dostaniesz deadlocka. Wszystko zależy od organizacji fizycznej i samego zapytania. Przy insertach do indeksowanej tabeli możesz mieć podobny problem, wiele sesji wali w ten sam indeks i są waity na aktualizacji indeksu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1