sql >> Database teknologi >  >> RDS >> Oracle

Har brug for hjælp til at forstå adfærden af ​​SELECT ... TIL OPDATERING, der forårsager dødvande

USER-tabellen har sandsynligvis en masse fremmednøgler, der henviser til den. Hvis nogen af ​​dem ikke er indekseret, vil Oracle låse hele den underordnede tabel, mens den sletter rækken fra den overordnede tabel. Hvis flere sætninger kører på samme tid, selv for en anden bruger, vil de samme underordnede tabeller blive låst. Da rækkefølgen af ​​disse rekursive operationer ikke kan kontrolleres, er det muligt, at flere sessioner vil låse de samme ressourcer i en anden rækkefølge, hvilket forårsager en dødvande.

Se dette afsnit i Concepts-manualen for at få flere oplysninger.

For at løse dette skal du tilføje indekser til alle ikke-indekserede fremmednøgler. Hvis kolonnenavnene er standard, kan et script som dette hjælpe dig med at finde potentielle kandidater:

--Find un-indexed foreign keys.
--
--Foreign keys.
select owner, table_name
from dba_constraints
where r_constraint_name = 'USER_ID_PK'
    and r_owner = 'THE_SCHEMA_NAME'
minus
--Tables with an index on the relevant column.
select table_owner, table_name
from dba_ind_columns
where column_name = 'USER_ID';


  1. 'undefined method init for Mysql:Class'

  2. Oracle SEQUENCE - 'øge med' og 'cache'

  3. CONVERT_TZ – Sådan ændres MySQL-tidszone i forespørgsel

  4. PostgreSQL drop-begrænsning med ukendt navn