Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 оптимизация 18 сек  [new]
Lear
Member

Откуда: Харьков
Сообщений: 14
Есть запрос
select  /*+ index(vp u_valueparams_libid) */
       oo.old_invnom "инвент.№", 
       nob.new_name "объект",
       ll.rn "№",
       l.lib_name "параметр", 
       decode(nvl(vp.val_varchar,nvl(to_char(vp.val_number),(vp.val_data))), --Если ни одно из полей VP не заполнено
       null,nvl(sv.sel_varchar,nvl(to_char(sv.sel_number),(sv.sel_data))), --берём значение из полей SV
       nvl(vp.val_varchar,nvl(to_char(vp.val_number),(vp.val_data)))) "значение"
from (select lib_id, rownum rn 
      from (select lib_id, par_id, nvl(parent,1) parent from ParametrView where vie_id=200) --Автомобиль
      start with parent=1
      connect by prior par_id=parent
     ) ll, --13 (кол-во строк в таблице)
     LibraryParams l, --130
     SelectValue sv, --13 000
     OldObject oo, --86 000
     NewObject nob, --126 000
     ValueParams vp  --1 487 000     
where l.lib_id=ll.lib_id
and l.lib_id=vp.lib_id
and oo.new_id=vp.new_id
and sv.sel_id(+)=vp.sel_id
and nob.new_id=vp.new_id
and nob.vie_id=200 --Автомобиль
order by nob.new_name, oo.old_invnom, ll.rn
Он выполняется 18 секунд (SQL-Navigator 4.1)
План выполнения:
OPERATION				OPTIONS		OBJECT_NAME	COST		CARDINALITY	BYTES
1SORT					ORDER BY			11058183718	2183701628	9606103461572
2  NESTED LOOPS								6545924		2183701628	9606103461572
3    MERGE JOIN				OUTER				65328		3240298		14156861962
4      SORT				JOIN				58770		43009		100296988
5        HASH JOIN							1436		43009		100296988
6          TABLE ACCESS			BY INDEX ROWID	NEWOBJECT	2		991		102073
7            INDEX			RANGE SCAN	U_NEWOBJECT_VIEID	1	991	
8          MERGE JOIN							834		4340		9673860
9            MERGE JOIN							832		434042		956194526
10              TABLE ACCESS		BY INDEX ROWID	VALUEPARAMS	826		529320		1091987160
11                INDEX			FULL SCAN	U_VALUEPARAMS_LIBID	26	529320	
12              SORT			JOIN				6		82		11480
13                TABLE ACCESS		FULL		LIBRARYPARAMS	1		82		11480
14            SORT			JOIN				3		1		26
15              VIEW							1		1		26
16                COUNT				
17                  CONNECT BY					
18                    TABLE ACCESS	FULL		PARAMETRVIEW	1		1		6
19                    TABLE ACCESS	BY USER ROWID	PARAMETRVIEW			
20                    TABLE ACCESS	FULL		PARAMETRVIEW	1		1		12
21      SORT				JOIN				6558		7534		15346758
22        TABLE ACCESS			FULL		SELECTVALUE	12		7534		15346758
23    TABLE ACCESS			BY INDEX ROWID	OLDOBJECT	2		67392		2021760
24      INDEX				RANGE SCAN	U_OLDOBJECT	1		67392	
Результат выполнения (частично)
Row #	инвент.№	объект					№	параметр			значение
1	00525411	ABTOMOБИЛЬ MOCKBИЧ 2141218-19 ХАБ	1	Марка транспорта		АЗЛК 2141 2
2	00525411	ABTOMOБИЛЬ MOCKBИЧ 2141218-19 ХАБ	2	Государственный номер		18-19 ХАБ
3	00525411	ABTOMOБИЛЬ MOCKBИЧ 2141218-19 ХАБ	3	Год выпуска			1993
4	00525411	ABTOMOБИЛЬ MOCKBИЧ 2141218-19 ХАБ	4	Дата ввода в експлуатацию	01/07/1993
5	00525411	ABTOMOБИЛЬ MOCKBИЧ 2141218-19 ХАБ	5	Общий вид транспорта		легковий
6	00525411	ABTOMOБИЛЬ MOCKBИЧ 2141218-19 ХАБ	6	Тип транспорта			легковий
7	00525411	ABTOMOБИЛЬ MOCKBИЧ 2141218-19 ХАБ	7	Номер кузова			674755
8	00525411	ABTOMOБИЛЬ MOCKBИЧ 2141218-19 ХАБ	8	Номер шасси			б/н
9	00525411	ABTOMOБИЛЬ MOCKBИЧ 2141218-19 ХАБ	9	Наличие драг. металлов		відутні
10	00525411	ABTOMOБИЛЬ MOCKBИЧ 2141218-19 ХАБ	10	Дополнительно (назначение)	-
11	00525411	ABTOMOБИЛЬ MOCKBИЧ 2141218-19 ХАБ	11	Примечание			-
12	00525411	ABTOMOБИЛЬ MOCKBИЧ 2141218-19 ХАБ	12	Операция			Без змiн
13	00525411	ABTOMOБИЛЬ MOCKBИЧ 2141218-19 ХАБ	13	Ликвидационная стоимость	800
14	00525412	ABTOMOБИЛЬ ГAЗ 532789-16 ХАН		1	Марка транспорта		ГАЗ 53 27
15	00525412	ABTOMOБИЛЬ ГAЗ 532789-16 ХАН		2	Государственный номер		89-16 ХАН
16	00525412	ABTOMOБИЛЬ ГAЗ 532789-16 ХАН		3	Год выпуска			1984
17	00525412	ABTOMOБИЛЬ ГAЗ 532789-16 ХАН		4	Дата ввода в експлуатацию	01/11/1984
18	00525412	ABTOMOБИЛЬ ГAЗ 532789-16 ХАН		5	Общий вид транспорта		спец. транспорт
19	00525412	ABTOMOБИЛЬ ГAЗ 532789-16 ХАН		6	Тип транспорта			вишка
20	00525412	ABTOMOБИЛЬ ГAЗ 532789-16 ХАН		7	Номер кузова			б/н
21	00525412	ABTOMOБИЛЬ ГAЗ 532789-16 ХАН		8	Номер шасси			871066
22	00525412	ABTOMOБИЛЬ ГAЗ 532789-16 ХАН		9	Наличие драг. металлов		відутні
23	00525412	ABTOMOБИЛЬ ГAЗ 532789-16 ХАН		10	Дополнительно (назначение)	-
24	00525412	ABTOMOБИЛЬ ГAЗ 532789-16 ХАН		11	Примечание			-
25	00525412	ABTOMOБИЛЬ ГAЗ 532789-16 ХАН		12	Операция			Без змiн
26	00525412	ABTOMOБИЛЬ ГAЗ 532789-16 ХАН		13	Ликвидационная стоимость	1100
Первоначальный вариант выполнялся более 80 сек. Можете посоветовать как его ещё ускорить, и как избежать полного сканирования LibraryParams, ParametrView и SelectValue?
23 июл 07, 15:02    [4424187]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация 18 сек  [new]
10046
Member

