У меня есть сценарий SQL, который выглядит следующим образом:У меня есть сценарий SQL
Variable nb number;
Variable var1 varchar2(30);
Variable var2 varchar2(30);
EXEC :var1 := '&1';
EXEC :var2 := '&2';
BEGIN
SELECT count(*) into :nb FROM some_table where col1=:var1 and col2=:var2;
END;
/
print :nb;
exit :nb;
Этот скрипт выполняется несколько раз, используя такие команды, как:
sqlplus @myscript.sql LITERAL_A1 LITERAL_B1
sqlplus @myscript.sql LITERAL_A2 LITERAL_B2
sqlplus @myscript.sql LITERAL_A3 LITERAL_B3
sqlplus @myscript.sql LITERAL_A4 LITERAL_B4
Теперь мой вопрос связан с общим доступ в бассейн.
Когда я запускаю запрос:
select executions,sql_text
from v$sqlarea
where (sql_text like '%var1%' or sql_text like '%var2%')
я получаю выход, как:
BEGIN SELECT count(*) into :nb1 FROM some_table where col1=:var1 and col2=:var2; END; [ Execution=4]
BEGIN :var1 := 'LITERAL_A1' ; END;[ Execution=1]
BEGIN :var2 := 'LITERAL_B1'; END; [ Execution=1]
BEGIN :var1 := 'LITERAL_A2' ; END;[ Execution=1]
BEGIN :var2 := 'LITERAL_B2'; END; [ Execution=1]
BEGIN :var1 := 'LITERAL_A3' ; END;[ Execution=1]
BEGIN :var2 := 'LITERAL_B3'; END; [ Execution=1]
BEGIN :var1 := 'LITERAL_A4' ; END;[ Execution=1]
BEGIN :var2 := 'LITERAL_B4'; END; [ Execution=1]
Это показывает, что утверждение о главном запросе выборки удаляется, но инициализация переменных связывания была добавлена раздор. Есть ли способ удалить это?
В вашем скрипте не отображается «утверждение о переменных привязки». Он просто показывает, что SQL Oracle хранится в общем пуле. Вы видите соответствующие события ожидания? Плюс: это должно быть лучше спрошено на dba.stackoverflow –
Если вы говорите о конкуренции, значит, вы беспокоитесь о производительности. Вы действительно видите проблемы с производительностью? –
Нет моей главной заботы - делать инструкции типа BEGIN: var1: = 'LITERAL_A1'; END имеют какое-либо отношение к кешу библиотеки. Эти синтаксические анализаторы и блокировки берутся за кеш библиотеки. На самом деле я не очень уверен в различии между v $ sqlarea и кешем библиотеки. Каждый запрос, упомянутый в v $ sqlarea с исполнением = 1, влияет на производительность кэша библиотеки? – Rohit