Кроме падения производительности, эту проблему можно обнаружить
по большому числу событий ожидания enq: TM - contention в EM
Запрос для поиска неидексированных внешних ключей.
Выполнять под SYSTEM или тем, у кого есть доступ к DBA_*
select a.OWNER, a.TABLE_NAME, a.CONSTRAINT_NAME, b.COLUMN_NAME
, (select listagg (f.INDEX_OWNER||'.'||f.INDEX_NAME, '; ')within group (order by f.INDEX_OWNER, f.INDEX_NAME)
from DBA_IND_COLUMNS f
where f.TABLE_OWNER = b.OWNER and f.TABLE_NAME = b.TABLE_NAME
and f.COLUMN_NAME = b.COLUMN_NAME) LIST_OF_INDEXES
from DBA_CONSTRAINTS a, DBA_CONS_COLUMNS b
where a.CONSTRAINT_TYPE = 'R' and a.OWNER = b.OWNER
and a.CONSTRAINT_NAME = b.CONSTRAINT_NAME
and (select count(*) from DBA_IND_COLUMNS
where TABLE_OWNER = b.OWNER and TABLE_NAME = b.TABLE_NAME
and COLUMN_NAME = b.COLUMN_NAME
) = 0 -- напишите >1 для поиска более, чем 1 индекса
and a.OWNER not in ('SYS', 'SYSTEM', 'SYSMAN', 'APEX_030200'
, 'APEX_040200', 'CTXSYS', 'EXFSYS', 'MDSYS'
, 'ODMRSYS', 'OLAPSYS', 'ORDDATA')
order by OWNER, TABLE_NAME, CONSTRAINT_NAME, COLUMN_NAME
Исключения из этого правила -- когда можно не индексировать внешние ключи:
- Из главной таблицы строки никогда не удаляются
- В главной таблице первичный ключ никогда не редактируется
- Главная и подчинённая таблицы никогда не соединяются (редко, но бывает)
Комментариев нет:
Отправить комментарий