Откуда: oraus.msg
Сообщений: 877
Lear
и как избежать полного сканирования LibraryParams, ParametrView и SelectValue?

Не факт, что их надо избегать, особенно, если в плане правильная кардинальность указана.
23 июл 07, 15:11    [4424266]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация 18 сек  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
Размер выборки-то у Вас какой?...
23 июл 07, 15:16    [4424300]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация 18 сек  [new]
Lear
Member

Откуда: Харьков
Сообщений: 14
В результате имеем 11 140 строк. Думаете, 18 секунд предел?
23 июл 07, 15:21    [4424338]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация 18 сек  [new]
Харьковчанин
Member

Откуда: Харьков, конечно.
Сообщений: 194
Я думаю, что это не предел. Попробуйте хинт /*+ordered use_nl(ll,l,vp,sv,oo,nob*/
При таких соотношениях строк в таблицах и результате, соединения hash / merge довольно медленные, nested loop будет быстрее.
Для этого, во from надо переставить таблицу ValueParams vp сразу после LibraryParams;
на всех таблицах должны быть индексы на связующих полях.

Кстати,
(select lib_id, par_id, nvl(parent,1) parent from ParametrView where vie_id=200)
совершенно лишнее в качестве внутреннего подзапроса (по плану этого подзапроса не видно).

Скорее всего, можно упростить до
(select lib_id, rownum rn

from ParametrView where vie_id=200 --Автомобиль
start with nvl(parent,1)=1
connect by prior par_id=nvl(parent,1)
) ll
23 июл 07, 16:11    [4424689]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация 18 сек  [new]
Lear
Member

Откуда: Харьков
Сообщений: 14
Харьковчанин

Кстати,
(select lib_id, par_id, nvl(parent,1) parent from ParametrView where vie_id=200)
совершенно лишнее в качестве внутреннего подзапроса (по плану этого подзапроса не видно).
Скорее всего, можно упростить до
(select lib_id, rownum rn
from ParametrView where vie_id=200 --Автомобиль
start with nvl(parent,1)=1
connect by prior par_id=nvl(parent,1)
) ll

Это было сделано для выигрыша во времени, с вашим вариантом запрос дуплит 66,26 сек. Говорят, null очень замедляет деревья, на моём примере разница больше чем в 3 раза.
без ordered - 18,18
/*+ordered use_nl(ll,l,vp,sv,oo,nob) */ с аналогичным from - 17,99
/*+ordered use_nl(ll,l,sv,oo,nob,vp) */ с аналогичным from - 17,90
Спасибо.
23 июл 07, 16:41    [4424909]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация 18 сек  [new]
Splain
Member

Откуда: Череповец
Сообщений: 924
Можно увидеть event 10046 level 12 для запроса? Только курсор не забудьте закрыть перед окончанием трассировки.
23 июл 07, 16:57    [4425020]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация 18 сек  [new]
sendal
Guest
А вот такой вот запрос
select  /*+ index(vp u_valueparams_libid) */
--       oo.old_invnom "инвент.№", 
--       nob.new_name "объект",
       ll.rn "№",
       l.lib_name "параметр", 
       decode(nvl(vp.val_varchar,nvl(to_char(vp.val_number),(vp.val_data))), --Если ни одно из полей VP не заполнено
       null,nvl(sv.sel_varchar,nvl(to_char(sv.sel_number),(sv.sel_data))), --берём значение из полей SV
       nvl(vp.val_varchar,nvl(to_char(vp.val_number),(vp.val_data)))) "значение"
from (select lib_id, rownum rn 
      from (select lib_id, par_id, nvl(parent,1) parent from ParametrView where vie_id=200) --Автомобиль
      start with parent=1
      connect by prior par_id=parent
     ) ll, --13 (кол-во строк в таблице)
     LibraryParams l, --130
     SelectValue sv, --13 000
--     OldObject oo, --86 000
--     NewObject nob, --126 000
     ValueParams vp  --1 487 000     
where l.lib_id=ll.lib_id
and l.lib_id=vp.lib_id
--and oo.new_id=vp.new_id
and sv.sel_id(+)=vp.sel_id
--and nob.new_id=vp.new_id
--and nob.vie_id=200 --Автомобиль
order by /*nob.new_name, oo.old_invnom,*/ ll.rn
сколько строчек возвращает ?
24 июл 07, 08:00    [4426349]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация 18 сек  [new]
Lear
Member

Откуда: Харьков
Сообщений: 14
sendal, 478 000 за 30 сек
Splain,
alter session set events '10046 trace name context forever, level 12'

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        0      0.00       0.00          0          0          0           0
Execute      1      0.11       0.12          0          0          0           0
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        1      0.11       0.12          0          0          0           0

Misses in library cache during parse: 0
Optimizer goal: CHOOSE
Parsing user id: 833  ********************************************************************************

