powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Неправильная оценка E-Rows. Когда оптимизатор использует статистику?
11 сообщений из 11, страница 1 из 1
Неправильная оценка E-Rows. Когда оптимизатор использует статистику?
    #39462393
Добрый день,
не могу понять, объясните пожалуйста следующее, есть табличка по которой собрана статистика, в ней всего одно поле.
Почему в 3-й строке плана E-Rows показывает неправильное (старое) значение?
Может дело в том что план адаптивный?
В какой момент оптимизатор использует статистику? При каждом выполнении или только в момент первого разбора?
Я запутался, помогите пожалуйста )

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
select num_rows, last_analyzed from user_tab_statistics where table_name = 'TEST_OUT' ;
  NUM_ROWS LAST_ANALYZED
---------- -------------
     40008 30-МАЙ-17    
1 row selected.

select num_rows, last_analyzed from user_tables where table_name = 'TEST_OUT' ;
  NUM_ROWS LAST_ANALYZED
---------- -------------
     40008 30-МАЙ-17

select /*+ gather_plan_statistics */ t.*
from t join test_out o on o.id = t.object_id;

SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR( format =>'ALLSTATS LAST'));

SQL_ID  9rsj7ng96tyzs, child number 0
-------------------------------------
select /*+ gather_plan_statistics */ t.* from t join test_out o on o.id 
= t.object_id
 
Plan hash value: 430525702
 
------------------------------------------------------------------------------------------------------------
| Id  | Operation                    | Name     | Starts | E-Rows | A-Rows |   A-Time   | Buffers | Reads  |
------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |          |      1 |        |  32272 |00:00:00.14 |    2394 |    179 |
|   1 |  NESTED LOOPS                |          |      1 |      1 |  32272 |00:00:00.14 |    2394 |    179 |
|   2 |   NESTED LOOPS               |          |      1 |     11 |  32272 |00:00:00.04 |    1280 |     22 |
|   3 |    TABLE ACCESS STORAGE FULL | TEST_OUT |      1 |     11 |  39994 |00:00:00.01 |     100 |     22 |
|*  4 |    INDEX RANGE SCAN          | T_IND    |  39994 |      1 |  32272 |00:00:00.03 |    1180 |      0 |
|   5 |   TABLE ACCESS BY INDEX ROWID| T        |  32272 |      1 |  32272 |00:00:00.07 |    1114 |    157 |
------------------------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   4 - access("O"."ID"="T"."OBJECT_ID")
 
Note
-----
   - this is an adaptive plan
 
...
Рейтинг: 0 / 0
Неправильная оценка E-Rows. Когда оптимизатор использует статистику?
    #39462428
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
очень хочу знать,

Теперь покажи с минутами и секундами LAST_ANALYZED, а также
last_active_time, last_load_time, first_load_time из v$sql для твоего sql_id.
...
Рейтинг: 0 / 0
Неправильная оценка E-Rows. Когда оптимизатор использует статистику?
    #39462455
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
select num_rows, to_char(last_analyzed, 'yyyy-mm-dd hh24:mi:ss') as lasst_analyzed from user_tab_statistics where table_name = 'TEST_OUT' ;

  NUM_ROWS LAST_ANALYZED               
---------- ----------------------------
     39994 2017-05-30 12:42:06         
1 row selected.


column sql_text format a50
column last_active_time format a20
column first_load_time format a20
column last_load_time format a20
select sql_text, last_active_time,  first_load_time, last_load_time
from v$sql where sql_id = '9rsj7ng96tyzs' ;


SQL_TEXT                                           LAST_ACTIVE_TIME     FIRST_LOAD_TIME      LAST_LOAD_TIME      
-------------------------------------------------- -------------------- -------------------- --------------------
select /*+ gather_plan_statistics */ t.* from t jo                      2017-05-29/13:04:37  2017-05-30/07:51:26 
in test_out o on o.id = t.object_id                                                                              
                                                                                                                                                                
