![]() |
|
Программирование >> Oracle
Глава 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
Эта часть отчета, 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 ![]() ![]()
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.005
При копировании материалов приветствуются ссылки. |