select  /*+ index(vp u_valueparams_libid ) */
       /*+ordered use_nl(ll,l,vp,sv,oo,nob) */
       oo.old_invnom "инвент.№", 
       nob.new_name "объект",
       ll.rn "№",
       l.lib_name "параметр", 
       decode(nvl(vp.val_varchar,nvl(to_char(vp.val_number),(vp.val_data))), --Если ни одно из полей VP не заполнено
       null,nvl(sv.sel_varchar,nvl(to_char(sv.sel_number),(sv.sel_data))), --берём значение из полей SV
       nvl(vp.val_varchar,nvl(to_char(vp.val_number),(vp.val_data)))) "значение"
from (select lib_id, rownum rn 
      from (select lib_id, par_id, nvl(parent,1) parent from ParametrView where vie_id=200) --Автомобиль
      start with parent=1
      connect by prior par_id=parent
     ) ll,
     LibraryParams l, 
     ValueParams vp,   
     SelectValue sv,
     OldObject oo,
     NewObject nob          
where l.lib_id=ll.lib_id
and l.lib_id=vp.lib_id
and oo.new_id=vp.new_id
and sv.sel_id(+)=vp.sel_id
and nob.new_id=vp.new_id
and nob.vie_id=200 --Автомобиль
order by nob.new_name, oo.old_invnom, ll.rn

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        3      0.88       0.88          0          0          0           0
Execute      2      0.01       0.02          0          0          0           0
Fetch        1     20.37      20.52        982     298888         83         250
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        6     21.26      21.42        982     298888         83         250

Misses in library cache during parse: 1
Optimizer goal: CHOOSE
Parsing user id: 833  

Rows     Execution Plan
-------  ---------------------------------------------------
      0  SELECT STATEMENT   GOAL: CHOOSE
      0   SORT (ORDER BY)
      0    NESTED LOOPS
      0     MERGE JOIN (OUTER)
      0      SORT (JOIN)
      0       HASH JOIN
      0        TABLE ACCESS (BY INDEX ROWID) OF 'NEWOBJECT'
      0         INDEX (RANGE SCAN) OF 'U_NEWOBJECT_VIEID' 
                    (NON-UNIQUE)
      0        MERGE JOIN
      0         MERGE JOIN
      0          TABLE ACCESS (BY INDEX ROWID) OF 'VALUEPARAMS'
      0           INDEX (FULL SCAN) OF 'U_VALUEPARAMS_LIBID' 
                      (NON-UNIQUE)
      0          SORT (JOIN)
      0           TABLE ACCESS (FULL) OF 'LIBRARYPARAMS'
      0         SORT (JOIN)
      0          VIEW
      0           COUNT
      0            CONNECT BY
      0             TABLE ACCESS   GOAL: ANALYZED (FULL) OF 
                        'PARAMETRVIEW'
      0             TABLE ACCESS   GOAL: ANALYZED (BY USER ROWID)
                         OF 'PARAMETRVIEW'
      0             TABLE ACCESS   GOAL: ANALYZED (FULL) OF 
                        'PARAMETRVIEW'
      0      SORT (JOIN)
      0       TABLE ACCESS (FULL) OF 'SELECTVALUE'
      0     TABLE ACCESS (BY INDEX ROWID) OF 'OLDOBJECT'
      0      INDEX (RANGE SCAN) OF 'U_OLDOBJECT' (NON-UNIQUE)

********************************************************************************

alter session set events '10046 trace name context off'

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.03       0.03          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        2      0.03       0.03          0          0          0           0

Misses in library cache during parse: 0
Optimizer goal: CHOOSE
Parsing user id: 833  


********************************************************************************

OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        4      0.91       0.91          0          0          0           0
Execute      4      0.12       0.14          0          0          0           0
Fetch        1     20.37      20.52        982     298888         83         250
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        9     21.40      21.57        982     298888         83         250

Misses in library cache during parse: 1


OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.03       0.03          0          0          0           0
Execute      1      0.08       0.08          0          0          0           0
Fetch        1      0.00       0.00          0         16          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        3      0.11       0.11          0         16          0           1

Misses in library cache during parse: 0

********************************************************************************
24 июл 07, 10:45    [4427015]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация 18 сек  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
Lear
select  /*+ index(vp u_valueparams_libid ) */
       /*+ordered use_nl(ll,l,vp,sv,oo,nob) */
24 июл 07, 10:53    [4427103]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация 18 сек  [new]
Lear
Member

Откуда: Харьков
Сообщений: 14
не смейтесь, я только вчера про хинты узнала.
расскажите как правильно писать несколько хинтов.
24 июл 07, 11:06    [4427267]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация 18 сек  [new]
sendal
Guest
Lear
sendal, 478 000 за 30 сек


Требуется 11140, по имеющемуся индексу отсекается (насильственно) 478000 из 1 487 000.
Значится более эффективный план будет при индексации ValueParams (new_id,lib_id),
и где-то таком сценарии (в общих чертах, чтоб понятней)
1. Извлечение по индексу по vie_id из NewObject
2. Цикличное обращение по индексу на new_id к OldObject
3. Независимая отработка
      select lib_id, rownum rn 
      from (select lib_id, par_id, nvl(parent,1) parent from ParametrView where vie_id=200) --Автомобиль
      start with parent=1
      connect by prior par_id=parent
4. Слияние результатов 2 и 3
5. Цикличное обращение по предлагаемому индексу к ValueParams.

По прочим неуказанным таблицам - Полное сканирование и слияние.
IMHO Приятно удивитесь результату.
24 июл 07, 11:07    [4427268]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация 18 сек  [new]
Splain
Member

Откуда: Череповец
Сообщений: 924
Lear

Rows Execution Plan
------- ---------------------------------------------------
0 SELECT STATEMENT GOAL: CHOOSE

...



Интересно было посмотреть реальное количество строк, обрабатываемых во время выполнения запроса. А здесь я вижу нули. Посмотрите, в "сыром" trace-файле тоже 0?
24 июл 07, 11:15    [4427354]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация 18 сек  [new]
Lear
Member

Откуда: Харьков
Сообщений: 14
Индексы висят на:
nob: pk, vie_id
vp: pk, new_id, lib_id, sel_id
sv: pk, lib_id
l: pk
parametrview: pk, lib_id, vie_id

