Программирование >>  Oracle 

1 ... 200 201 202 [ 203 ] 204 205 206 ... 469


Глава 11

102 dbms output.put line(round((dbms utility.gat time-1 start)/100,

2) seconds);

103 end;

104 /

.02 seconds

Он стабильно выполнялся примерно за 0,02 секунды. Потом я включил создание шаблонов:

tkyte@TKYTE816> alter session set create stored outlines = testing; Session altered.

tkyte@TKYTE816> declare l tmp char(l); l start number := dbms utility.get time; begin

2 select * into l tmp from tl;

3 select * into l tmp from t2;

4 select * into l tmp from t3;


99 select * into l tmp from t98;

100 select * into l tmp from t99;

101 select * into l tmp from t100;

102 dbms output.put line(round((dbms utility.get time-l start)/100, 2) seconds);

103 end;

104 /

.82 seconds

Первый раз, когда сохранялись шаблоны, выполнение продолжалось примерно 0,82 секунды. Потребовалось примерно столько же времени, как и для первоначального разбора запросов. После этого оказалось, что последующие выполнения продолжались примерно 0,02 секунды. После замедления, связанного с начальным запоминанием шаблонов, время выполнения стало таким же, как и до включения запоминания шаблонов. В загруженной многопользовательской среде результаты могут быть другими, и для достижения удовлетворительной производительности при работе с таблицами OUTLN может понадобиться настройка параметров (например, добавление списков свободных мест), чтобы принять большое количество одновременно вставляемых строк.

При этом надо учесть следующее. Работать постоянно с установленным параметром CREATE STORED OUTLINES = TRUE не надо. Он устанавливается на некоторый период времени, чтобы перехватить интересующие вас запросы и планы их выполнения. В производственной среде обычно устанавливается параметр USE STORED OUTLINES = TRUE, а не CREATE. Идея в том, что даже если расходы ресурсов на генерацию планов будут существенными, это не будет делаться в производственной среде. Дополнительный расход ресурсов произойдет только в среде разработки или тестирования.

Теперь давайте оценим расход ресурсов на фактическое использование хранимых планов для этих простых запросов:

tkyte@TKYTE816> alter session set use stored outlines=testing; Session altered.



Стабилизация плана оптимизатора 6.3

tkyte@TKYTE816> select used, count(*) from user outlines group by used; USED COUNT(*)

UNUSED 100

tkyte@TKYTE816> declare l tmp char(l); l start number :=

dbms utility.get time; begin

2 select * into l tmp from tl;

3 select * into l tmp from t2;

4 select * into l tmp from t3;


99 select * into l tmp from t98;

100 select * into l tmp from t99;

101 select * into l tmp from t100;

102 dbms output.put line(round((dbms utility.get time-l start)/100,

2)jj seconds);

103 end;

104 /

. 32 seconds

PL/SQL procedure successfully completed.

tkyte@TKYTE816> select used, count(*) from user outlines group by used;

USED COUNT(*)

USED 100

tkyte@TKYTE816> declare l tmp char(1); l start number :=

dbms utility.get time; begin

2 select * into l tmp from tl;

3 select * into l tmp from t2;

4 select * into l tmp from t3;


99 select * into l tmp from t98;

100 select * into l tmp from t99;

101 select * into l tmp from tlOO;

102 dbms output.put line(round((dbms utility.get time-l start)/100,

2>jj seconds);

103 end;

104 /

.03 seconds

PL/SQL procedure successfully completed.

tkyte@TKYTE816> declare l tmp char(1); l start number :=

dbms utility.get time; begin

2 select * into l tmp from tl;

3 select * into l tmp from t2;

4 select * into l tmp from t3;



Глава 11

99 select * into l tmp from t98;

100 select * into l tmp from t99;

101 select * into l tmp from t100;

102 dbms output.put line (round((dbms utility.get time-l start) /100,

2) seconds);

103 end;

104 /

.03 seconds

PL/SQL procedure successfully completed.

Первый раз, когда пришлось повторно разбирать эти запросы после начала использования хранимых шаблонов, на их выполнение ушло 0,32 секунды. Если сравнить это значение с временем, затраченным на начальный разбор без использования хранимых шаблонов (без их сохранения или использования), оказывается, что время разбора существенно не изменилось. Мы также убедились, что хранимые шаблоны используются, поскольку в столбце USED после выполнения блока для всех строк вместо значения UNUSED появилось значение USED. А это признак того, что в запросах использовались подсказки. Последующее повторное выполнение этого же блока показало, что благодаря добавлению и сохранению подсказок в разделяемом пуле производительность при использовании хранимых шаблонов не снижается.

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

Пространство имен шаблонов - глобально

Казалось бы, что имена шаблонов, подобно другим объектам базы данных, например таблицам, должны быть уникальны в схеме пользователя-создателя. Тем не менее это не так. Имя шаблона должно быть уникальным в базе данных, аналогично имени табличного пространства или каталога. Наличие столбца OWNER в представлении USEROUTLINES сбивает с толку, ведь фактически шаблоном никто не владеет. В столбце OWNER указано имя пользователя, создавшего шаблон.

В этом можно убедиться с помощью простого теста:

tkyte@TKYTE816> create outline the outline 2 on select * from dual;

Outline created.

tkyte@TKYTE816> connect system

system@TKYTE816> select owjner, name from dba outlines;



1 ... 200 201 202 [ 203 ] 204 205 206 ... 469

© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика