Хочется обратить внимание коллег, что по крайней мере все мои инсталяции SAP собирают статистику
некорректно.(буду рад услышать, что в новых версиях все исправили и все работает, если кто знает - поделитесь знанием).
На данный момент на сайте саппорта САП появились уже патчи для 10g, это значит что есть и инсталяции на 10g. А в 10g вообще не поддерживается Rule Based Optimizer, а есть только Cost Based Optimizer, которому нужна статистика как хлеб.
Так вот. Все эти analyze table и analyze index, которые активно использует SAP
не собирают статистику для оптимизатора:
Цитата:
Oracle Corporation strongly recommends that you use the DBMS_STATS package rather than ANALYZE to collect optimizer statistics. That package lets you collect statistics in parallel, collect global statistics for partitioned objects, and fine tune your statistics collection in other ways. Further, the cost-based optimizer, which depends upon statistics, will eventually use only statistics that have been collected by DBMS_STATS. See Oracle9i Supplied PL/SQL Packages and Types Reference for more information on this package.
However, you must use the ANALYZE statement (rather than DBMS_STATS) for statistics collection not related to the cost-based optimizer, such as:
* To use the VALIDATE or LIST CHAINED ROWS clauses
* To collect information on freelist blocks
Итак, задача - использовать DBMS_STATS для сбора статистики.
Тут есть проблема. Статистика собирается
очень долго.
Что надо сделать, чтобы дать серверу умереть?
1. Так или иначе необходимо сделать полный сбор статистики схемы в первый раз функцией GATHER_SCHEMA_STATS.
2. Включить мониторинг таблиц схемы функцией ALTER_SCHEMA_TABLE_MONITORING пакета DBMS_STATS. При этом Oracle будет учитывать количество изменений(update/insert/delete) для таблиц схемы
3. В дальнейшем собирать статистику с опцией GATHER STALE. Это позволит пересобирать статистику только для таблиц, в которых количество изменений больше чем 10% от кол-ва строк
На данный момент у меня время сбора статистики на базах размером около 260Гб занимает от 2 до 10 минут.
Только заклинаю, применять это плавно и осторожно. Возможно сначала собирая статистику только по проблемным таблицам, а не сразу схемы. Я лично не использовал в сборе статистики гистограммы, ибо SAP не делает ни одного запроса без связанных переменных.
Если что-то начнет работать криво - можно удалить статистику функциями DELETE_XXX_STATS того же пакета.
Буду рад, если эта информация кому-нибудь поможет. Хотя вероятно большинство из местных админов так или иначе с этим сталкивались, и это всё уже знает.