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

Откуда:
Сообщений: 629
Oracle 9.2.0.7
помогите понять
в документации Oracle про такой хинт что то не упоминается
попробывал поставить в запрос ничего не изменилось
OTIMIZER_MODE=CHOOSE

SELECT /*+ cardinality    (t 100) */
       t_double_rowid (t1.ROWID, t2.ROWID)
  FROM pa.p t2,
       pa.a t1,
       pa.p_to_a t3,
       TABLE (CAST (:1 AS ttabledoublerowid)) t
 WHERE t2.ID = t3.p_id
   AND t1.ID = t3.a_id
   AND t3.link_id = 202
   AND t2.ROWID = t.frowid
   AND t1.s_t_id IN (SELECT ID
                               FROM dicts.s_t
                              WHERE NAME = 'ШОССЕ')

в данном запросе просто неподетски рулит хинт /*+ RULE*/
запрос выполняется мгновенно
а /*+ CHOOSE*/
около 30 сек
CARDINALITY не помогает. хотя как мне кажется должно бы
19 окт 06, 17:42    [3284081]     Ответить | Цитировать Сообщить модератору
 Re: HINT CARDINALITY, правда или миф :-)  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6914
пробуйте больший диапазон 1- 100 000 и сравнивайте планы...
19 окт 06, 17:48    [3284132]     Ответить | Цитировать Сообщить модератору
 Re: HINT CARDINALITY, правда или миф :-)  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
alex-ls
пробуйте больший диапазон 1- 100 000 и сравнивайте планы...
Да и не очевидно, где проблема.. Планы - в студию
19 окт 06, 17:52    [3284154]     Ответить | Цитировать Сообщить модератору
 Re: HINT CARDINALITY, правда или миф :-)  [new]
NightGhost
Member

Откуда:
Сообщений: 629
orawish
Да и не очевидно, где проблема.. Планы - в студию

с нашим удовольствием
хотя вопрос был по поводу ХИНТА

SELECT T_DOUBLE_ROWID(T1.ROWID, T2.ROWID) 
FROM
 PASSPORT.PERSON T2, PASSPORT.ADDRESS T1, PASSPORT.PERSON_TO_ADDRESS T3, 
  TABLE(CAST(:B1 AS TTABLEDOUBLEROWID)) T WHERE T2.ID = T3.PERSON_ID AND 
  T1.ID = T3.ADDRESS_ID AND T3.LINK_ID=202 AND T2.ROWID = T.FROWID AND 
  T1.STREET_TYPE_ID IN (SELECT ID FROM DICTS.STREET_TYPE WHERE NAME = 'ШОССЕ')
  


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.01       0.00          0          0          0           0
Execute      1      0.02       0.02          0          0          0           0
Fetch        1     12.67      23.91      24097      28939          0           2
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        3     12.70      23.94      24097      28939          0           2

Misses in library cache during parse: 1
Misses in library cache during execute: 1
Optimizer goal: CHOOSE
Parsing user id: 77     (recursive depth: 1)

Rows     Row Source Operation
-------  ---------------------------------------------------
      2  HASH JOIN  (cr=28939 r=24097 w=75 time=23919522 us)
     99   COLLECTION ITERATOR PICKLER FETCH (cr=0 r=0 w=0 time=332 us)
   1929   HASH JOIN  (cr=28939 r=24097 w=75 time=23906523 us)
   1929    HASH JOIN  (cr=25657 r=24097 w=75 time=15714724 us)
  43372     HASH JOIN  (cr=9685 r=9251 w=0 time=8890876 us)
      1      TABLE ACCESS FULL STREET_TYPE (cr=7 r=0 w=0 time=212 us)
 518999      TABLE ACCESS FULL ADDRESS (cr=9678 r=9251 w=0 time=6561447 us)
  25047     TABLE ACCESS FULL PERSON_TO_ADDRESS (cr=15972 r=14771 w=0 time=6424060 us)
1503441    INDEX FAST FULL SCAN SYS_C004454 (cr=3282 r=0 w=0 time=2351272 us)(object id 34802)

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

SELECT /*+ RULE */ T_DOUBLE_ROWID (T1.ROWID, T2.ROWID) 
FROM
 PASSPORT.PERSON T2, PASSPORT.ADDRESS T1, PASSPORT.PERSON_TO_ADDRESS T3, 
  TABLE (CAST (:B1 AS TTABLEDOUBLEROWID)) T WHERE T2.ID = T3.PERSON_ID AND 
  T1.ID = T3.ADDRESS_ID AND T3.LINK_ID = 202 AND T2.ROWID = T.FROWID AND 
  T1.STREET_TYPE_ID IN (SELECT ID FROM DICTS.STREET_TYPE WHERE NAME = 'ШОССЕ')
  


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

