powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос про СВО.
28 сообщений из 28, показаны все 2 страниц
Вопрос про СВО.
    #32095530
Um
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот такая ботва:
создаю таблички, заполняю, создаю индексы, собираю статистику.

create table emp (id number(10), name varchar2(50), birthday date);

begin
for i in 1..300000 loop
insert into emp values (i,'emp' || i, sysdate - 365*40-1/i);
end loop;
end;
/

create unique index pk_emp on emp(id);
create index emp_idx1 on emp(name);

analyze table emp compute statistics;

create table orders (id number(10), id_emp number(10), id_goods number(10));

begin
for i in 10..1000000 loop
insert into orders values (i, floor(i/10), 5);
end loop;
end;
/

create unique index pk_orders on orders(id);
create index orders_idx1 on orders(id_emp, id_goods);

analyze table orders compute statistics;

выполняю запос

SQL> select name, orders.id_goods
2 from emp, orders
3 where emp.ID = orders.ID_EMP
4 and emp.id > 1000;

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=980 Card=990001 Bytes=18810019)

1 0 HASH JOIN (Cost=980 Card=990001 Bytes=18810019)
2 1 TABLE ACCESS (FULL) OF 'EMP' (Cost=116 Card=299001 Bytes=3887013)

3 1 TABLE ACCESS (FULL) OF 'ORDERS' (Cost=243 Card=990001 Bytes=5940006)

SQL> select /*+ FIRST_ROWS */ name, orders.id_goods
2 from emp, orders
3 where emp.ID = orders.ID_EMP
4 and emp.id > 1000;

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=HINT: FIRST_ROWS (Cost=30077 Card=990001 Bytes=18810019)

1 0 NESTED LOOPS (Cost=30077 Card=990001 Bytes=18810019)
2 1 TABLE ACCESS (BY INDEX ROWID) OF 'EMP' (Cost=177 Card=299001 Bytes=3887013)

3 2 INDEX (RANGE SCAN) OF 'PK_EMP' (UNIQUE) (Cost=625 Card=299001)

4 1 INDEX (RANGE SCAN) OF 'ORDERS_IDX1' (NON-UNIQUE) (Cost=1 Card=3 Bytes=18)

Я конечно не против фул скана, но только если это действительно оправдано!!
А здесь - первый запрос отрабатывает 18 сек, а второй 0.02 секунды. Есть разница. Помогает также убитие статистики, тогда CHOOSE тоже не делает фул скан.
Есть подозрение, что с настройками параметров не все в порядке, однако optimizer_index_caching = 95 и otimizer_index_cost_adj = 10. Статью на сайте уважаемого killed'а я тоже читал.
Как думаете, как заставить CHOOSE выбрать другой план выполнения??
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32095535
non
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cм. hint
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32095538
Um
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дык я хочу чтоб оно без хинта нормально работало!
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32095539
.dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пока не поставил otimizer_index_cost_adj=1 CBO тоже нормально не работал. И какой у тебя стоит hash_area_size?
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32095542
Um
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
otimizer_index_cost_adj=1 это ж минимум как я понимаю?
hash_area_size = 2048000
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32095546
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dlia analiza situacii, esli vogmogno, 2 parametra basi:
db_block_size
i
db_multiblock_read_count
a takge esli izvestno -- max IO buffer dlia operaciy chtenia s diska. (naibolee veroiatno 64k)
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32095549
.dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>hash_area_size = 2048000

Ну по мне так это слишком. Ни разу не видел, чтоб hash_join работал быстрее чем nested loops. Я их вообще запретил :-)
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32095551
non
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>Ну по мне так это слишком. Ни разу не видел, чтоб hash_join работал >>быстрее чем nested loops. Я их вообще запретил :-)

1. Надеюсь это шутка...
hash_join в 80% процентов случав по определению быстрее...другое дело, что до 8i он работал через пень колоду

2. По поводу хинтов.
Никакими суперпуперинипараметрами, вы не добъетесь ВСЕГДА желаемого плана....это как грубая ОБЩАЯ подсказка....
хинты - более тонкая подсказка и помогают в большинстве случаев....)))
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32095576
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Optimizator rabotal po zarosu dostatocho logicho:

