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

Откуда:
Сообщений: 610
Все написанное JUST FOR FUN! Не надо делать это на продакшенах!!!

SQL> create table non_flush (a number);

Table created.

SQL> insert into NON_flush select rownum from obj$ where rownum<3;

2 row created.

SQL> select block_id,file_id from dba_extents where segment_name='NON_FLUSH';

  BLOCK_ID    FILE_ID
---------- ----------
     17275          1

SQL> select max(obj#) from bootstrap$;

 MAX(OBJ#)
----------
        56

SQL> insert into bootstrap$ values (57,57,'CREATE TABLE NON_FLUSH("A" NUMBER) 
   2   PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE 
   3   ( INITIAL 16K NEXT 16K MINEXTENTS 1 MAXEXTENTS 505 PCTINCREASE 50 OBJNO 6428 
   4   EXTENTS (FILE 1 BLOCK 17275))';

1 row created.

SQL> commit;

Commit complete.

SQL> startup open force;
ORACLE instance started.

Total System Global Area  135760720 bytes
Fixed Size                   731984 bytes
Variable Size             104857600 bytes
Database Buffers           29360128 bytes
Redo Buffers                 811008 bytes
Database mounted.
Database opened.

SQL> alter system flush shared_pool;

System altered.

SQL> alter session set events '10046 trace name context forever, level 12';

Session altered.

SQL> select * from non_flush;

         A
----------
         1
         1

SQL> alter session set events '10046 trace name context off';

Session altered.





=====================
PARSING IN CURSOR #1 len=69 dep=0 uid=0 oct=42 lid=0 tim=2011094530383 hv=2004533713 ad='84bb7668'
alter session set events '10046 trace name context forever, level 12'
END OF STMT
EXEC #1:c=0,e=169,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=4,tim=2011094530360
WAIT #1: nam='SQL*Net message to client' ela= 9 p1=1650815232 p2=1 p3=0
WAIT #1: nam='SQL*Net message from client' ela= 3029576 p1=1650815232 p2=1 p3=0
=====================
PARSING IN CURSOR #1 len=23 dep=0 uid=0 oct=3 lid=0 tim=2011097562463 hv=744266673 ad='847711d8'
select * from non_flush
END OF STMT
PARSE #1:c=0,e=1383,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=4,tim=2011097562442
BINDS #1:
EXEC #1:c=0,e=149,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=2011097562927
WAIT #1: nam='SQL*Net message to client' ela= 9 p1=1650815232 p2=1 p3=0
WAIT #1: nam='db file sequential read' ela= 100 p1=1 p2=17275 p3=1
WAIT #1: nam='db file sequential read' ela= 81 p1=1 p2=17276 p3=1
FETCH #1:c=0,e=630,p=2,cr=3,cu=0,mis=0,r=1,dep=0,og=4,tim=2011097563801
WAIT #1: nam='SQL*Net message from client' ela= 709 p1=1650815232 p2=1 p3=0
WAIT #1: nam='SQL*Net message to client' ela= 6 p1=1650815232 p2=1 p3=0
FETCH #1:c=0,e=149,p=0,cr=1,cu=0,mis=0,r=1,dep=0,og=4,tim=2011097564996
WAIT #1: nam='SQL*Net message from client' ela= 2950837 p1=1650815232 p2=1 p3=0
STAT #1 id=1 cnt=2 pid=0 pos=1 obj=6428 op='TABLE ACCESS FULL NON_FLUSH '
=====================
PARSING IN CURSOR #1 len=55 dep=0 uid=0 oct=42 lid=0 tim=2011100517693 hv=4110456808 ad='8462f3f0'
alter session set events '10046 trace name context off'
END OF STMT
PARSE #1:c=0,e=763,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=4,tim=2011100517566
BINDS #1:
EXEC #1:c=0,e=199,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=2011100518155 

14 дек 06, 12:00    [3535147]     Ответить | Цитировать Сообщить модератору
 Re: Борьба с парсингом  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18482
Чет я не понял идеи (и результата)
15 дек 06, 02:03    [3539265]     Ответить | Цитировать Сообщить модератору
 Re: Борьба с парсингом  [new]
гы
Guest
Вячеслав Любомудров
Чет я не понял идеи (и результата)

Это нельзя делать на продакшене!!! :)
15 дек 06, 03:01    [3539293]     Ответить | Цитировать Сообщить модератору
 Re: Борьба с парсингом  [new]
Vertigo
Member

Откуда:
Сообщений: 610
Вячеслав Любомудров
Чет я не понял идеи (и результата)

Мне показалось интересно то, что даже после alter system flush shared_pool нет жесткого парса. Вот трейс селекта обычной таблицы (порезанный, просто для сравнения кол-ва селектов)
PARSING IN CURSOR #2 len=198 dep=1 uid=0 oct=3 lid=0 tim=2087240727802 hv=2703824309 ad='8442e480'
select obj#,type#,ctime,mtime,stime,status,dataobj#,flags,oid$, spare1, spare2 from obj$ 
where owner#=:1 and name=:2 and namespace=:3 and remoteowner is null and linkname is null and subname is null
=====================
PARSING IN CURSOR #3 len=343 dep=1 uid=0 oct=3 lid=0 tim=2087240734933 hv=2367942048 ad='84720f50'
select ts#,file#,block#,nvl(bobj#,0),nvl(tab#,0),intcols,
nvl(clucols,0),audit$,flags,pctfree$,pctused$,initrans,maxtrans,
rowcnt,blkcnt,empcnt,avgspc,chncnt,avgrln,analyzetime, 
samplesize,cols,property,nvl(degree,1),nvl(instances,1),avgspc_flb,flbcnt,
kernelcols,nvl(trigflag, 0),nvl(spare1,0),nvl(spare2,0),spare4,spare6 from tab$ where obj#=:1
=====================
PARSING IN CURSOR #4 len=190 dep=1 uid=0 oct=3 lid=0 tim=2087240740197 hv=1006414593 ad='8442e718'
select type#,blocks,extents,minexts,maxexts,extsize,extpct,user#,iniexts,NVL(lists,65535),
NVL(groups,65535),cachehint,hwmincr, NVL(spare1,0) from seg$ where ts#=:1 
and file#=:2 and block#=:3
=====================
PARSING IN CURSOR #4 len=693 dep=1 uid=0 oct=3 lid=0 tim=2087240748126 hv=1480155015 ad='846a7ff0'
select i.obj#,i.ts#,i.file#,i.block#,i.intcols,i.type#,i.flags, i.property,i.pctfree$,i.initrans,i.maxtrans,i.blevel,
i.leafcnt,i.distkey, i.lblkkey,i.dblkkey,i.clufac,i.cols,i.analyzetime,i.samplesize,
i.dataobj#, nvl(i.degree,1),nvl(i.instances,1),i.rowcnt,mod(i.pctthres$,256),
i.indmethod#,i.trunccnt,nvl(c.unicols,0),nvl(c.deferrable#+c.valid#,0), 
nvl(i.spare1,i.intcols),i.spare4,spare2,spare6, decode(i.pctthres$,null,null, mod(trunc(i.pctthres$/256),256)) from ind$ i, 
(select enabled, min(cols) unicols, min(to_number(bitand(defer,1))) deferrable#, 
min(to_number(bitand(defer,4))) valid# from cdef$ where obj#=:1 and enabled > 1 
group by enabled) c where i.obj#=c.enabled(+) and i.bo#=:1
=====================
PARSING IN CURSOR #5 len=348 dep=1 uid=0 oct=3 lid=0 tim=2087240754928 hv=839312984 ad='8473fad0'
select name,intcol#,segcol#,type#,length,nvl(precision#,0),decode(type#,2,nvl(scale,-127/*MAXSB1MINAL*/),
178,scale,179,scale,180,scale,181,scale,182,scale,183,scale,231,scale,0),
null$,fixedstorage,nvl(deflength,0),default$,rowid,col#,property, nvl(charsetid,0),
nvl(charsetform,0),spare1,spare2,nvl(spare3,0) from col$ where obj#=:1 order by intcol#
=====================
PARSING IN CURSOR #1 len=19 dep=0 uid=0 oct=3 lid=0 tim=2087240758895 hv=439594298 ad='8473b410'
select * from flush
=====================
PARSING IN CURSOR #2 len=116 dep=1 uid=0 oct=3 lid=0 tim=2087249565984 hv=431456802 ad='8442efa8'
select o.owner#,o.name,o.namespace,o.remoteowner,o.linkname,o.subname,o.dataobj#,o.flags 
from obj$ o where o.obj#=:1
===================== 



Я не знаю, насколько можно доверять результатам трейса в этом случае. Статистика 236 (hard parse), например, все равно увеличивается
15 дек 06, 09:06    [3539608]     Ответить | Цитировать Сообщить модератору
 Re: Борьба с парсингом  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18482
Парс-то есть
Vertigo
PARSE #1:c=0,e=1383,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=4,tim=2011097562442
Поэтому и увеличивается

А вот не делается никаких проверок (и не оптимизируется?) -- похоже на то
15 дек 06, 09:12    [3539634]     Ответить | Цитировать Сообщить модератору
 Re: Борьба с парсингом  [new]
Vertigo
Member

Откуда:
Сообщений: 610
Вячеслав Любомудров
Парс-то есть
Vertigo
PARSE #1:c=0,e=1383,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=4,tim=2011097562442
Поэтому и увеличивается

А вот не делается никаких проверок (и не оптимизируется?) -- похоже на то

Насколько я понимаю, это идет как софт парс. Проверки прав, кстати, идут, если селектить от другого юзера
Понятно, вообщем-то, что обращение к obj$,col$,seg$ и прочее идет без хард парсов, ведь для них (хард парсов) нужна инфа из этих таблиц. Похоже на то, что они парсятся один раз при старте базы и все.
15 дек 06, 09:26    [3539691]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить