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

1 ... 182 183 184 [ 185 ] 186 187 188 ... 469


Глава 10

SQL ordered by Executions for DB: ORA8I Instance: ora8i Snaps: 1 -3 -> End Executions Threshold: 100

Executions Rows Processed Rows per Exec Hash Value

2,583 0 0.0 4044433098

SELECT TRANSLATE TO TEXT FROM WWV FLOW DYNAMIC TRANSLATIONS$

WHERE TRANSLATE FROM TEXT = :b1 AND TRANSLATE TO LANG CODE = :b

2,065 2,065 1.0 2573952486

SELECT DISPLAY NAME FROM WWC PEOPLE LABEL NAMES WHERE LABEL N AME = :b1

Эта часть отчета об основных SQL-операторах показывает, какие операторы выполнялись чаще всего за рассматриваемый период. Эта информация может пригодиться для выявления ряда наиболее часто выполняемых запросов с целью изменения алгоритмов работы приложений так, чтобы эти запросы выполнялись не так часто. Возможно, запрос выполняется в цикле, а мог бы выполняться один раз за пределами цикла -несложное изменение алгоритма может уменьшить количество выполнений запроса. Даже если запрос выполняется мгновенно, его выполнение миллион раз требует существенного времени.

SQL ordered by Version Count for DB: ORA8I Instance: ora8i Snaps: 1 -3 -> End Version Count Threshold: 20

Version

Count Executions Hash Value

21 415 451919557

SELECT SHORTCUT NAME,ID FROM WWV FLOW SHORTCUTS WHERE FLOW ID

= :bl AND (:b2 IS NULL OR SHORTCUT NAME = :Ь2 ) AND NOT EXIST S (SELECT 1 FROM WWV FLOW PATCHES WHERE FLOW ID = :Ы AND I D = BUILD OPTION AND PATCH STATUS = EXCLUDE ) ORDER BY SHORT CUT NAME, SHORTCUT CONSIDERATION SEQ

21 110 1510890808

SELECT DECODE(:b1,1,ICON IMAGE,2,ICON IMAGE2,3,ICON IMAGE3) ICON IMAGE,DECODE(:b1,1,ICON SUBTEXT,2,ICON SUBTEXT2,3,ICON SUBTEXT3 ) ICON SUBTEXT, ICON TARGET, ICON IMAGE ALT, DECODE (:b1, 1, ICON HEIG HT, 2 ,NVL (ICON HEIGHT2 , ICON HEIGHT) , 3 ,NVL (ICON HEIGHT3 , ICON HEIGH T) ) ICON HEIGHT, DECODE (:b1 , 1, ICON WIDTH, 2 , NVL (ICON WIDTH2 , ICON H

В этом разделе показаны SQL-операторы по убыванию количества экземпляров одного и того же оператора в разделяемом пуле. Причин наличия нескольких экземпляров одного и того же SQL-оператора в разделяемом пуле может быть много. Вот некоторые из них.

Разные пользователи выполняли один и тот же SQL-оператор, но обращается он к разным таблицам.

Тот же запрос выполняется в принципиально отличающейся среде, например, с другим режимом оптимизации.



Стратегии и средства настройки 587

Для перезаписи запроса используется механизм тщательного контроля доступа (Fine Grained Access Control). Каждая версия в разделяемом пуле на самом деле выполнялась как существенно отличающийся запрос.

Клиент использует связываемые переменные разных типов или размеров: одна

программа связывает запрос с текстовой строкой длиной 10 символов, а другая - со строкой длиной 20 символов. В результате тоже получается новая версия SQL-оператора.

Следующий пример показывает, как в разделяемом пуле получается несколько версий одного и того же SQL-запроса. Мы начнем с очистки разделяемого пула, чтобы удалить из него все операторы, а потом поместим в него три версии одного запроса:

tkyte@TKYTE816> connect tkyte/tkyte tkyte@TKYTE816> alter system flush shared pool; System altered.

tkyte@TKYTE816> select * from t where x = 5; no rows selected

tkyte@TKYTE816> alter session set optimizer goal=first rows; Session altered.

tkyte@TKYTE816> select * from t where x = 5; no rows selected

tkyte@TKYTE816> connect scott/tiger scott@TKYTE816> select * from t where x = 5; no rows selected

scott@TKYTE816> connect tkyte/tkyte

tkyte@TKYTE816> select sql text, version count

2 from v$sqlarea

3 where sql text like select * from t where x = 5%

SQL TEXT VERSION COUNT

select* fromtwherex=5

tkyte@TKYTE816> select loaded versions, optimizer mode,

2 parsing user id, parsing schema id

3 from v$sql

4 where sql text like select * from t where x = 5%



Глава 10

LOADED VERSIONS OPTIMIZER PARSING USER ID PARSING SCHEMA ID

1 CHOOSE

1 FIRST ROWS

1 CHOOSE

69 69 54

69 69 54

Это объясняет, почему в разделяемом пуле оказалось несколько версий. Первые две версии появились потому, что, хотя запросы и разбирались одним пользователем, но разбор выполнялся в различных средах. Первый раз оптимизатор работал в режиме CHOOSE, второй раз - в режиме FIRST ROWS. Поскольку другой режим работы оптимизатора может привести к выбору другого плана выполнения запроса, необходимо хранить две версии запроса. Третья строка появилась потому, что запрос, хоть и совпадает по тексту, совсем другой. Этот запрос выбирает данные из таблицы SCOTT.T, а не из TKYTE.T; это принципиально другой запрос.

Большого количества версий одного оператора надо избегать по той же причине, что и использовать связываемые переменные или избегать мягких разборов, - чтобы не делать лишних действий. Иногда несколько версий одного оператора неизбежны, в частности, если эти SQL-операторы выполняются от имени разных учетнтх записей и применяются к разным таблицам, как в рассмотренном случае с таблицами TKYTE.T и SCOTT.T. Других же случаев, когда хранение нескольких версий связано с выполнением операторов в различных средах, необходимо по возможности избегать.

В рассмотренном случае версии оператора выполнялись от имени 21 учетной записи и применялись к разным таблицам.

Instance Activity Stats for DB: 0RA8I Instance: ora8i Snaps: 1 -3

Statistic

Total

per Second

per Trans

CPU used by this session

14,196,226

18,630.2

41,876.8

parse

count (hard)

parse

count (total)

12,530

16.4

37.0

parse

time cpu

parse

time elapsed

sorts

(disk)

sorts

(memory)

2,242

sorts

(rows)

340,568

446.9

1,004.6

Эта часть отчета, Instance Activity Stats, содержит много точных значений. Многие из них мы уже видели - они использовались для вычисления коэффициентов и статистических показателей в начале отчета. Например, по значениям parse count (hard) и (total) можно получить:

tkyte@TKYTE816> select round( ROUND(100*(1-127/12530),2)

(1-127/12530) ,2 ) from dual;

98.99





1 ... 182 183 184 [ 185 ] 186 187 188 ... 469

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