1) ispolzovanie optimizer_index_caching = 95 -- primeniaetsiy pri ocenke kolichestva fizicheskih chteniy po otnosheniyu k logicheskim:

dlia tablici EMP (300000 - 1000) * (1 - 0.95) = 14950 cheniy i s uchetom db_block_size + mutiblock ...
poluchaetcia NAPRIMER :
db_blocksize = 8K
db_multiblock_read_count = 8 (pochty default)
avg rowlen = 18..20 (eto ocenka ishodia iz insert into emp values (i,'emp' || i, sysdate - 365*40-1/i))
64000/20 (grubo) = 2800 rows (ili ~350 na block) za odno chtenie pri Full scan table
a vsego cheniy dlia polnogo prosmotra tablici (pri ocenke pctfree - 10) ~ 860

860 < 14950 -- tac chto FST po mneniu optimizatora luchshe
dlia tablici ORDER

kolichestvo distinct keys (po polu id_emp ) ~ 10% ot obchego kolichestva rows (ili kazdaya 10ya!!!)

factor klasterizacii govorit chto rows s odinakovimi keys ravnomerno razmazany po tablice
za 1 chenie pri FST garantiruetsia practicheski na 200 % row s nuznim kluchem poskolku:

2800/10 = 280 rows.

A soediniat tablyci v pamyati pri FST bistree vsego cherez HASH JOIN.
chego i nabludaetsia po rezultatam plana vipolneniya.

teper po povodo otimizer_index_cost_adj=1 -- siy parameter V DANNOM SLUCHAE SILOY zastavliaet
optimizator dumat cho 99% blockov TREBUEMIH INDEKSOV uge sibyat v db cache i nugen tolko
1% fizichekih cheniy dlia podkacki ostalnoy chacti.
namoy vzglid eto uge slishkom.
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32095600
.dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Non
>1. Надеюсь это шутка...
>hash_join в 80% процентов случав по определению быстрее...другое дело,
>что до 8i он работал через пень колоду

Вообще-то да, с hash_join я погорячился, но у меня именно был случай, когда hash_join работал медленнее чем nested loops. Просто у меня сильно выраженное OLTP приложение и поэтому в связи с уходом от полных сканирований таблиц к повсеместному индексному сканированию nested loops более эффективны чем hash join.

2ShgGena

>A soediniat tablyci v pamyati pri FST bistree vsego cherez HASH JOIN.
>chego i nabludaetsia po rezultatam plana vipolneniya.

согласен.

>teper po povodo otimizer_index_cost_adj=1 -- siy parameter V DANNOM SLUCHAE
>SILOY zastavliaet optimizator dumat cho 99% blockov TREBUEMIH INDEKSOV uge
>sibyat v db cache i nugen tolko 1% fizichekih cheniy dlia podkacki ostalnoy
>chacti. namoy vzglid eto uge slishkom

Это вы с optimizer_index_caching перепутали.
otimizer_index_cost_adj=1 говорит только о том, что стоимость индексного доступа составляет 1/100 от стоимости full table scan
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32095603
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон за врождённый синдром Вестингауза :), но никак не пойму, откуда взялась цифра в 860 чтений таблицы при полном сканировании?
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32095605
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eto ne slogno:

-- avg razmer zapisi ~ 23 bait
(
insert into emp values (i,'emp' || i, sysdate - 365*40-1/i);
t.e 1 pole ~ 5, 2 pole ~ 3+5 = 9..10, 3 pole 10 = 23 (hotia po zizny budet ~ 20)
)
-- 10% pctfree + 120 bait na block header (hotia skoree vsego menshe)
-- db_block_size (dostupniy dlya insert) = 8K - 10% - 120 ~ 7000
-- kolichestvo rows ~ 7200/23 ~ 315 na 1 fiziceskiy block
-- obschee kokichestvo rows = 300000
-- 300000 /315 ~ 950 cheniy dlia Full Scan Table.

Vinovat v perviy raz vmesto 315 podelil na 350
poskoplku delal ocenku dliy 20 bait = avg razmer zapisi

-- 300000 /350 ~ 860 cheniy dlia Full Scan Table.

