AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Администрирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.01.2009, 14:46   #1  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,913 / 5736 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Кстати - в продолжение давней дискуссии на которую тут ссылаются - нашел интересную статью по поводу того, как работать со статистикой при использовании FBI:
http://richardfoote.wordpress.com/20...-no-surprises/

Последний раз редактировалось fed; 09.01.2009 в 14:49.
За это сообщение автора поблагодарили: ZVV (1), Logger (4).
Старый 10.01.2009, 19:34   #2  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Сообщение от fed Посмотреть сообщение
Кстати - в продолжение давней дискуссии на которую тут ссылаются - нашел интересную статью по поводу того, как работать со статистикой при использовании FBI:
http://richardfoote.wordpress.com/20...-no-surprises/
А в чем суть поста? Не забывать использовать 'method_opt=> ‘FOR ALL HIDDEN COLUMNS SIZE 1′ в dbms_stats.gather_table_stats?

Согласен, но зачем вообще использовать dbms_stats.gather_table_stats, когда есть dbms_stats.gather_scheme_stats, которая прекрасно обновляет статистику по FBI:

X++:
Connected to:
Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options

demas@ORCL> create table pink_floyd(table_name varchar2(50));

Table created.

demas@ORCL> insert into pink_floyd values('one');

1 row created.

demas@ORCL> insert into pink_floyd values('One');

1 row created.

demas@ORCL> insert into pink_floyd values('ONE');

1 row created.

demas@ORCL> select * from pink_floyd;

TABLE_NAME
--------------------------------------------------
one
One
ONE

demas@ORCL> select column_name, num_distinct, hidden_column, virtual_column from dba_tab_cols where 
table_name='PINK_FLOYD';

COLUMN_NAME                    NUM_DISTINCT HID VIR
------------------------------ ------------ --- ---
TABLE_NAME                                  NO  NO
SYS_NC00002$                                YES YES


demas@ORCL> begin
  2  dbms_stats.gather_schema_stats(ownname=>'DEMAS',cascade=>TRUE);
  3  end;
  4  /

PL/SQL procedure successfully completed.

demas@ORCL>  select column_name, num_distinct, hidden_column, virtual_column from dba_tab_cols where
 table_name='PINK_FLOYD';

COLUMN_NAME                    NUM_DISTINCT HID VIR
------------------------------ ------------ --- ---
TABLE_NAME                                3 NO  NO
SYS_NC00002$                              1 YES YES
Старый 11.01.2009, 00:48   #3  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от Андре Посмотреть сообщение
А в чем суть поста? Не забывать использовать 'method_opt=> ‘FOR ALL HIDDEN COLUMNS SIZE 1′ в dbms_stats.gather_table_stats?

Согласен, но зачем вообще использовать dbms_stats.gather_table_stats, когда есть dbms_stats.gather_scheme_stats, которая прекрасно обновляет статистику по FBI:

.................
забыли создать индекс

Да нет, суть поста немножко не в этом, как я понял. Скорее в основном он в том, чтоб знать о том, что статистика на эти спрятанные колонки должна быть собрана. Ну и в том, что она не собирается автоматом когда вы создаёте индекс (FBI), а при этом создаётся только статистика на сам индекс.
В итоге, если вы хотите, чтоб оптимизатор нормально работал с новым индексом, то вам нужно дособрать статистику на "спрятанные" колонки.

А dbms_stats.gather_table_stats собирает статистику на эти колонки так же хорошо, как и dbms_stats.gather_scheme_stats - проверьте сами.
И в режиме for all columns и в режиме for all indexed columns.
И стандартный GATHER_STATS_JOB, кстати, тоже...
__________________
Zhirenkov Vitaly
За это сообщение автора поблагодарили: mazzy (2).
Старый 11.01.2009, 09:00   #4  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Сообщение от ZVV Посмотреть сообщение
забыли создать индекс
Не, создать не забыл, а вот в приведенный листинг не включил.

X++:
create index pf_i on pink_floyd(upper(table_name));
Если бы индекс не создал - вот этого не было бы:

X++:
demas@ORCL> select column_name, num_distinct, hidden_column, virtual_column from dba_tab_cols where 
table_name='PINK_FLOYD';

COLUMN_NAME                    NUM_DISTINCT HID VIR
------------------------------ ------------ --- ---
TABLE_NAME                                  NO  NO
SYS_NC00002$                                YES YES
Цитата:
Сообщение от ZVV Посмотреть сообщение
Да нет, суть поста немножко не в этом, как я понял. Скорее в основном он в том, чтоб знать о том, что статистика на эти спрятанные колонки должна быть собрана. Ну и в том, что она не собирается автоматом когда вы создаёте индекс (FBI), а при этом создаётся только статистика на сам индекс.
При создании индекса статистика не создается даже на индекс. Ее надо собрать.

Цитата:
Сообщение от ZVV Посмотреть сообщение
А dbms_stats.gather_table_stats собирает статистику на эти колонки так же хорошо, как и dbms_stats.gather_scheme_stats - проверьте сами.
Дык не в том вопрос. dbms_stats.gather_scheme_stats - стандартная периодическая операция выполняемая минимум раз в неделю. Почему именно scheme? Потому что мне лень все таблички перебирать