Misses in library cache during parse: 1
Misses in library cache during execute: 1
Optimizer goal: RULE
Parsing user id: 77     (recursive depth: 1)

Rows     Row Source Operation
-------  ---------------------------------------------------
      2  NESTED LOOPS  (cr=413 r=0 w=0 time=5645 us)
      3   NESTED LOOPS  (cr=408 r=0 w=0 time=5573 us)
      3    NESTED LOOPS  (cr=397 r=0 w=0 time=5438 us)
     99     NESTED LOOPS  (cr=99 r=0 w=0 time=2316 us)
     99      COLLECTION ITERATOR PICKLER FETCH (cr=0 r=0 w=0 time=515 us)
     99      TABLE ACCESS BY USER ROWID PERSON (cr=99 r=0 w=0 time=1283 us)
      3     TABLE ACCESS BY INDEX ROWID PERSON_TO_ADDRESS (cr=298 r=0 w=0 time=2562 us)
     99      INDEX RANGE SCAN PERSON_TO_PERSON_PID (cr=200 r=0 w=0 time=1264 us)(object id 34977)
      3    TABLE ACCESS BY INDEX ROWID ADDRESS (cr=11 r=0 w=0 time=111 us)
      3     INDEX UNIQUE SCAN ADDRESS_PK (cr=8 r=0 w=0 time=72 us)(object id 35503)
      2   TABLE ACCESS BY INDEX ROWID STREET_TYPE (cr=5 r=0 w=0 time=47 us)
      3    INDEX UNIQUE SCAN SYS_C004369 (cr=2 r=0 w=0 time=19 us)(object id 34631)

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

SELECT /*+ cardinality(t 100)*/ T_DOUBLE_ROWID (T1.ROWID, T2.ROWID) 
FROM
 PASSPORT.PERSON T2, PASSPORT.ADDRESS T1, PASSPORT.PERSON_TO_ADDRESS T3, 
  TABLE (CAST (:B1 AS TTABLEDOUBLEROWID)) T WHERE T2.ID = T3.PERSON_ID AND 
  T1.ID = T3.ADDRESS_ID AND T3.LINK_ID = 202 AND T2.ROWID = T.FROWID AND 
  T1.STREET_TYPE_ID IN (SELECT ID FROM DICTS.STREET_TYPE WHERE NAME = 'ШОССЕ')
  


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.01       0.00          0          0          0           0
Execute      1      0.02       0.02          0          0          0           0
Fetch        1     12.60      22.16      24097      28939          0           2
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        3     12.63      22.18      24097      28939          0           2

Misses in library cache during parse: 1
Misses in library cache during execute: 1
Optimizer goal: CHOOSE
Parsing user id: 77     (recursive depth: 1)

Rows     Row Source Operation
-------  ---------------------------------------------------
      2  HASH JOIN  (cr=28939 r=24097 w=75 time=22159897 us)
     99   COLLECTION ITERATOR PICKLER FETCH (cr=0 r=0 w=0 time=326 us)
   1929   HASH JOIN  (cr=28939 r=24097 w=75 time=22147268 us)
   1929    HASH JOIN  (cr=25657 r=24097 w=75 time=14141069 us)
  43372     HASH JOIN  (cr=9685 r=9251 w=0 time=7793370 us)
      1      TABLE ACCESS FULL STREET_TYPE (cr=7 r=0 w=0 time=246 us)
 518999      TABLE ACCESS FULL ADDRESS (cr=9678 r=9251 w=0 time=5772783 us)
  25047     TABLE ACCESS FULL PERSON_TO_ADDRESS (cr=15972 r=14771 w=0 time=5938403 us)
1503441    INDEX FAST FULL SCAN SYS_C004454 (cr=3282 r=0 w=0 time=2314278 us)(object id 34802)
19 окт 06, 18:03    [3284233]     Ответить | Цитировать Сообщить модератору
 Re: HINT CARDINALITY, правда или миф :-)  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6914
NightGhost
orawish
Да и не очевидно, где проблема.. Планы - в студию

с нашим удовольствием
хотя вопрос был по поводу ХИНТА