( no eto malo menyaet logicu optimizatora)
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32095608
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Da kstati mogno dobait chto optimizator bubet vichsliat cenu FST po formule:

KOL-CHTENIY / DB_MULTIBLOCK_READ_COUNT (t.e 860/8 = 107 ili 950/8 = 119 (pokazano 116))
>>> 2 1 TABLE ACCESS (FULL) OF 'EMP' (Cost=116 Card=299001 Bytes=3887013)
t.e i ochen ne dolek ot istiny.

No posle FTS dlia oboih tablic zapros narivaetsia na HASH_AREA_SIZE = 2MB
a tablici imeut 300000 i 1000000 zapisey
Dalee vsia eta massa tranziton uezgaet v TEMP tablespace.

MULTIBLOCK_READ_COUNT dlia temp egeli ee ne trogat = 2
pust extent size dlia TEMP Tablespace = 1M (v chem i licho somnevaus, eto nado proveriat)
i kak rezultat swaping megdu HASH_AREA i TEMP tablespace.

poetomu 18 sek - vremia vipolneniya zaprosa.
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32095701
Um
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл сказать, у меня 9.2
соответственно табличное пространство localy managed и SEGMENT SPACE MANAGEMENT AUTO. Теперь про параметры:
db_block_size = 8192
db_file_multiblock_read_count = 16
у TEMP - UNIFORM SIZE 1024K
avg Row len для emp - 26 для orders - 16

подскажите как узнать max IO buffer для операций чтения с диска.

2 non:
Не хочу я хинты использовать...

2 ShgGena:
Т.е. мне поможет увеличение hash_area_size ? Но до каких размеров? Если я правильно посчитал обе таблицы весят около 30М эдак никакой памяти не хватит..
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32095727
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Gena: Спасибо за объяснение.
Но вот мой клинический случай:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
db_block_size =  8192 
db_file_multiblock_read_count =  4 
optimizer_index_caching = default ( 0 )
optimizer_index_cost_adj = default ( 100 )
pctfree для блоков этих таблиц =  10 %

Execution Plan
 ----------------------------------------------------------
 
    0       SELECT STATEMENT Optimizer=CHOOSE (Cost= 344  Card= 30004750  Bytes= 1170185250 )
    1      0    HASH JOIN (Cost= 344  Card= 30004750  Bytes= 1170185250 )
    2      1      INDEX (RANGE SCAN) OF 'ORDERS_IDX1' (NON-UNIQUE) (Cost= 2  Card= 10035  Bytes= 260910 )
    3      1      TABLE ACCESS (FULL) OF 'EMP' (Cost= 274  Card= 299001  Bytes= 3887013 )


Почему так?
Между прочим, оптимизатор здесь прав - время выполнения хинтованного запроса примерно в 1,8 раза больше, чем нехинтованного.

Ещё интересно, что за железо у Um'а такое, что выборка ~990 тысяч строк проходит за 0,02 сек? :)
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32095753
Um
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Scott Tiger:
а какой размер hash_area_size?
и за какое время выолняется хинтованый и не хинтованый запрос?
Оптимизатор понятное дело прав, только надо под его правоту еще параметры подогнать :-))
А железо разное есть, есть тачка с обычным винтом на 20Гб Виндами камнем 1ГГц памятью 512М, а есть Sun двухпроцессорный со сказевыми винтами и гигабайтом памяти, ессно с соляркой.
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32095789
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Мб
2м 55с и 1м 44с - ну это 350Мгц AMD K6-2 с 384 Мб и IDE :) в домашних условиях под солярой. Но я почему-то не верю про 0.02 сек на 980 тысяч записей. Разве что первая строка за такое время отдаётся.
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32095863
Um
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде разобрался.
Спасибо всем принявшим участие и ткнувшим носом :))
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32096248
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nekotorie otvety na voproci (chgo mogu)

1) >>подскажите как узнать max IO buffer для операций чтения с диска.

dlia window - ne znau
dlia solaris --> konfiguracionniy file /etc/system imya parametra => maxphys
(v principe ego mozno smelo uvelichvat do 1 MB (by default = 64K)
tolko on zadaetcya v baytah
Linux --> imia analogichoe, no i bi opasalsia davat razmer maxphys bolshe 256K

2) Т.е. мне поможет увеличение hash_area_size ? Но до каких размеров? Если я правильно посчитал обе таблицы весят около 30М эдак никакой памяти не хватит

