Znajdowanie przyczyny błędu zakleszczenia z pliku śledzenia Oracle

W mojej aplikacji często pojawia się błąd „zakleszczenie ora-00060 wykryte podczas oczekiwania na zasób”, gdy wielu użytkowników korzysta z aplikacji. Mam plik śledzenia z oracle Admin, ale potrzebuję pomocy w jego przeczytaniu. Poniżej znajdują się fragmenty danych z pliku śledzenia, które mam nadzieję pomogą znaleźć przyczynę.

*** 2013-06-25 09:37:35.324
DEADLOCK DETECTED ( ORA-00060 )

[Transaction Deadlock]

The following deadlock is not an ORACLE error. It is a deadlock due 
to user error in the design of an application
or from issuing incorrect ad-hoc SQL. The following
information may aid in determining the deadlock:

Deadlock graph:
                   ---------Blocker(s)--------  ---------Waiter(s)---------
Resource Name          process session holds waits  process session holds waits
TM-000151a2-00000000       210      72    SX   SSX      208      24    SX   SSX
TM-000151a2-00000000       208      24    SX   SSX      210      72    SX   SSX

session 72: DID 0001-00D2-000000C6  session 24: DID 0001-00D0-00000043 
session 24: DID 0001-00D0-00000043  session 72: DID 0001-00D2-000000C6 

Rows waited on:
 Session 72: no row
 Session 24: no row

----- Information for the OTHER waiting sessions -----
Session 24:
 sid: 24 ser: 45245 audsid: 31660323 user: 90/USER
  flags: (0x45) USR/- flags_idl: (0x1) BSY/-/-/-/-/-
  flags2: (0x40009) -/-/INC
 pid: 208 O/S info: user: zgrid, term: UNKNOWN, ospid: 2439
   image: [email protected]
 client details:
   O/S info: user: , term: , ospid: 1234
   machine: xyz.local program: 
 current SQL:
  delete from EMPLOYEE where EMP_ID=:1

 ----- End of information for the OTHER waiting sessions -----

Information for THIS session:

 ----- Current SQL Statement for this session (sql_id=dyfg1wd8xa9qt) -----
 delete from EMPLOYEE where EMP_ID=:1
===================================================

Byłbym wdzięczny, gdyby ktoś mógł mi powiedzieć, co mówi „Wykres impasu”. Również wiersze w sekcji nie zawierają wierszy.

Czytałem również w niektórych blogach, że sekcja „sqltxt” z pliku śledzenia może sugerować przyczynę. Poniżej znajduje się zapytanie, które widzę w tej sekcji.

 select /*+ all_rows */ count(1) from "USERS"."EMPLOYEE_SALARY" where EMPSAL_EMP_ID=:1

Tabela employee_salary ma ograniczenie dla obcego klucza w kolumnie EMPSAL_EMP_ID.

Wskazówka sql mówi „all_rows”, więc czy oznacza to, że ta tabela ma blokadę poziomu tabeli podczas usuwania rekordów z tabeli pracowników? obecnie nie mam indeksu na kolumnie klucza obcego. Czy dodanie indeksu do tej kolumny pomoże?

Uprzejmie proszę, jeśli potrzebujesz więcej informacji.

Dzięki

questionAnswers(1)

yourAnswerToTheQuestion