в общем-то не вижу широкого диапазона CARDINALITY....
19 окт 06, 18:19    [3284325]     Ответить | Цитировать Сообщить модератору
 Re: HINT CARDINALITY, правда или миф :-)  [new]
yreek
Member

Откуда:
Сообщений: 47
попробуйте так
TABLE (CAST (:1 AS ttabledoublerowid)) t
на
(select /*+ CARDINALITY(1000) NO_MERGE*/* from TABLE (CAST (:1 AS ttabledoublerowid)) )t
19 окт 06, 18:22    [3284349]     Ответить | Цитировать Сообщить модератору
 Re: HINT CARDINALITY, правда или миф :-)  [new]
NightGhost
Member

Откуда:
Сообщений: 629
yreek
попробуйте так
TABLE (CAST (:1 AS ttabledoublerowid)) t
на
(select /*+ CARDINALITY(1000) NO_MERGE*/* from TABLE (CAST (:1 AS ttabledoublerowid)) )t


SELECT T_DOUBLE_ROWID (T1.ROWID, T2.ROWID) 
FROM
 PASSPORT.PERSON T2, PASSPORT.ADDRESS T1, PASSPORT.PERSON_TO_ADDRESS T3, 
  (SELECT /*+ CARDINALITY(1000) NO_MERGE*/* FROM TABLE (CAST (:B1 AS 
  TTABLEDOUBLEROWID)) )T WHERE T2.ID = T3.PERSON_ID AND T1.ID = T3.ADDRESS_ID 
  AND T3.LINK_ID = 202 AND T2.ROWID = T.FROWID AND T1.STREET_TYPE_ID IN 
  (SELECT ID FROM DICTS.STREET_TYPE WHERE NAME = 'ШОССЕ')


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.02       0.02          0         80          0           0
Fetch        1     12.51      18.71      17011      28939          0           2
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        3     12.53      18.74      17011      29019          0           2

Misses in library cache during parse: 1
Misses in library cache during execute: 1
Optimizer goal: CHOOSE
Parsing user id: 77     (recursive depth: 1)

Rows     Row Source Operation
-------  ---------------------------------------------------
      2  HASH JOIN  (cr=28939 r=17011 w=75 time=18714525 us)
     99   VIEW  (cr=0 r=0 w=0 time=740 us)
     99    COLLECTION ITERATOR PICKLER FETCH (cr=0 r=0 w=0 time=359 us)
   1929   HASH JOIN  (cr=28939 r=17011 w=75 time=18700340 us)
   1929    HASH JOIN  (cr=25657 r=17011 w=75 time=9446176 us)
  43372     HASH JOIN  (cr=9685 r=1007 w=0 time=3489224 us)
      1      TABLE ACCESS FULL STREET_TYPE (cr=7 r=0 w=0 time=184 us)
 518999      TABLE ACCESS FULL ADDRESS (cr=9678 r=1007 w=0 time=1285208 us)
  25047     TABLE ACCESS FULL PERSON_TO_ADDRESS (cr=15972 r=15929 w=0 time=5548106 us)
1503441    INDEX FAST FULL SCAN SYS_C004454 (cr=3282 r=0 w=0 time=2671788 us)(object id 34802)

тоесть по сути ничего не изменилось
хотя выполяется чуть побыстрее но до RULE еще как до луны :-)
19 окт 06, 18:31    [3284404]     Ответить | Цитировать Сообщить модератору
 Re: HINT CARDINALITY, правда или миф :-)  [new]
Mikst
Member

Откуда: Москва
Сообщений: 983
NightGhost

SELECT /*+ cardinality(t 100)*/ T_DOUBLE_ROWID (T1.ROWID, T2.ROWID)

[/src]


попробуйте всетаки cardinality 1
19 окт 06, 18:32    [3284412]     Ответить | Цитировать Сообщить модератору
 Re: HINT CARDINALITY, правда или миф :-)  [new]
Timm
Member

Откуда: Moscow, Ё-burg
Сообщений: 3696
Потому что хинт неправильный.
SELECT T_DOUBLE_ROWID (T1.ROWID, T2.ROWID) 
FROM
 PASSPORT.PERSON T2, PASSPORT.ADDRESS T1, PASSPORT.PERSON_TO_ADDRESS T3, 
  (SELECT /*+ CARDINALITY(ttt 0) */* FROM TABLE (CAST (:B1 AS 
  TTABLEDOUBLEROWID)) ttt )T WHERE T2.ID = T3.PERSON_ID AND T1.ID = T3.ADDRESS_ID 
  AND T3.LINK_ID = 202 AND T2.ROWID = T.FROWID AND T1.STREET_TYPE_ID IN 
  (SELECT ID FROM DICTS.STREET_TYPE WHERE NAME = 'ШОССЕ')
