powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / NewDensity vs OldDensity
7 сообщений из 7, страница 1 из 1
NewDensity vs OldDensity
    #39568063
avdu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Версия Oracle 11.2.0.4 SE1

Есть до безобразия простой запрос,

Код: sql
1.
select  /*+ gather_plan_statistics */ count(*) cnt from CONFIG_VALUE_NUMBER where value_number = 100138439 



План выполнения показывает:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
 ---------------------------------------------------------------------------------
| Id  | Operation        | Name                      | Starts | E-Rows | A-Rows |
---------------------------------------------------------------------------------
|   0 | SELECT STATEMENT |                           |      1 |        |      1 |
|   1 |  SORT AGGREGATE  |                           |      1 |      1 |      1 |
|*  2 |   INDEX SKIP SCAN| IDX01_CONFIG_VALUE_NUMBER |      1 |     21 |    135K|
---------------------------------------------------------------------------------



Налицо неразбериха в оптимизаторе, при этом 10053 показывает:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SINGLE TABLE ACCESS PATH                                                                       
  Single Table Cardinality Estimation for CONFIG_VALUE_NUMBER[CONFIG_VALUE_NUMBER]             
  Column (#3):                                                                                 
    NewDensity:0.000000, OldDensity:0.001362 BktCnt:254, PopBktCnt:79, PopValCnt:7, NDV:3199232
  Column (#3): VALUE_NUMBER(                                                                   
    AvgLen: 6 NDV: 3199232 Nulls: 1735707 Density: 0.000000 Min: -158 Max: 8174130000000000000 
    Histogram: HtBal  #Bkts: 254  UncompBkts: 254  EndPtVals: 183                              
  Table: CONFIG_VALUE_NUMBER  Alias: CONFIG_VALUE_NUMBER                                       
    Card: Original: 100406240.000000  Rounded: 21  Computed: 21.25  Non Adjusted: 21.25



И эта кардинальность получается, согласно http://www.adellera.it/blog/2009/10/16/cbo-newdensity-replaces-density-in-11g-10204-densities-part-iii/, для непопулярных значений, так: (кстати, для популярных значений расчеты вполне себе совпадают с жизнью).

NewDensity = [(BktCnt - PopBktCnt) / BktCnt] / (NDV - PopValCnt)
NewDensity =((254-79)/254)/(3199232-7) = 2.15357274950263E-7
E[card] = NewDensity * num_rows = 2.15357274950263E-7*100406240 = 21

Вот как то-так он считает, видимо, но реально там есть 135К, и это можно получить так:

E[card] = OldDensity * num_rows = 0.001362*100406240 = 136753

Вернуться обратно к использованию OldDensity можно вроде бы так

Код: sql
1.
alter session set  "_optimizer_enable_density_improvements"=false; 



Но! Не возвращается никак.

Почему?

И как это провернуть?
...
Рейтинг: 0 / 0
NewDensity vs OldDensity
    #39568169
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
avdu,

Это принципиально неправильный расчет cardinality для ISS - для него density вообще не нужен, а отталкиваться надо от NDV.
Bug 14648222 Incorrect cardinality estimate for INDEX SKIP SCAN - пофиксили в 12.1.0.2 и 12.2.0.1, для 11.2.0.3 и 11.2.0.4 есть патчики - качайте
...
Рейтинг: 0 / 0
NewDensity vs OldDensity
    #39568196
avdu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xtender,

Ага, поглядим, спасибо
...
Рейтинг: 0 / 0
NewDensity vs OldDensity
    #39568236
avdu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xtender,

Поглядел, патч на 11.2.0.4 есть только на 11.2.0.4.171017 Exadata Database. У нас, к сожалению, не Exadata.
Окончательно это исправлено только в 12.2.0.1, есть патчи на 12.1.0.2.

Увы.
...
Рейтинг: 0 / 0
NewDensity vs OldDensity
    #39568238
avdu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xtender,

а где почитать про cardinality estimate for INDEX SKIP SCAN? Есть источники?
...
Рейтинг: 0 / 0
NewDensity vs OldDensity
    #39568254
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
avdu,

да вырубите скип скан sql профилем или патчем. вообще есть у вас в базе хоть один полезный скип скан? Если - нет то вырубите его на базе параметром.
...
Рейтинг: 0 / 0
NewDensity vs OldDensity
    #39568752
avdu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xtenderavdu,

да вырубите скип скан sql профилем или патчем. вообще есть у вас в базе хоть один полезный скип скан? Если - нет то вырубите его на базе параметром.

Во первых также (20 вместо 135К), во вторых долго
Код: sql
1.
2.
3.
4.
5.
6.
7.
--------------------------------------------------------------------------------------
| Id  | Operation             | Name                      | Starts | E-Rows | A-Rows |
--------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |                           |      1 |        |      1 |
|   1 |  SORT AGGREGATE       |                           |      1 |      1 |      1 |
|*  2 |   INDEX FAST FULL SCAN| IDX01_CONFIG_VALUE_NUMBER |      1 |     20 |    135K|
--------------------------------------------------------------------------------------



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Outline Data                                                                                   
-------------                                                                                  
                                                                                               
  /*+                                                                                          
      BEGIN_OUTLINE_DATA                                                                       
      IGNORE_OPTIM_EMBEDDED_HINTS                                                              
      OPTIMIZER_FEATURES_ENABLE('11.2.0.4')                                                    
      DB_VERSION('11.2.0.4')                                                                   
      OPT_PARAM('_optimizer_skip_scan_enabled' 'false')                                        
      ALL_ROWS                                                                                 
      OUTLINE_LEAF(@"SEL$1")                                                                   
      INDEX_FFS(@"SEL$1" "CONFIG_VALUE_NUMBER"@"SEL$1" ("CONFIG_VALUE_NUMBER"."CONFIG_FIELD_ID"
              "CONFIG_VALUE_NUMBER"."VALUE_NUMBER"))                                           
      END_OUTLINE_DATA                                                                         
  */                                                                                           



Явно что-то заколдовано, индусы они те еще затейники в этом смысле.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / NewDensity vs OldDensity
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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