1 row selected.
...
Рейтинг: 0 / 0
Неправильная оценка E-Rows. Когда оптимизатор использует статистику?
    #39462470
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
очень хочу знать,

Пробел добавь где-нибудь в запросе и запусти
...
Рейтинг: 0 / 0
Неправильная оценка E-Rows. Когда оптимизатор использует статистику?
    #39462490
С пробелом всё понятно и прогнозируемо, sql_id поменялся, соответственно новый план уже с hash join и статистика актуальна. Это понятно.
Я вот больше запутался когда оптимизатор использует статистику - то есть есть у нас запрос, он выполнился первый раз, распарсился, построился план. Потом в течении дня добавили много строк и обновили статистику. И вот тут вопрос, когда оптимизатор решает на основании этой новой статистики построить новый план?
Я всегда думал что присутствие актуальной статистики позволяет оптимизатору рассмотреть новый план даже не смотря то что есть уже в library cash разобранный план для этого курсора. Но я похоже ошибаюсь?
...
Рейтинг: 0 / 0
Неправильная оценка E-Rows. Когда оптимизатор использует статистику?
    #39462496
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
очень хочу знать,

Если для простоты отбросить в сторону адаптивные планы, то не так сложно понять, что для построение нового плана должен быть hard parse.
Будет ли он выполнен при первом же разборе после сбора статистики определяется значением параметра no_invalidate.

Похоже у тебя нет понимания чем hard отличается от soft.
...
Рейтинг: 0 / 0
Неправильная оценка E-Rows. Когда оптимизатор использует статистику?
    #39462519
В целом наверное да, нету чёткого понимания, но приблизительное какое-никакое есть.
Из документации я понимаю что hard parse осуществляется каждый раз при отсутствии заданного оператора в cash или при различии среды -Even if two statements are semantically identical, an environmental difference can force a hard parse.
То есть существенное изменение статистики не является изменением этого самого environment ?


Но это не отменяет вопрос про E-Rows - получается что в этом поле показывается оценочная кардинальность, которая основывается не на текущей статистике а на статистике в момент hard parse ?
...
Рейтинг: 0 / 0
Неправильная оценка E-Rows. Когда оптимизатор использует статистику?
    #39462526
Хотя всё, вроде понял. Спасибо dbms_photoshop за no_invalidate
...
Рейтинг: 0 / 0
Неправильная оценка E-Rows. Когда оптимизатор использует статистику?
    #39462543
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
очень хочу знатьоператора в cashОператора в наличке?
очень хочу знатьТо есть существенное изменение статистики не является изменением этого самого environment ?Ты мой ответ про no_invalidate читал вообще??

Параметры optimizer env смотри в v$sql_optimizer_env? Что-то изменилось при сборе статистики? Нет.

Причины по которым CBO может решит сделать hard parse смотри в v$sql_shared_cursor.

очень хочу знатьНо это не отменяет вопрос про E-Rows - получается что в этом поле показывается оценочная кардинальность, которая основывается не на текущей статистике а на статистике в момент hard parse ?Внезапно, да?
...
Рейтинг: 0 / 0
Неправильная оценка E-Rows. Когда оптимизатор использует статистику?
    #39462580
не понимаю агрессии-сарказма. Я же написал что всё стало более-менее понятно и главное стало понятно куда смотреть.
Можно же просто объяснить это было, для этого вопрос и задается, что откуда берется, не все ж знают наизусть всю документацию и системные view. Читать это хорошо, но всё ж не прочитаешь - потому и вопросы чтоб направили в нужное русло.
Чего все такие нервные.
...
Рейтинг: 0 / 0
Неправильная оценка E-Rows. Когда оптимизатор использует статистику?
    #39462588
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
очень хочу знатьЧего все такие нервные.Жить в эпоху свершений, имея возвышенный нрав, к сожалению, трудно. (с)

А вообще держись там, хорошего настроения и здоровья. Без сарказма.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Неправильная оценка E-Rows. Когда оптимизатор использует статистику?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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