19 окт 06, 18:43    [3284460]     Ответить | Цитировать Сообщить модератору
 Re: HINT CARDINALITY, правда или миф :-)  [new]
NightGhost
Member

Откуда:
Сообщений: 629
Timm
Потому что хинт неправильный.
SELECT T_DOUBLE_ROWID (T1.ROWID, T2.ROWID) 
FROM
 PASSPORT.PERSON T2, PASSPORT.ADDRESS T1, PASSPORT.PERSON_TO_ADDRESS T3, 
  (SELECT /*+ CARDINALITY(ttt 0) */* FROM TABLE (CAST (:B1 AS 
  TTABLEDOUBLEROWID)) ttt )T WHERE T2.ID = T3.PERSON_ID AND T1.ID = T3.ADDRESS_ID 
  AND T3.LINK_ID = 202 AND T2.ROWID = T.FROWID AND T1.STREET_TYPE_ID IN 
  (SELECT ID FROM DICTS.STREET_TYPE WHERE NAME = 'ШОССЕ')


сенкс реально помогло
собственно вопрос то был в том почему ХИН CARDINALITY не
описан в документации да и в книге
'Oracle 9i отимизация производительности' Ричард ДЖ. Нимик
19 окт 06, 19:01    [3284532]     Ответить | Цитировать Сообщить модератору
 Re: HINT CARDINALITY, правда или миф :-)  [new]
NightGhost
Member

Откуда:
Сообщений: 629
NightGhost

сенкс реально помогло


собственно не то чтобы помогло но план изменился :-)
хотя в плане все еще присутствует
FULL TABLE SCAN
19 окт 06, 19:02    [3284536]     Ответить | Цитировать Сообщить модератору
 Re: HINT CARDINALITY, правда или миф :-)  [new]
Timm
Member

Откуда: Moscow, Ё-burg
Сообщений: 3696
NightGhost
Timm
Потому что хинт неправильный.
SELECT T_DOUBLE_ROWID (T1.ROWID, T2.ROWID) 
FROM
 PASSPORT.PERSON T2, PASSPORT.ADDRESS T1, PASSPORT.PERSON_TO_ADDRESS T3, 
  (SELECT /*+ CARDINALITY(ttt 0) */* FROM TABLE (CAST (:B1 AS 
  TTABLEDOUBLEROWID)) ttt )T WHERE T2.ID = T3.PERSON_ID AND T1.ID = T3.ADDRESS_ID 
  AND T3.LINK_ID = 202 AND T2.ROWID = T.FROWID AND T1.STREET_TYPE_ID IN 
  (SELECT ID FROM DICTS.STREET_TYPE WHERE NAME = 'ШОССЕ')


сенкс реально помогло
собственно вопрос то был в том почему ХИН CARDINALITY не
описан в документации да и в книге
'Oracle 9i отимизация производительности' Ричард ДЖ. Нимик

Про книгу хз, не четал :)
А про доку - Кайт вроде говорил, что это какое то недоразумение :))
19 окт 06, 19:10    [3284563]     Ответить | Цитировать Сообщить модератору
 Re: HINT CARDINALITY, правда или миф :-)  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18370
NightGhost
сенкс реально помогло

Каждому шаману - в бубен!
Прицепились, понимаешь, к несчастному cardinality, хотя дело совсем не в бобине....
19 окт 06, 20:42    [3284786]     Ответить | Цитировать Сообщить модератору
 Re: странный Connect by в 9.2.0.7  [new]
yreek
Member

Откуда:
Сообщений: 47
20 окт 06, 09:37    [3285688]     Ответить | Цитировать Сообщить модератору
 Re: HINT CARDINALITY, правда или миф :-)  [new]
yreek
Member

Откуда:
Сообщений: 47
(select /*+ CARDINALITY(100) NO_MERGE*/* from TABLE (CAST (:1 AS ttabledoublerowid)) )t
попробуйте уменьшить до 100, по трейсу видно что у вас там было 99 строк. Можно попробовать сделать еще меньше.
20 окт 06, 09:39    [3285705]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить