Оптимизираните оптимизатори
Днес от чисто любопитство реших да погледна кои са най-тежките (от гледна точна на дискови операции) заявки в една тестова БД (Oracle 10.2.0.2). Използвах вградения репорт в Oracle SQL Developer. Тази БД не се използва много, особено днес, но все пак останах изумен от резултата. Това са двете най-лоши:
select /*+ rule */bucket, endpoint, col#, epvalue
from histgrm$
where obj# = :1
and intcol# = :2
and row# = :3
order by bucket
select /*+ rule */ bucket_cnt, row_cnt, cache_cnt, null_cnt, timestamp#, sample_size,
minimum, maximum, distcnt, lowval, hival, density, col#, spare1, spare2, avgcln
from hist_head$
where obj# = :1
and intcol# = :2
Това, вероятно, са рекурсивни заявки за преглед на хистограмите. Забавното в случая е, че използват хинта /*+ rule */.
До тук с десъпорта на rule-based optimizer в 10g! Щом Oracle дори в собствения си код го използват… При това в Oracle 10g Release 2
Но това не е новина. По-веселата част е, че това или е заявка, извиквана от кода на самият cost based optimizer; или е заявка, извиквана при събиране на статистиките, толкова необходими за CBO. При всички случаи този код, колкото и да е legacy (да кажем, че е от Oracle 8i) е писан СЛЕД появата на CBO. В крайна сметка точно CBO използва хистограмите – RBO така и не знае за тях!
🙂
Sorry, the comment form is closed at this time.