Мы сталкиваемся с проблемой производительности в производстве. Программа Mv referh работает длительное время, почти 13-14 часов.Рекомендации по настройке производительности -Plsql/sql-Database
В MV referh программа пытается ссылаться на 5 MV. Среди этого один из MV работает надолго.
Ниже приведен сценарий MV, который работает в течение длительного времени.
SELECT rcvt.transaction_id,
rsh.shipment_num,
rsh.shipped_date,
rsh.expected_receipt_date,
(select rcvt1.transaction_date from rcv_transactions rcvt1
where rcvt1.po_line_id = rcvt.po_line_id
AND rcvt1.transaction_type = 'RETURN TO VENDOR'
and rcvt1.parent_transaction_id=rcvt.transaction_id
)transaction_date
FROM rcv_transactions rcvt,
rcv_shipment_headers rsh,
rcv_shipment_lines rsl
WHERE 1 =1
AND rcvt.shipment_header_id =rsl.shipment_header_id
AND rcvt.shipment_line_id =rsl.shipment_line_id
AND rsl.shipment_header_id =rsh.shipment_header_id
AND rcvt.transaction_type = 'RECEIVE';
Таблица пересылки содержит миллионы записей и выше запрос пытается извлечь почти 60-70% данных. Мы подозреваем, что загрузка данных является причиной. Мы пытаемся улучшить производительность для вышеупомянутого скрипта. Поэтому мы добавили фильтр даты, чтобы ограничить данные.
SELECT rcvt.transaction_id,
rsh.shipment_num,
rsh.shipped_date,
rsh.expected_receipt_date,
(select rcvt1.transaction_date from rcv_transactions rcvt1
where rcvt1.po_line_id = rcvt.po_line_id
AND rcvt1.transaction_type = 'RETURN TO VENDOR'
and rcvt1.parent_transaction_id=rcvt.transaction_id
)transaction_date
FROM rcv_transactions rcvt,
rcv_shipment_headers rsh,
rcv_shipment_lines rsl
WHERE 1 =1
AND rcvt.shipment_header_id =rsl.shipment_header_id
AND rcvt.shipment_line_id =rsl.shipment_line_id
AND rsl.shipment_header_id =rsh.shipment_header_id
AND rcvt.transaction_type = 'RECEIVE'
AND TRUNC(rsh.creation_date) >= NVL(TRUNC((sysdate - profile_value),'MM'),TRUNC(rsh.creation_date));
За 1 год профиля, он показывает некоторое улучшение, но если мы дадим в течение 2-х лет в пределах его более хуже предыдущего запроса.
Любые предложения по повышению производительности.
Pls помочь
Ну, вы используете базовые инструменты для профилирования, такие как план объяснения, отчеты tkprof и ADDM? Никто здесь не собирается диагностировать вашу проблему производительности, рассматривая несколько запросов без глубокого понимания вашей системы, среды и многих других деталей. Сожалею. – OldProgrammer
Вы делаете инкрементное обновление? Или полное обновление? Второй подход, очевидно, должен быть полным обновлением, поскольку вы ссылаетесь на вызов без детерминированных функций ('sysdate'). Возможно, что первый может выполнить инкрементное обновление в зависимости от журналов MV в исходных таблицах (я просто не уверен в встроенном подзапросе, а не просто в том, что касается внешнего соединения или просто факторинга). Обычно MV будет использоваться либо для агрегирования данных, либо для репликации данных из удаленной базы данных, но я не вижу ссылок на базы данных или агрегатных функций. –
@JustinCave благодарит за обновление. Мы делаем полное обновление, а не быстрое обновление. Причина заключается в том, что каждый день записи avg 10k будут вставляться в базовые таблицы, и это уменьшит производительность системы, если мы будем использовать fast referh. –