@TheRL

Как оптимизировать структуру данных нагруженных таблиц?

Есть две таблицы, назовём title и spec, в них, соответственно, общая информация о событии и спецификации события. Они партиционированы и имеют много полей (до 40 каждая), созданы индексы на некоторые поля по отдельности ещё до меня.
Сейчас мы перешли полностью на систему, использующую данные этих таблиц, и теперь загрузка и запросы из них должны быть быстрыми. Два раза в день идёт загрузка новой информации, а в рабочие часы пересчитываются некоторые события(update`ы и insert`ы).
Из этих таблиц очень часто идут запросы по разным отчётам и оповещениям.

Сейчас я разработал что-то вроде антифрода, и для наполнения витрины (аггрегированных данных из этих таблиц), создал сначал б-три индексы, один покрывающий на TITLE, а другой по условиям WHERE. Таким образом, INSERT за один день проходил за 6 секунд. На следующий день оказалось, то, что раньше считалось по этим таблицам за полчаса, теперь считается за пять часов. Тогда я удалил эти индексы и создал на каждую по bitmap local индексу просто по trunc(START_DATE). Моя загрузка за день идёт теперь 13 секунд, но остальные операции всё равно затягиваются, хоть уже и меньше.

Подскажите, как сделать так, чтобы индексы на этих таблицах не особо тормозили загрузку данных в них, но и моя загрузка данных из них шла хотя бы до минуты за день данных?

Может быть, стоит провести ревизию всех пакетов и запросов и удалить эти 5 индексов на отдельные поля типа title.ID? Всё равно в плане запросов я не вижу, чтобы этот индекс где-то участвовал, хотя они соединяются при помощи spec.title_id.

Может, подскажете другие варианты архитектуры? В какую сторону будет правильнее двигаться для оптимизации всего и вся?
  • Вопрос задан
  • 232 просмотра
Пригласить эксперта
Ответы на вопрос 1
@igaraev
Надо смотреть планы запросов, как они меняются.
Исходя из этого и думать про индексы.
А также анализируйте AWR отчёты.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы