Oracle 10g запрашивает очень медленно, а загрузка процессора очень высока после применения патча

Поэтому я недавно обновил базу данных Oracle 10g с 10.2.0.3.0 до 10.2.0.4.0 в соответствии с рекомендациями службы поддержки Oracle из-за проблем со стабильностью (известная проблема в некоторых системах, когда экземпляр случайно зависал при высокой нагрузке).

После применения исправления проблемы со стабильностью исчезли, но запросы стали НАМНОГО медленнее, потому что в таблицах постоянно ПОЛНЫЙ СКАНЕР, хотя я пересчитал статистику для всех таблиц во всех схемах, и индексы, видимо, в порядке. Я также установил предыдущую версию оптимизатора (об этом также сообщала служба поддержки Oracle), но пока она не улучшилась.

Есть идеи по этому поводу?

2 ответа

Решение

Наконец, похоже, что проблема была вызвана плохо оптимизированным SQL. Также кажется, что экземпляр выполнял только полное сканирование только тогда, когда их стоимость была ниже стоимости сканирования индекса, так что все, видимо, в порядке.

Я запускаю следующий sql, чтобы запланировать задание для запуска статистики на устаревших таблицах каждые 2 часа. Это предотвращает сбой многих запросов sql в 10g и 11g. Если в таблице не было изменено более 10% строк, выполнение статистики будет пропущено до тех пор, пока не будет изменено 10% или более строк.

-- YOu must commit when you are finished to add the line to sys.job$/dba_jobs
-- You must run this as sys to get the jobs to run as sys to get the correct path to run the job
variable jobno number;
variable instno number;
begin
  select max(job)+1 into :jobno from dba_jobs;
  select instance_number into :instno from v$instance;
  dbms_job.submit(:jobno,
'dbms_stats.gather_database_stats(options=>''gather stale'',estimate_percent=>100,degree=>4,cascade=>true);',
trunc(sysdate)+15/24, 'sysdate+2/24',
 TRUE, :instno);
end;
/
commit;
Другие вопросы по тегам