текущий результат (см. трас) 17,70 сек

сырой трас:
PARSING IN CURSOR #3 len=70 dep=0 uid=833 oct=42 lid=833 tim=121011750 hv=347037164 ad='539fac4'
alter session set events '10046 trace name context forever, level 12'
END OF STMT
EXEC #3:c=11,e=12,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=121011751
WAIT #3: nam='SQL*Net message to client' ela= 0 p1=1413697536 p2=1 p3=0
*** 2007-07-24 08:46:30.829
WAIT #3: nam='SQL*Net message from client' ela= 1504 p1=1413697536 p2=1 p3=0
=====================

PARSING IN CURSOR #3 len=1035 dep=0 uid=833 oct=3 lid=833 tim=121013287 hv=4247964304 ad='509dbbc'
select  /*+ index(vp u_valueparams_libid ) */
       /*+ordered use_nl(ll,l,vp,sv,oo,nob) */
       oo.old_invnom "инвент.№", 
       nob.new_name "объект",
       ll.rn "№",
       l.lib_name "параметр", 
       decode(nvl(vp.val_varchar,nvl(to_char(vp.val_number),(vp.val_data))), --Если ни одно из полей VP не заполнено
       null,nvl(sv.sel_varchar,nvl(to_char(sv.sel_number),(sv.sel_data))), --берём значение из полей SV
       nvl(vp.val_varchar,nvl(to_char(vp.val_number),(vp.val_data)))) "значение"
from (select lib_id, rownum rn 
      from (select lib_id, par_id, nvl(parent,1) parent from ParametrView where vie_id=200) --Автомобиль
      start with parent=1
      connect by prior par_id=parent
     ) ll,
     LibraryParams l, 
     ValueParams vp,   
     SelectValue sv,
     OldObject oo,
     NewObject nob          
where l.lib_id=ll.lib_id
and l.lib_id=vp.lib_id
and oo.new_id=vp.new_id
and sv.sel_id(+)=vp.sel_id
and nob.new_id=vp.new_id
and nob.vie_id=200 --Автомобиль
order by nob.new_name, oo.old_invnom, ll.rn
END OF STMT
PARSE #3:c=50,e=51,p=0,cr=16,cu=0,mis=1,r=0,dep=0,og=4,tim=121013310
WAIT #3: nam='SQL*Net message to client' ela= 0 p1=1413697536 p2=1 p3=0
WAIT #3: nam='SQL*Net message from client' ela= 2 p1=1413697536 p2=1 p3=0
=====================
PARSING IN CURSOR #3 len=1035 dep=0 uid=833 oct=3 lid=833 tim=121013315 hv=4247964304 ad='509dbbc'
select  /*+ index(vp u_valueparams_libid ) */
       /*+ordered use_nl(ll,l,vp,sv,oo,nob) */
       oo.old_invnom "инвент.№", 
       nob.new_name "объект",
       ll.rn "№",
       l.lib_name "параметр", 
       decode(nvl(vp.val_varchar,nvl(to_char(vp.val_number),(vp.val_data))), --Если ни одно из полей VP не заполнено
       null,nvl(sv.sel_varchar,nvl(to_char(sv.sel_number),(sv.sel_data))), --берём значение из полей SV
       nvl(vp.val_varchar,nvl(to_char(vp.val_number),(vp.val_data)))) "значение"
from (select lib_id, rownum rn 
      from (select lib_id, par_id, nvl(parent,1) parent from ParametrView where vie_id=200) --Автомобиль
      start with parent=1
      connect by prior par_id=parent
     ) ll,
     LibraryParams l, 
     ValueParams vp,   
     SelectValue sv,
     OldObject oo,
     NewObject nob          
where l.lib_id=ll.lib_id
and l.lib_id=vp.lib_id
and oo.new_id=vp.new_id
and sv.sel_id(+)=vp.sel_id
and nob.new_id=vp.new_id
and nob.vie_id=200 --Автомобиль
order by nob.new_name, oo.old_invnom, ll.rn
END OF STMT
PARSE #3:c=22,e=22,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=121013337
WAIT #3: nam='SQL*Net message to client' ela= 0 p1=1413697536 p2=1 p3=0
WAIT #3: nam='SQL*Net message from client' ela= 0 p1=1413697536 p2=1 p3=0
=====================
PARSING IN CURSOR #3 len=1035 dep=0 uid=833 oct=3 lid=833 tim=121013340 hv=4247964304 ad='509dbbc'
select  /*+ index(vp u_valueparams_libid ) */
       /*+ordered use_nl(ll,l,vp,sv,oo,nob) */
       oo.old_invnom "инвент.№", 
       nob.new_name "объект",
       ll.rn "№",
       l.lib_name "параметр", 
       decode(nvl(vp.val_varchar,nvl(to_char(vp.val_number),(vp.val_data))), --Если ни одно из полей VP не заполнено
       null,nvl(sv.sel_varchar,nvl(to_char(sv.sel_number),(sv.sel_data))), --берём значение из полей SV
       nvl(vp.val_varchar,nvl(to_char(vp.val_number),(vp.val_data)))) "значение"
from (select lib_id, rownum rn 
      from (select lib_id, par_id, nvl(parent,1) parent from ParametrView where vie_id=200) --Автомобиль
      start with parent=1
      connect by prior par_id=parent
     ) ll,
     LibraryParams l, 
     ValueParams vp,   
     SelectValue sv,
     OldObject oo,
     NewObject nob          