Otvet DA, no sovershenno neobiazatelno eto delat dlia vsey bazi. mogno ispolzovat alter session

ALTER SESSION SET HASH_AREA_SYZE=3000000... (skolko nado)
...
obrabotka
ALTER SESSION SET HASH_AREA_SYZE=( vernut obratno, poskolku zakon - za soboy nado podmetat )

3) у TEMP - UNIFORM SIZE 1024K
na moy vzglyad malovato. kak pravilo esli narvalsya na temp operacii - ne zaley resurcov (deshevle viydet)
I by ustanovil = 5..10* max(sort_area_size,hash_area_size)

4) 2 dba -- Это вы с optimizer_index_caching перепутали.
otimizer_index_cost_adj=1 говорит только о том, что стоимость индексного доступа составляет 1/100 от стоимости full table scan

soglasen lohanulsia

5) o vremeni vitolneniya 18 s -- 0.02 s
>>> Ещё интересно, что за железо у Um'а такое, что выборка ~990 тысяч строк проходит за 0,02 сек?

I ishodil is sleduyuschego:
-- soliyarka imeet 1GB pamiaty pri 30% bufferniy kesh te ~ 300MB
-- nastriyka razmerov holodnoy i goriachey polovin kesha ne provodilas (t.e. 50x50)
-- obshiy razmer viborky dlia 2 tbl ~ 30MB ili 20% holodnoy poloviny
rezultat => k momentu nachala vipolneniya 2-go zaprosa 100% blokov tablic uge sideli v holodnoy polovine
i vremia vitolneniya 0.02 smotritsia kak vpolne realnoe.

poka vse.
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32096282
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ShgGena
Код: plaintext
1.
2.
3.
4.
5.
И исходил из следующего:
 -- солярка имеет 1Гб памяти при 30% буферном кэше. Т.е. ~ 300MB 
 
 -- настройка размеров холодной и горячей половин кэша не проводилась (т.е. 50х50)
 
...


Имелся ввиду кэш операшки (=Соляриса) или Оракуловский?
Если соляркин, то можно ссылочку, как их настраивать?
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32096383
Фотография killed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если еще не слишком поздно к дискуссии...

1) >>подскажите как узнать max IO buffer для операций чтения с диска.

>dlia window - ne znau

на NTFS я подозреваю это будет размер кластера

>dlia solaris --> konfiguracionniy file /etc/system imya parametra => maxphys
(v principe ego mozno smelo uvelichvat do 1 MB (by default = 64K)
tolko on zadaetcya v baytah

опять же, это если raw devices. Для ufs если память не изменяет размер буфера 8К. ОС будет бить мультиблочные операции побуферно.

>Linux --> imia analogichoe, no i bi opasalsia davat razmer maxphys bolshe 256K

Интересно, где он прописывается под Линукс? Думаю, что без пересборки ядра тут не обойтись. Интересно также в чем опасения?

>5) o vremeni vitolneniya 18 s -- 0.02 s
>>> Ещё интересно, что за железо у Um'а такое, что выборка ~990 тысяч строк проходит за 0,02 сек?

>I ishodil is sleduyuschego:
>-- soliyarka imeet 1GB pamiaty pri 30% bufferniy kesh te ~ 300MB
>-- nastriyka razmerov holodnoy i goriachey polovin kesha ne provodilas (t.e. 50x50)

При FTS используется лишь несколько блоков (подозреваю, что db_file_mutliblock_read_count но не уверен) с холодного конца кэша, которые переиспользуются в течение операции. Иначе кэш будет сильно размываться.

>-- obshiy razmer viborky dlia 2 tbl ~ 30MB ili 20% holodnoy poloviny
rezultat => k momentu nachala vipolneniya 2-go zaprosa 100% blokov tablic uge sideli v holodnoy polovine
>i vremia vitolneniya 0.02 smotritsia kak vpolne realnoe.
Это скорее из-за /*+ FIRST_ROWS */ - время получения первой записи
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32096385
Фотография killed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Имелся ввиду кэш операшки (=Соляриса) или Оракуловский?
Если соляркин, то можно ссылочку, как их настраивать?

