Проблема
- Я настраивал базу данных, разделенную по спискам, и подраздел, также разделенный по списку, и все было в порядке, пока я не увеличил номер моего раздела.
- Простой запрос, который выполнялся в миллисекундах, теперь длится 1 минуту 49 секунд (в базе данных нет дополнительных данных, только несколько разделов)
Моя настройка
- 54 таблиц
- 10 000 разделов и 1 подраздел на таблицу (на данный момент)
- в среднем 10 индексов на таблицу
Настройка DDL: https://drive.google.com/open?id=13V8Tcv5kTl6QuPqTya6kqImbZlWGd1jk
...
Вариант использования
Моими тестами были две инструкции, работающие на почти пустой базе данных
1 - один простой выбор, который всегда выполняется для ключа раздела и подраздела
2 - один этап удаления с разделом и подразделом
Тестовый пример 1 - трассировка и выполнение: https://drive.google.com/open?id=19eWUoxckaIPCyFU0jorK8wrSf-HgjhWA
Устранение неполадок
- удалены все индексы, и проблема была "решена"
- Сканирование диапазона индексов заняло почти 100% времени выполнения
- та же настройка, но с 1.6k разделами на таблицу все в порядке
Враг номер один (извлечен из трассы)
>
SQL ID: 9b4m3fr3vf9kn Plan Hash: 2436900644
select obj#, dataobj#, subpart#, hiboundlen, hiboundval, flags, ts#, file#,
block#, pctfree$, initrans, maxtrans, analyzetime, samplesize, rowcnt,
blevel, leafcnt, distkey, lblkkey, dblkkey, clufac, spare2,
length(bhiboundval), bhiboundval
from
indsubpart$ where pobj# = :1 order by subpart#
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 23 0.00 0.00 0 0 0 0
Execute 230000 19.13 20.91 0 0 0 0
Fetch 460000 25.59 27.83 3357 1380000 0 230000
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 690023 44.73 48.75 3357 1380000 0 230000
Misses in library cache during parse: 1
Misses in library cache during execute: 1
Optimizer mode: CHOOSE
Parsing user id: USERNAME (recursive depth: 1)
Number of plan statistics captured: 1
Rows (1st) Rows (avg) Rows (max) Row Source Operation
---------- ---------- ---------- ---------------------------------------------------
1 1 1 TABLE ACCESS BY INDEX ROWID INDSUBPART$ (cr=5 pr=4 pw=0 time=1813 us starts=1 cost=4 size=69 card=1)
1 1 1 INDEX RANGE SCAN I_INDSUBPART_POBJSUBPART$ (cr=4 pr=3 pw=0 time=1317 us starts=1 cost=3 size=0 card=1)(object id 815)
Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
---------------------------------------- Waited ---------- ------------
PGA memory operation 2 0.00 0.00
cell single block physical read 3357 0.01 1.68
latch: shared pool 1 0.00 0.00
********************************************************************************
Сомнения - Я далек от логических пределов: https://docs.oracle.com/cd/B28359_01/server.111/b28320/limits003.htm#i288032,, но по-прежнему имею большое снижение производительности, яЯ делаю что-то не так с моим DDL или это просто слишком большая установка?
Примечание - Возможно, установка неверна, но первый вопрос: должен ли он ломаться в этот момент?
Спасибо