where l.lib_id=ll.lib_id
and l.lib_id=vp.lib_id
and oo.new_id=vp.new_id
and sv.sel_id(+)=vp.sel_id
and nob.new_id=vp.new_id
and nob.vie_id=200 --Автомобиль
order by nob.new_name, oo.old_invnom, ll.rn
END OF STMT
PARSE #3:c=24,e=23,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=121013362
BINDS #3:
EXEC #3:c=1,e=2,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=121013364
WAIT #3: nam='SQL*Net message to client' ela= 0 p1=1413697536 p2=1 p3=0
WAIT #3: nam='file open' ela= 0 p1=0 p2=0 p3=0
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220625 p3=3
WAIT #3: nam='direct path write' ela= 2 p1=1021 p2=220631 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220637 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220643 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220649 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220655 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220661 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220667 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220676 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220682 p3=3
WAIT #3: nam='direct path write' ela= 1 p1=1021 p2=220688 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220694 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220700 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220706 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220712 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220718 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220724 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220737 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220743 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220749 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220561 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220567 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220579 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220585 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220600 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220606 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220612 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220621 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221393 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221399 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221405 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221411 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221420 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221426 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221432 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221438 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221444 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221456 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221462 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221471 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221477 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221483 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221489 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221495 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221501 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221507 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221519 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221525 p3=3
WAIT #3: nam='direct path write' ela= 1 p1=1021 p2=221531 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221540 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221546 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221552 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221558 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221564 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221570 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221582 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221588 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221594 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221600 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221606 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221612 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221618 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221624 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221636 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=221645 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220497 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220503 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220518 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220524 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220530 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220542 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220548 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220554 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220433 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220439 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220445 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220451 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220457 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220469 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220484 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220493 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220369 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220375 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220390 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220402 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220408 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220414 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220417 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220420 p3=3
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220422 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221520 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220471 p3=5
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220734 p3=5
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220625 p3=5
WAIT #3: nam='direct path read' ela= 2 p1=1021 p2=221424 p3=5
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220113 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220119 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220128 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220134 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220152 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220161 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220167 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220173 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220052 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220058 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220070 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220082 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220088 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220100 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220109 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=219985 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=219991 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220000 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220003 p3=1
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220005 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220005 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220113 p3=14
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220009 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220018 p3=3
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220141 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220142 p3=14
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220033 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220045 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220113 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220119 p3=3
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220170 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220171 p3=6
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220125 p3=3
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220049 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220050 p3=14
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220134 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220140 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220146 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220152 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220158 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220164 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220170 p3=3
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220092 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220093 p3=14
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220055 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220061 p3=3
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=219985 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=219986 p3=14
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220073 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220088 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220006 p3=32
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220635 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220641 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220647 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220653 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220659 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220665 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220671 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220677 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221434 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221440 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221446 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221452 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221462 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221526 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221468 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221474 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221480 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221486 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221492 p3=1
WAIT #3: nam='direct path write' ela= 1 p1=1021 p2=219921 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=219927 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=219933 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=219939 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=219945 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=219951 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=219957 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=219963 p3=3
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221498 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221504 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221510 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221516 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220481 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220482 p3=5
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220492 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220369 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220370 p3=5
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220385 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220386 p3=5
WAIT #3: nam='direct path read' ela= 1 p1=1021 p2=220113 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220114 p3=31
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220145 p3=32
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220049 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220050 p3=31
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220081 p3=8
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220683 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220689 p3=5
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220699 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220700 p3=5
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220710 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220711 p3=5
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220721 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220722 p3=5
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220732 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220744 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220745 p3=5
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=219972 p3=2
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=219978 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=219984 p3=1
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220308 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220314 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220320 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220326 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220332 p3=3
WAIT #3: nam='direct path write' ela= 2 p1=1021 p2=220338 p3=3
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220561 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220562 p3=5
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220577 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220578 p3=5
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220598 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220599 p3=5
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220619 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221393 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221394 p3=5
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221414 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221415 p3=5
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220406 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220407 p3=5
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220344 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220350 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220356 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220362 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220241 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220247 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220253 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220259 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220265 p3=3
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221532 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221533 p3=5
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221543 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221544 p3=5
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221559 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221560 p3=5
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221580 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221585 p3=5
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221610 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221611 p3=5
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221641 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=221642 p3=5
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220497 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220498 p3=5
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220271 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220277 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220283 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220289 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220295 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220301 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220177 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220183 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220189 p3=3
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220533 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220534 p3=5
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220433 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220434 p3=5
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220439 p3=5
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220195 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220201 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220207 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220213 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220219 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220225 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220231 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220234 p3=3
WAIT #3: nam='direct path write' ela= 0 p1=1021 p2=220237 p3=1
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220197 p3=6
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220347 p3=6
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220272 p3=6
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=219975 p3=6
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=219921 p3=6
WAIT #3: nam='SQL*Net more data to client' ela= 0 p1=1413697536 p2=2009 p3=0
WAIT #3: nam='SQL*Net more data to client' ela= 0 p1=1413697536 p2=2035 p3=0
WAIT #3: nam='SQL*Net more data to client' ela= 0 p1=1413697536 p2=1988 p3=0
WAIT #3: nam='SQL*Net more data to client' ela= 0 p1=1413697536 p2=2004 p3=0
WAIT #3: nam='SQL*Net more data to client' ela= 0 p1=1413697536 p2=2009 p3=0
WAIT #3: nam='SQL*Net more data to client' ela= 0 p1=1413697536 p2=2019 p3=0
WAIT #3: nam='SQL*Net more data to client' ela= 0 p1=1413697536 p2=2010 p3=0
WAIT #3: nam='SQL*Net more data to client' ela= 0 p1=1413697536 p2=2006 p3=0
WAIT #3: nam='SQL*Net more data to client' ela= 0 p1=1413697536 p2=2018 p3=0
WAIT #3: nam='SQL*Net more data to client' ela= 0 p1=1413697536 p2=1997 p3=0
FETCH #3:c=2037,e=2052,p=982,cr=298888,cu=83,mis=0,r=250,dep=0,og=4,tim=121015417
WAIT #3: nam='SQL*Net message from client' ela= 768 p1=1413697536 p2=1 p3=0
STAT #3 id=1 cnt=250 pid=0 pos=0 obj=0 op='SORT ORDER BY '
STAT #3 id=2 cnt=11140 pid=1 pos=1 obj=0 op='NESTED LOOPS '
STAT #3 id=3 cnt=20585 pid=2 pos=1 obj=0 op='MERGE JOIN OUTER '
STAT #3 id=4 cnt=20585 pid=3 pos=1 obj=0 op='SORT JOIN '
STAT #3 id=5 cnt=20584 pid=4 pos=1 obj=0 op='HASH JOIN '
STAT #3 id=6 cnt=1847 pid=5 pos=1 obj=50189 op='TABLE ACCESS BY INDEX ROWID NEWOBJECT '
STAT #3 id=7 cnt=1848 pid=6 pos=1 obj=81140 op='INDEX RANGE SCAN '
STAT #3 id=8 cnt=478027 pid=5 pos=2 obj=0 op='MERGE JOIN '
STAT #3 id=9 cnt=1487331 pid=8 pos=1 obj=0 op='MERGE JOIN '
STAT #3 id=10 cnt=1487331 pid=9 pos=1 obj=49251 op='TABLE ACCESS BY INDEX ROWID VALUEPARAMS '
STAT #3 id=11 cnt=1487331 pid=10 pos=1 obj=81138 op='INDEX FULL SCAN '
STAT #3 id=12 cnt=2974660 pid=9 pos=2 obj=0 op='SORT JOIN '
STAT #3 id=13 cnt=131 pid=12 pos=1 obj=49216 op='TABLE ACCESS FULL LIBRARYPARAMS '
STAT #3 id=14 cnt=478027 pid=8 pos=2 obj=0 op='SORT JOIN '
STAT #3 id=15 cnt=13 pid=14 pos=1 obj=0 op='VIEW '
STAT #3 id=16 cnt=13 pid=15 pos=1 obj=0 op='COUNT '
STAT #3 id=17 cnt=13 pid=16 pos=1 obj=0 op='CONNECT BY '
STAT #3 id=18 cnt=2 pid=17 pos=1 obj=49232 op='TABLE ACCESS FULL PARAMETRVIEW '
STAT #3 id=19 cnt=1 pid=17 pos=2 obj=49232 op='TABLE ACCESS BY USER ROWID PARAMETRVIEW '
STAT #3 id=20 cnt=25 pid=17 pos=3 obj=49232 op='TABLE ACCESS FULL PARAMETRVIEW '
STAT #3 id=21 cnt=7387 pid=3 pos=2 obj=0 op='SORT JOIN '
STAT #3 id=22 cnt=13456 pid=21 pos=1 obj=49247 op='TABLE ACCESS FULL SELECTVALUE '
STAT #3 id=23 cnt=11140 pid=2 pos=2 obj=49227 op='TABLE ACCESS BY INDEX ROWID OLDOBJECT '
STAT #3 id=24 cnt=31724 pid=23 pos=1 obj=49229 op='INDEX RANGE SCAN '
UNMAP #3:c=0,e=0,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=0,tim=121016206
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220203 p3=6
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220353 p3=6
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=220278 p3=6
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=219981 p3=4
WAIT #3: nam='direct path read' ela= 0 p1=1021 p2=219927 p3=6
=====================
PARSING IN CURSOR #3 len=56 dep=0 uid=833 oct=42 lid=833 tim=121016210 hv=3475487367 ad='562f934'
alter session set events '10046 trace name context off'
END OF STMT
PARSE #3:c=3,e=3,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=121016212
BINDS #3:
EXEC #3:c=0,e=0,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=121016214
24 июл 07, 11:22    [4427422]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация 18 сек  [new]
sendal
Guest
Про oo ещё забыли...
24 июл 07, 11:31    [4427494]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация 18 сек  [new]
Lear
Member

