В моем проекте мы вызываем процедуру оракула из нашего приложения на С++ с помощью библиотеки Pro *C/C++, предоставляемой оракулом.
У нас есть одна большая процедура, и моя идея состоит в том, чтобы разделить ее на две для модульности. Но их совет состоит в том, чтобы вызвать процедуру один раз и выполнить все задания одним махом.
Причина, которую я получил от них, заключается в том, что это повлияет на производительность, поскольку прикладная программа несколько раз взаимодействует с базой данных.
Я согласен, описанный выше сценарий произойдет, когда приложение подключается к базе данных, вызывает процедуру и, наконец, отключает базу данных для каждого вызова процедуры. Но на самом деле мы создаем пул соединений при запуске и повторно используем эти предварительно подключенные соединения с базой данных для взаимодействия с базой данных.
Информация о моем приложении:
- Это
multi-threaded application
, который обрабатывает около 1000 запросов в секунду с размером пула потоков 20. В настоящее время для каждого запроса мы связываемся с базой данных 4 раза.
ИЗМЕНИТЬ:
«переключение между PLSQL и SQL происходит намного быстрее, чем наоборот». Q1. Как это связано с моим актуальным вопросом? Мой вопрос касается разделения процедуры на две равные части. Скажем, предположим, что у меня есть 4 запроса, выполненных в процедуре, я просто разделил их на два, как процедуру a и процедуру b, и каждая процедура будет иметь два запроса.
«Вызовы pro*c, которые вызывают PLSQL, являются ударом по производительности». Q2. Вы имеете в виду связь между приложением (pro * C/C++) и базой данных (oracle) здесь? Если да, то стало ли общение большим ударом по производительности?
В прикрепленной вами ссылке ask tom сказано: «Но совсем не бойтесь вызывать SQL из PLSQL — это то, что PLSQL делает лучше всего». Q4. Произойдет ли переключение контекста при вызове SQL из PLSQL? Потому что, как указано выше, это, похоже, не влияет на производительность.