хм, я так понял, что речь шла про оракловый кэш. Если иначе - мои извинения.

Кое-что можно выцепить в статье Гаджи про рэйд на oradba.com.ru

Насколько я знаю, способа ограничить размер кэша файловой системы нет.
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32096404
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>>>При FTS используется лишь несколько блоков (подозреваю, что db_file_mutliblock_read_count но не уверен) с холодного конца кэша, которые переиспользуются в течение операции. Иначе кэш будет сильно размываться.

Для FTS используется не несколько блоков а ровно 20% хвоста холодной части кеша, но не менее 4 блоков.
В случае создания recycle db cache все блоки при FTP уедут туда если он имеет достаточный размер.

По настройке кеша. Я говорил об Oracle db cache .

>>> Насколько я знаю, способа ограничить размер кэша файловой системы нет.

Для Solaris начиная с 2.1 максимальный размер файлового кеша
устанавливается в килобайтах параметром:

set bufhwt=xxxxx в /etc/system (HWM для файлового кеша)

Кроме того можно установить размер страницы приращения кеша но не более HWT для него :

set p_nbpuf = xxx --> количество распределяемых буферов файлового кеша
set nbuf = xxx --> размер каждого буфера в байтах.

>>> Для ufs если память не изменяет размер буфера 8К. ОС будет бить мультиблочные операции побуферно.

Опять только для солярки --> баг № 433762 ??? (насколько помню) начиная с 7.2 ( или 7.3 не вспомню ...)
при установке параметра max_IO_size Oracle может использовать до 1МБ
для db_multiblock_read_count (те. 128 блоков при 8К блоке) при условии установки maxphys

Дополнительно если прменять Veritas VM то размер регулируется /etc/system :

set vxio:vol_maxio=xxx (количество блоков по 512 байт - сектор диска)
максимум (не уверен в этом) = также 1 МБ


>> Это скорее из-за /*+ FIRST_ROWS */ - время получения первой записи

если Um применял -->
set autotrace trace only
и
set timing on
для оценки времени выполнения,
то timing должен показать общее время выполнения а не время до получения первой записи
(при условии что время вывода записей на экран и время передачи данных по сетке не учитывается)

если он использовал секундомер - то время показывает все что угодно, но не выполнение запроса.
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32096438
Фотография killed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Для FTS используется не несколько блоков а ровно 20% хвоста холодной части кеша, но не менее 4 блоков.

Откуда эта информация? Ссылка есть?
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32096450
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая-то из статей на orapub.com примерно 2 года назад. Она описывала детати touch алгоритма работы с кешем и по формулам можно было просчитать размеры областей.
Найду у себя в папках сообщу (но не раньше понедельника - папки на работе).
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32096461
pauel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Um
1...
etot hint govorit sisteme primerno tak - "Voz'mi skol'ko hochesh resursov no verni pervij resul'tat pochti mngnovenno". Kstati, SQL vozvrachaet vam kolichestvo recordov, oboznachennoe as "kolichestvo vozvrachaemih recordov po umolchaniu", chto obichno=255. Tak chto vremja, na kotoroe vi opiraetes' - eto vremja vosvrata etih pervih recordov.

From Oracle:
"Uses the cost based optimizer to provide the best response time for OLTP processing. Processing the SQL statements using FIRST_ROWS is the best practice for databases that have large numbers of OLTP users. The hint will force the statement to return rows to the user as soon as possible. Returning some rows immediately allows a screen buffer to fill quickly and present the rows to the user.

It is usually better to set the OPTIMIZER_MODE = FIRST_ROWS in the INIT.ora rather than apply the hint to individual statements. Setting FIRST_ROWS will often use indexes even though a full table scan will return the entire set of records using significantly less disk reads. It will also use nested loops in preference to sort merges and hash joins.

SELECT /*+ FIRST_ROWS */ a.acct_name, t.trans_date, t.trans_amt
FROM trans t, acct a
WHERE a.acct_no = 27217
AND a.acct_no = t.acct_no;