Откуда: Харьков
Сообщений: 14
индексы oo: pk, new_id, old_invnom
24 июл 07, 11:35    [4427532]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация 18 сек  [new]
Splain
Member

Откуда: Череповец
Сообщений: 924
Lear

сырой трас:


Работает у Вас долго потому, что во время выполнения объемного Merge Join часть блоков сбрасывается на диск.

К сожалению, Вы не сказали версию Oracle :(

Давайте для начала обновим статистику (analyze table LibraryParams compute statistics)

Далее укажем, что в результате выполнения запроса для формирования ll возвращается 13 строк:

with ll as (select /*+ CARDINALITY(ParametrView 13) */ lib_id, rownum rn
from (select lib_id, par_id, nvl(parent,1) parent from ParametrView where vie_id=200) --Автомобиль
start with parent=1
connect by prior par_id=parent)
select ...
from ll, ...

Далее уберите хинт из запроса и покажите новый план выполнения.
24 июл 07, 11:44    [4427580]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация 18 сек  [new]
sendal
Guest
А на вот такой запрос
select oo_nob.old_invnom "инвент.№", 
       oo_nob.new_name "объект",
       ll.rn "№",
       l.lib_name "параметр", 
       decode(nvl(vp.val_varchar,nvl(to_char(vp.val_number),(vp.val_data))), --Если ни одно из полей VP не заполнено
       null,nvl(sv.sel_varchar,nvl(to_char(sv.sel_number),(sv.sel_data))), --берём значение из полей SV
       nvl(vp.val_varchar,nvl(to_char(vp.val_number),(vp.val_data)))) "значение"
from (select lib_id, rownum rn 
      from (select lib_id, par_id, nvl(parent,1) parent from ParametrView where vie_id=200) --Автомобиль
      start with parent=1
      connect by prior par_id=parent
     ) ll, --13 (кол-во строк в таблице)
     (select oo.old_invnom, nob.new_name,
      nob.new_id
      from
      OldObject oo, --86 000
      NewObject nob, --126 000
      where oo.new_id = nob.new_id
      and nob.vie_id=200 --Автомобиль
      ) oo_nob,
     LibraryParams l, --130
     SelectValue sv, --13 000
     ValueParams vp  --1 487 000     
where l.lib_id=ll.lib_id
and l.lib_id=vp.lib_id
and sv.sel_id(+)=vp.sel_id
and oo_nob.new_id=vp.new_id
order by oo_nob.new_name, oo_nob.old_invnom, ll.rn
план выполнения и время выполнения не могли бы показать?
24 июл 07, 11:48    [4427614]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация 18 сек  [new]
Lear
Member

Откуда: Харьков
Сообщений: 14
ORACLE V8.1.7.4.1 - Production vsnsta=0
vsnsql=f vsnxtr=3
Windows 2000 Version 5.2 , CPU type 586
Oracle8i Enterprise Edition Release 8.1.7.4.1 - Production
With the Partitioning option
JServer Release 8.1.7.4.1 - Production
Windows 2000 Version 5.2 , CPU type 586

with ll as (select /*+ CARDINALITY(ParametrView 13) */ lib_id, rownum rn
from (select lib_id, par_id, nvl(parent,1) parent from ParametrView where vie_id=200) --Автомобиль
start with parent=1
connect by prior par_id=parent)
select oo.old_invnom "инвент.№",
nob.new_name "объект",
ll.rn "№",
l.lib_name "параметр",
decode(nvl(vp.val_varchar,nvl(to_char(vp.val_number),(vp.val_data))), --Если ни одно из полей VP не заполнено
null,nvl(sv.sel_varchar,nvl(to_char(sv.sel_number),(sv.sel_data))), --берём значение из полей SV
nvl(vp.val_varchar,nvl(to_char(vp.val_number),(vp.val_data)))) "значение"
from ll,
LibraryParams l,
ValueParams vp,
SelectValue sv,
OldObject oo,
NewObject nob
where l.lib_id=ll.lib_id
and l.lib_id=vp.lib_id
and oo.new_id=vp.new_id
and sv.sel_id(+)=vp.sel_id
and nob.new_id=vp.new_id
and nob.vie_id=200 --Автомобиль
order by nob.new_name, oo.old_invnom, ll.rn

(Error): ORA-00900: invalid SQL statement

PARSE ERROR #3:len=1003 dep=0 uid=833 oct=0 lid=833 tim=121821773 err=900
with ll as (select / ...
WAIT #3: nam='SQL*Net break/reset to client' ela= 0 p1=1413697536 p2=1 p3=0
WAIT #3: nam='SQL*Net break/reset to client' ela= 0 p1=1413697536 p2=0 p3=0
WAIT #3: nam='SQL*Net message to client' ela= 0 p1=1413697536 p2=1 p3=0
WAIT #3: nam='SQL*Net message from client' ela= 348 p1=1413697536 p2=1 p3=0

негодицца
=(
24 июл 07, 12:14    [4427794]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация 18 сек  [new]
A. S.
Member

Откуда: Донецк
Сообщений: 320
Попробуйте так

/*+ leading(l) use_nl(l ll) use_nl(ll vp) index(vp u_valueparams_libid)*/
24 июл 07, 12:29    [4427937]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация 18 сек  [new]
Splain
Member

Откуда: Череповец
Сообщений: 924
Lear
ORACLE V8.1.7.4.1 - Production
негодицца
=(


Угу, версия не та.

Ладно, давайте тогда просто соберите статистику по всем таблицам кроме ValueParams и постройте план выполнения запроса.
24 июл 07, 12:34    [4427977]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация 18 сек  [new]
Lear
Member

Откуда: Харьков
Сообщений: 14
ух ты, красота какая, 2.9 сек
select oo_nob.old_invnom "инвент.№", 
       oo_nob.new_name "объект",
       ll.rn "№",
       l.lib_name "параметр", 
       decode(nvl(vp.val_varchar,nvl(to_char(vp.val_number),(vp.val_data))), --Если ни одно из полей VP не заполнено
       null,nvl(sv.sel_varchar,nvl(to_char(sv.sel_number),(sv.sel_data))), --берём значение из полей SV
       nvl(vp.val_varchar,nvl(to_char(vp.val_number),(vp.val_data)))) "значение"
from (select lib_id, rownum rn 
      from (select lib_id, par_id, nvl(parent,1) parent from ParametrView where vie_id=200) --Автомобиль
      start with parent=1
      connect by prior par_id=parent
     ) ll, --13 (кол-во строк в таблице)
     (select oo.old_invnom, nob.new_name,
      nob.new_id
      from
      OldObject oo, --86 000
      NewObject nob --126 000
      where oo.new_id = nob.new_id
      and nob.vie_id=200 --Автомобиль
      ) oo_nob,
     LibraryParams l, --130
     SelectValue sv, --13 000
     ValueParams vp  --1 487 000     
where l.lib_id=ll.lib_id
and l.lib_id=vp.lib_id
and sv.sel_id(+)=vp.sel_id
and oo_nob.new_id=vp.new_id
order by oo_nob.new_name, oo_nob.old_invnom, ll.rn

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        3      0.61       0.62          0          0          0           0
Execute      2      0.17       0.17          0          0          0           0
Fetch        1      4.93       5.16       1099     113061         80         250
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        6      5.71       5.95       1099     113061         80         250

Misses in library cache during parse: 1
Parsing user id: 833 

Rows     Row Source Operation
-------  ---------------------------------------------------
    250  SORT ORDER BY 
  11140   NESTED LOOPS 
  20585    MERGE JOIN OUTER 
  20585     SORT JOIN 
  20584      HASH JOIN 
   1847       TABLE ACCESS BY INDEX ROWID NEWOBJECT 
   1848        INDEX RANGE SCAN (object id 81140)
 478027       NESTED LOOPS 
     14        NESTED LOOPS 
     14         VIEW 
     14          COUNT 
     13           CONNECT BY 
      2            TABLE ACCESS FULL PARAMETRVIEW 
      1            TABLE ACCESS BY USER ROWID PARAMETRVIEW 
     25            TABLE ACCESS FULL PARAMETRVIEW 
     26         TABLE ACCESS BY INDEX ROWID LIBRARYPARAMS 
     26          INDEX UNIQUE SCAN (object id 49217)
 478027        TABLE ACCESS BY INDEX ROWID VALUEPARAMS 
 478040         INDEX RANGE SCAN (object id 81138)
   7387     SORT JOIN 
  13456      TABLE ACCESS FULL SELECTVALUE 
  11140    TABLE ACCESS BY INDEX ROWID OLDOBJECT 
  31724     INDEX RANGE SCAN (object id 49229)


Rows     Execution Plan
-------  ---------------------------------------------------
      0  SELECT STATEMENT   GOAL: CHOOSE
    250   SORT (ORDER BY)
  11140    NESTED LOOPS
  20585     MERGE JOIN (OUTER)
  20585      SORT (JOIN)
  20584       HASH JOIN
   1847        TABLE ACCESS (BY INDEX ROWID) OF 'NEWOBJECT'
   1848         INDEX (RANGE SCAN) OF 'U_NEWOBJECT_VIEID' 
                    (NON-UNIQUE)
 478027        NESTED LOOPS
     14         NESTED LOOPS
     14          VIEW
     14           COUNT
     13            CONNECT BY
      2             TABLE ACCESS   GOAL: ANALYZED (FULL) OF 
                        'PARAMETRVIEW'
      1             TABLE ACCESS   GOAL: ANALYZED (BY USER ROWID)
                         OF 'PARAMETRVIEW'
     25             TABLE ACCESS   GOAL: ANALYZED (FULL) OF 
                        'PARAMETRVIEW'
     26          TABLE ACCESS   GOAL: ANALYZED (BY INDEX ROWID) OF 
                     'LIBRARYPARAMS'
     26           INDEX   GOAL: ANALYZED (UNIQUE SCAN) OF 
                      'PK_LIBRARYPARAMS' (UNIQUE)
 478027         TABLE ACCESS (BY INDEX ROWID) OF 'VALUEPARAMS'
 478040          INDEX (RANGE SCAN) OF 'U_VALUEPARAMS_LIBID' 
                     (NON-UNIQUE)
   7387      SORT (JOIN)
  13456       TABLE ACCESS (FULL) OF 'SELECTVALUE'
  11140     TABLE ACCESS (BY INDEX ROWID) OF 'OLDOBJECT'
  31724      INDEX (RANGE SCAN) OF 'U_OLDOBJECT' (NON-UNIQUE)
что я неправильно при трассировке делаю -
автор
Rows Execution Plan
------- ---------------------------------------------------
0 SELECT STATEMENT GOAL: CHOOSE
24 июл 07, 13:04    [4428237]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация 18 сек  [new]
sendal
Guest
Lear
ух ты, красота какая, 2.9 сек
........

Не-а... Красоты нет... Оптимизатор счёл себя умнее ...
Конечно на диск за счёт изменения плана часть перестала скидываться (отчего и
побыстрее), но он явно не фонтан ( или стоит таки оттрассировать , чтобы убедится что план совпадает с представленным ).
А у Вас точно на vp: new_id индекс имеется ?
На всякий случай ещё бы раз пересобрали статистику по ВСЕМ участвующем в запросе таблицам.
А если не поможет - к желаемому хинтами допинать...
24 июл 07, 13:44    [4428555]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация 18 сек  [new]
Splain
Member

Откуда: Череповец
Сообщений: 924
Lear
ух ты, красота какая, 2.9 сек


Ну вот, собственно, добились того, что ПО правильно работает. Запишите себе напоминание: собирать регулярно статистику.

Теперь начинается собственно сама настройка запроса.

Вот смотрите кусок плана:

Lear

478027 NESTED LOOPS
14 NESTED LOOPS
14 VIEW
14 COUNT
13 CONNECT BY
2 TABLE ACCESS FULL PARAMETRVIEW
1 TABLE ACCESS BY USER ROWID PARAMETRVIEW
25 TABLE ACCESS FULL PARAMETRVIEW
26 TABLE ACCESS BY INDEX ROWID LIBRARYPARAMS
26 INDEX UNIQUE SCAN (object id 49217)


Он вызывает повышенное потребление ресурсов - выбирается 487000 строк, хотя надо всего 250. Подумайте, можно ли добавить какие-то дополнительные условия к запросу, как-то еще отсечь на этом этапе ненужные записи.

Если это не получается - значит Вы уперлись в ошибки дизайна. Что вполне вероятно. Не стоит придумывать универсальных хранилищ вида параметр-значение. Схема сущность-связь и нормализация популярны не от любви к искусству, а в том числе и из соображений производительности.

Lear

что я неправильно при трассировке делаю -


Ничего, скорее всего баг. Скачайте пакет orasrp или смотрите в "сыром" файле.

P.S. Советов по поводу хинтов не слушайте.
24 июл 07, 14:08    [4428795]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация 18 сек  [new]
Lear
Member

Откуда: Харьков
Сообщений: 14
на new_id в vp повешены два индекса - составной unique lib_id+new_id и non-unique
пересобрала статистику.
final:
select /*+ index(vp u_valueparams_newobject)*/
       oo_nob.old_invnom "инвент.№", 
       oo_nob.new_name "объект",
       ll.rn "№",
       l.lib_name "параметр", 
       decode(nvl(vp.val_varchar,nvl(to_char(vp.val_number),(vp.val_data))), --Если ни одно из полей VP не заполнено
       null,nvl(sv.sel_varchar,nvl(to_char(sv.sel_number),(sv.sel_data))), --берём значение из полей SV
       nvl(vp.val_varchar,nvl(to_char(vp.val_number),(vp.val_data)))) "значение"
from (select lib_id, rownum rn 
      from (select lib_id, par_id, nvl(parent,1) parent from ParametrView where vie_id=200) --Автомобиль
      start with parent=1
      connect by prior par_id=parent
     ) ll, --13 (кол-во строк в таблице)
     (select oo.old_invnom, nob.new_name, nob.new_id
      from OldObject oo, 
           NewObject nob 
      where oo.new_id = nob.new_id
      and nob.vie_id=200 --Автомобиль
      ) oo_nob, --960
     LibraryParams l, --130
     SelectValue sv, --13 000
     ValueParams vp  --1 487 000     
where l.lib_id=ll.lib_id
and l.lib_id=vp.lib_id
and sv.sel_id(+)=vp.sel_id
and oo_nob.new_id=vp.new_id
order by oo_nob.new_name, oo_nob.old_invnom, ll.rn
0.91 сек
если сравнивать с самым старым неоптимизированным вариантом (>80сек) - ускорение в 100 раз =D
Всем спасибо.
24 июл 07, 14:12    [4428835]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить