Bala1989 Ответов: 2

У меня есть хранимая процедура, которая содержит 4000 строк, необходимых для тонкой настройки производительности, может ли кто-нибудь подсказать, как это сделать, так как я новичок в этой среде.


У меня есть хранимая процедура, которая содержит 4000 строк, необходимых для тонкой настройки производительности, может ли кто-нибудь подсказать, как это сделать, так как я новичок в этой среде.

Что я уже пробовал:

Я попробовал каждое утверждение с планом объяснения, что это возможно для процедуры 4000 строк.

NotPolitcallyCorrect

Использование профилировщика было бы хорошим началом

Bala1989

Я использовал Oracle Sql.

Maciej Los

Как мы можем помочь вам, не видя вашего запроса? Это действительно плохой вопрос, если вообще когда-либо...

NotPolitcallyCorrect

Вы действительно хотите посмотреть на запрос, который якобы имеет длину 4000 строк?

Maciej Los

Нет! Никогда! 4000 строк-это некрасиво для изучения. Я имел в виду, что вопрос-это вообще не вопрос. Как сказал Сомон: спрашивать-это умение ;)

Zoltán Zörgő

Полагаю, никто не сможет дать вам ответ, на который вы надеетесь. Просто совет: перепишите эту процедуру. Чтобы быть в состоянии сделать это, вам нужно точно знать, что он делает (точнее, что он должен делать).

NotPolitcallyCorrect

Да, я понимаю. "Научи меня быть DBA в постинге на форуме" - это не вопрос.

2 Ответов

Рейтинг:
1

Maciej Los

Пожалуйста, сначала прочтите мой комментарий к этому вопросу.

Я бы предложил начать здесь: Повышение производительности SQL-запросов для базы данных Oracle Lite[^]
Этот: Шаги настройки Oracle SQL[^] тоже может быть полезно.


Мой совет: избавьтесь от старого SP и напишите этот SP с нуля.


Рейтинг:
0

Wendelius

Во-первых, наличие процедуры, содержащей 4000 строк, говорит о проблемах проектирования. Не видя реальной процедуры, невозможно сказать, заключается ли проблема в дизайне базы данных или только в коде PL/SQL. Как уже было сказано, переписывание процедуры, скорее всего, дает наилучшие результаты, если вы одновременно критически просматриваете код.

Что касается проблем с производительностью, то в зависимости от кода у вас может быть несколько источников этих проблем, и все они имеют разные потребности в исправлении. Например рассмотрим следующие случаи
- Один сложный запрос, плохо себя ведущий, может нуждаться в оптимизации запросов, индексации и так далее.
- Чрезмерное использование циклов, в которых вы выполняете операторы внутри. Один оператор может вести себя достаточно хорошо, но когда вы многократно выполняете оператор, общее затраченное время становится невыносимым.
- Использование курсоров и процедурного подхода вместо операций, основанных на множествах. Одна довольно распространенная проблема заключается в извлечении данных, выполнении некоторых вычислений/операций, а затем обновлении данных с помощью курсоров и циклов. При избавлении от курсора и использовании подхода, основанного на наборе, производительность часто значительно улучшается.

Так с чего же начать? Чтобы получить представление об окружающей среде, я настоятельно рекомендую прочитать Настройка приложений PL/SQL для повышения производительности[^]. Это даст вам хорошие базовые знания об оптимизации PL/SQL в среде Oracle.
Прочитав эту главу, вы можете начать просматривать код, вносить изменения, разбивать его на более мелкие части, если это применимо, и использовать dbms_profiler, чтобы увидеть, как ведут себя операторы. Кроме того, если у вас есть Enterprise Manager для использования, вы можете использовать его для поиска самых дорогих отчетов. Однако имейте в виду, что некоторые отчеты/представления/и т. д. могут потребовать дополнительных лицензий, таких как пакет диагностики производительности или аналогичный. Видеть Опции и пакеты[^]