А если мы уже используем dbms_stats.gather_scheme_stats, то смысл в exec dbms_stats.gather_table_stats пропадает.
За это сообщение автора поблагодарили: mazzy (2).
Старый 11.01.2009, 13:38   #5  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от Андре Посмотреть сообщение
Не, создать не забыл, а вот в приведенный листинг не включил.
Это был оффтоп-юмор, именно что забыли включить в листинг, то что вы его реально создали и так понятно.

Цитата:
Сообщение от Андре Посмотреть сообщение
При создании индекса статистика не создается даже на индекс. Ее надо собрать.
А вот тут вы не правы! Цитата из ссылки:
Цитата:
However, and here comes the trap, when a function-based index is created, Oracle will now (since 10g) automatically calculate the statistics associated with the index...
Проверка:
Код:
>sqlplus scott/tiger@zvvdb

SQL*Plus: Release 11.1.0.6.0 - Production on Sun Jan 11 12:20:42 2009

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> set linesize 125
SQL> Drop Table Mytable
  2  /

Table dropped.

SQL> Create Table Mytable(A Varchar2(30))
  2  /

Table created.

SQL> Insert Into Mytable
  2     Select Object_name
  3       From All_objects
  4      Where Rownum < 11
  5  /

10 rows created.

SQL> Create Index Mytable_fbi On Mytable(Upper(A))
  2  /

Index created.

SQL> Create Index Mytable_ni On Mytable(A)
  2  /

Index created.

SQL> Select Table_name, Num_rows, Last_analyzed
  2    From User_tables
  3   Where Table_name = 'MYTABLE'
  4  /

TABLE_NAME                       NUM_ROWS LAST_ANA
------------------------------ ---------- --------
MYTABLE

SQL> Select Table_name, Column_name, Num_distinct
  2    From User_tab_cols
  3   Where Table_name = 'MYTABLE'
  4  /

TABLE_NAME                     COLUMN_NAME                    NUM_DISTINCT
------------------------------ ------------------------------ ------------
MYTABLE                        A
MYTABLE                        SYS_NC00002$

SQL> Select Table_name, index_name, distinct_keys, num_rows
  2    From User_indexes
  3   Where Table_name = 'MYTABLE'
  4  /

TABLE_NAME                     INDEX_NAME                     DISTINCT_KEYS   NUM_ROWS
------------------------------ ------------------------------ ------------- ----------
MYTABLE                        MYTABLE_NI                                10         10
MYTABLE                        MYTABLE_FBI                               10         10

SQL>
Так что, как видите, начиная с 10-ки статистика на индекс собирается автоматом, и именно об этом пишет автор в приведённой цитате. И именно в этом основной смысл статьи, что на индекс то статистика собралась, но надо не забыть и про hidden columns. До 10-ки действительно не собиралась статистика на индекс автоматом, если не указать compute statistics, и проблемы, соответсвенно, такой не было.
При этом, в документации Оракла есть такая фраза:
Цитата:
After creating a function-based index, collect statistics on both the index and its base table using the DBMS_STATS package. Such statistics will enable Oracle Database to
correctly decide when to use the index.
А по поводу этого:
Цитата:
Сообщение от Андре Посмотреть сообщение
Дык не в том вопрос. dbms_stats.gather_scheme_stats - стандартная периодическая операция выполняемая минимум раз в неделю. Почему именно scheme? Потому что мне лень все таблички перебирать

А если мы уже используем dbms_stats.gather_scheme_stats, то смысл в exec dbms_stats.gather_table_stats пропадает.
Да, это стандартная операция, но, возможно, вы захотите чтоб оптимизатор захотел использовать ваш новый индекс "по-максимуму" до того как запустится "развнедельная" операция. В этой ситуации вам dbms_stats.gather_table_stats очень даже поможет.

И не всё так однозначно с dbms_stats.gather_table/scheme_stats.
Начиная с 10-ки есть, конечно, джоб GATHER_STATS_JOB, который типа делает всё сам.
Но в 9-ке мне приходилось, например, делать сбор статистики по гораздо более сложной схеме, чем "dbms_stats.gather_scheme_stats раз в неделю", потому что на огромных объёмах схемы такая концепция становится крайне непродуктивной. Приходилось разделять как-то таблицы на группы и собирать статистику по частям, какие-то чаще, какие-то реже, ну и т.д.. В зависимости от структуры данных.
А лень таблички перебирать - это только до тех пор, пока полная статистика на схему не начинает день-другой пересобираться.
__________________
Zhirenkov Vitaly

Последний раз редактировалось ZVV; 11.01.2009 в 13:48. Причина: грамматика
За это сообщение автора поблагодарили: Андре (2).
Теги
ax3.0, oracle

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Установка Dynamics 4.0 под Oracle Paul_ST DAX: Администрирование 6 20.04.2007 16:36
aEremenko: История об установке Microsoft Dynamics Ax 4.0 и Oracle 10G Blog bot DAX Blogs 0 28.10.2006 16:01
переход существующего приложения c MS SQL на ORACLE velk DAX: Администрирование 22 27.07.2006 10:30
Знатокам Oracle listener DAX: Администрирование 1 23.01.2004 10:53
"On MSSQL" or "On Oracle" alpine DAX: Прочие вопросы 5 19.03.2002 11:38
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:44.