Oracle настройка / анализ таблиц - PullRequest
2 голосов
/ 26 ноября 2009

Какие есть средства для составления расписания автоматического «анализа таблиц». Можно ли запросить автоматический «анализ таблиц», когда много данных изменяется через вставку и удаление? Каковы средства для параметризации процесса автоматического анализа таблиц, то есть для установки правил, когда он должен быть запущен.

Ответы [ 2 ]

5 голосов
/ 26 ноября 2009

Какую версию Oracle вы используете? Начиная с 10.1, Oracle поставляется с автоматическим заданием, которое каждую ночь собирает статистику по любому объекту, который был существенно изменен (на основе внутреннего алгоритма, который может быть изменен, но я считаю, что порог составляет ~ 15%) с тех пор, как в последний раз статистика была собрались. Если вы используете поддерживаемый в настоящее время выпуск, статистика собирается автоматически по умолчанию, если вы явно не отключили это задание.

Вы можете использовать пакет DBMS_STATS для сбора статистики по объекту на основе события, и вы можете использовать пакет DBMS_JOB (или DBMS_SCHEDULER), чтобы сделать это асинхронно. Таким образом, в конце процесса ETL вы можете собрать статистику

BEGIN
  dbms_stats.gather_table_stats( 
    ownname => <<schema name>>,
    tabname => <<table name>> 
  );
END;

Вы можете запустить его асинхронно

DECLARE
  l_jobno INTEGER;
BEGIN
  dbms_job.submit(
    l_jobno,
    'BEGIN dbms_stats.gather_table_stats( ''<<schema name>>'', ''<<table name>>'' ); END;',
    sysdate + interval '1' minute
  );
END;
2 голосов
/ 26 ноября 2009

«Есть ли способ запустить эту работу, когда значительная часть данных была изменена?» Теоретически вы можете выполнить триггер AFTER INSERT для таблицы, которая автоматически устанавливает DBMS_STATS.

Но будьте осторожны с тем, что вы хотите. Если вы находитесь в середине большого задания ETL, только что вставив в таблицу миллион строк, вам не обязательно автоматически запускать задание DBMS_STATS. Точно так же, когда вы находитесь в самое загруженное время онлайн-обработки (например, обед), вы не хотите замедлять его, собирая статистику одновременно.

Обычно вы хотите, чтобы эта статистика собирала задания, выполняемые в периоды низкой нагрузки (ночи, выходные). Если у вас большой пакетный прогон, который загружается во множество таблиц, я бы встроил в пакет DBMS_STATS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...