У меня есть таблица с 9 миллионами записей. Требование следующее: 1. Таблица вставлена с 9 миллионами записей. Каждая запись будет иметь rowid, которая вставляется в таблицу с помощью триггера. 2. У нас есть два столбца, которые необходимо обновить отдельно в одной таблице с именем First_Insatance и First_Instance_Date. 3. В этих столбцах First Instance должно быть указано первое число Rowid дублированных записей, представленных в таблице.SQL Update Query работает навсегда. Необходима настройка Oracle Performace.
мы используем следующий код для обновления
UPDATE TABLE_A T4
SET (T4.ROW_ID_FIRST_INS, T4.ROW_ID_DT_FIRST_INS) =
( SELECT MIN (T3.ROW_ID), MIN (T3.UPDATE_DATE)
FROM TABLE_A T3
WHERE T3.SOURCE(+) = T4.SOURCE
AND SUBSTR (T3.TABLE_NAME,
1,
REGEXP_INSTR (T3.TABLE_NAME,
'\_[0-9]{8}T',
1,
1,
0))
|| SUBSTR (T3.TABLE_NAME,
REGEXP_INSTR (T3.TABLE_NAME,
'\_[0-9]{8}T',
1,
1,
1),
LENGTH (T3.TABLE_NAME)
- REGEXP_INSTR (T3.TABLE_NAME,
'\_[0-9]{8}T',
1,
1,
1)) =
SUBSTR (T4.TABLE_NAME,
1,
REGEXP_INSTR (T4.TABLE_NAME,
'\_[0-9]{8}T',
1,
1,
0))
|| SUBSTR (T4.TABLE_NAME,
REGEXP_INSTR (T4.TABLE_NAME,
'\_[0-9]{8}T',
1,
1,
1),
LENGTH (T4.TABLE_NAME)
- REGEXP_INSTR (T4.TABLE_NAME,
'\_[0-9]{8}T',
1,
1,
1))
AND NVL (T4.I_NAM, 'xx') =
NVL (T3.I_NAM, 'xx')
AND NVL (T4.J_NAM, 'xx') = NVL (T3.J_NAM, 'xx')
AND NVL (T4.SYS_NAM, 'xx') =
NVL (T3.SYS_NAM, 'xx')
AND NVL (T4.TG_TAB_NAM, 'xx') =
NVL (T3.TG_TAB_NAM, 'xx')
AND NVL (T4.PK, 'xx') = NVL (T3.PK, 'xx')
AND NVL (T4.ERR, 'xx') =
NVL (T3.ERR, 'xx')
AND NVL (T4.VAL, 'xx') =
NVL (T3.VAL, 'xx')
AND NVL (T4.ID, 'xx') = NVL (T3.ID, 'xx')
GROUP BY T4.FIELD,
T4.ERR,
T4.VAL,
T4.ID,
T4.PK,
T4.I_NAM,
T4.SYS_NAM,
T4.J_NAM)
WHERE T4.CURRENT_LOAD_ID = some number FROM CURSOR;
Запрос принимает 35 секунд для 3050 записей, но при запуске для 4L записей. Он не останавливается и не работает за последние 2 дня.
ROW_ID является PK и создали индекс NU по всей группе столбцов, за исключением немногих, которые имели размер 4000.
Спасибо.
Вы проверили другие замки на столе? – Donal
Да. Нет замков. Я создал план объяснений для этого, но стоимость чрезвычайно высока. Это больше, чем миллион. – user2678464
Если бы я был вами, я бы отследил сеанс и посмотрел, что произойдет. – Cyryl1972