Мы уже рассмотрели разные способы повышения производительности программ PL/SQL
(см. ссылки в конце статьи) Почти все они сопряжены с компромиссами: повышение производительности достигается за счет дополнительных затрат памяти, усложнения кода и затрат на сопровождение и т. д. Следующие рекомендации помогут вам оптимизировать код так, чтобы это принесло максимальную пользу как пользователям, так и группе разработки:
- Проверьте эффективность всех команд
SQL
. Оптимизация кодаPL/SQL
просто не компенсирует «балласта» в виде ненужных просмотров целых таблиц. Если кодSQL
работает медленно, вPL/SQL
эту проблему не решить. - Убедитесь в том, что оптимизация
PL/SQL
выполняется как минимум на уровне 2. Этот уровень используется по умолчанию, но разработчики нередко «экспериментируют» с параметрами компилятора, и в результате у них получается код, не полностью оптимизируемый компилятором. Директива условной компиляции$ERROR
позволяет принудительно задать этот уровень. - Используйте конструкции
BULK COLLECT
иFORALL
при каждой возможности. Скажем, если в вашей программе выполняются запросы или командыDML
, работающие на уровне отдельных строк данных, вам стоит переработать код для работы сSQL
на уровне коллекций. Переработка курсорных цикловFOR
не столь критична, но конструкцииOPEN...LOOP...CLOSE
всегда выбирают записи по одной и их следует переработать. - Уделяйте особое внимание статическим наборам данных. Обнаружив такой набор, выберите оптимальный метод кэширования для предотвращения повторяющейся, высокозатратной выборки данных. Даже если вы еще не используете
Oracle Database 11g
и выше, начните инкапсулировать свои запросы в интерфейсах функций. Это позволит вам легко и быстро применить кэширование результатов функций при переходе на новую версиюOracle
. - Ваш код не обязан быть «самым быстрым из всех возможных» — вполне достаточно, если он будет «в меру быстрым». Иначе говоря, не пытайтесь фанатично оптимизировать каждую строку кода. Удобство чтения и сопровождения важнее «молниеносной быстроты». Сначала добейтесь того, чтобы ваш код соответствовал требованиям пользователя, а затем протестируйте его и выявите возможные узкие места. Избавьтесь от них, применяя специализированные приемы оптимизации.
- Убедитесь в том, что администратор базы данных хорошо знает параметры компиляции во внутренний код (особенно в
Oracle11g
и выше). С этими параметрамиOracle
автоматически преобразует кодPL/SQL
в команды машинного кода.
Ссылки по теме:
Оптимизация приложений PL/SQL под Oracle
Средства оптимизации кода PL/SQL
Ускорение запросов в PL/SQL с использованием FORALL и BULK COLLECT
Использование конвейерных табличных функций PL/SQL
Спец. приемы оптимизации кода PL/SQL (NOCOPY и др.)