The optimizer ignores the FIRST_ROWS hint in DELETE and UPDATE statements as well as SELECTs, the use of UNION, INTERSECT, MINUS, UNION ALL, GROUP BY, FOR UPDATE or DISTINCT."


2...
"Table full scan" - a nichego v etom strashnogo i net, dage naoborot - teorija i praktika DB glasit: "Use the index if less than 15% of the rows are returned"
Mogno konechno iznasilovat' DB, no zachem...
Krome togo - Oracle predpolagaet, chto mi ispol'zuem "Parallel processing" kotorij vozmogen tol'ko pri "Full table scan". Poetomu to optimazer i pereskakivaet na full table scan, pitajas' ispol'zovat' "default degree of parallelism set for table"

3...
>>Ни разу не видел, чтоб hash_join работал >>быстрее чем nested loops.
Ne vse tak odnoznachno, prosto vipolnjaemie zadachi rasnie. Kstati primer Um pokazivaet eto prosto zamechatel'no- variant 2: nested loops, cost zashkalivaet, a pervij record vistrelivaetsja clientu za 0.08 sec.

"This hint is used to force tables being joined to get one row from the driving table and then get the associated rows from the joined table using an index. Rows are returned to the user immediately, which makes the access method ideal for users running online screens. As each row being joined to is returned, an additional physical read is often required to obtain additional columns specified in the select. If more than 15% of the rows are returned, a merge join will usually return the entire set of data faster.

SELECT /*+ USE_NL(a b) */ a.acct_no, b trans_date, b.trans_amt
FROM trans b, accts a
WHERE a.acct_no = 19181
AND a.acct_no = b.acct_no;

QUERY_PLAN
-----------------------------------------------
NESTED LOOPS
INDEX RANGE SCAN ACCTS_U1
TABLE ACCESS BY INDEX ROWID TRANS
INDEX RANGE SCAN TRANS_NDX1"


to all:
Zamerit' obchee vremja vipolnenia zaprosa - delo ves'ma ne blogodarnoe:
ja v svoej practike ispol'zuju select count(*) from (SQL-pod-vaprosom);
Ne umno-tak ne genij ja.
in Um case:

*** SCRIPT START : ?? 26-Jan-2003 10:19:12 ***
Processing ...
select count(*) from
(SELECT NAME, orders.id_goods
FROM emp, orders
WHERE emp.ID = orders.id_emp AND emp.ID > 1000)

1 row(s) selected
COUNT(*)
----------
989991

0 row(s) retrieved

*** SCRIPT END : ??? 26-Jan-2003 10:19:47 ***

variant 2:
*** SCRIPT START : ?? 26-Jan-2003 10:17:18 ***
Processing ...
select count(*) from
(SELECT /*+ FIRST_ROWS */ NAME, orders.id_goods
FROM emp, orders
WHERE emp.ID = orders.id_emp AND emp.ID > 1000)
1 row(s) selected
COUNT(*)
----------
989991

0 row(s) retrieved

*** SCRIPT END : ?? 26-Jan-2003 10:17:52 ***


Eto ne daet absolutnogo vremenj ispolnenija, no posvaljaet sravnivat' rasnie varianti dostatochno tochno - "I think". No eto pokazivaet Um-u ego oshibku v ocenke vremeni zaprosa - "I hope"

Horoshaja tema mogla bi poluchit'ca - "Kak i chem zamerit' SQL" ... ?
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32096472
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL Navigator-ом попахивает, аднака Хотя тут уже дали самый кошерный ответ насчёт 2 команд sqlplus'а. Просто сравни планы выполнения "чистого" запроса и обёрнутого в select count(*) from (чистый запрос) - как при использовании такой методики можно делать ХОТЬ КАКОЙ-ТО вывод?
...
Рейтинг: 0 / 0
Вопрос про СВО.
    #32096474
pauel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Scott Tiger

- Prav ti s count(*), Glup, ispravljus'.
- da, vsem Quest Central vonjaet, pisaju ja parom ot etogo dela, leniv stal. Goda 3 kak SQL+ dage na mashine ne stoit, vot i glupeju.
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос про СВО.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]