Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
altuns Участник
Вступление в Клуб: 30.12.2011
|
Пт Янв 13, 2012 12:56  Увеличение числа разборов после перехода на Oracle 11g |
|
Полезность: Нет оценки
|
Здравствуйте!
Перешли на Oracle 11g и сразу после перехода столкнулись с одной проблемой: очень сильно увеличилось число разборов.
В 10-ке параметр "Execute to Parse %" был порядка 99%, после перехода на 11g он упал до 80%. После flush shared_pool переразборов не происходит до тех пор, пока shared pool не заполнится. Не помогло увеличение shared pool почти в 2 раза по сравнению с 10-й.
Кто-нибудь еще столкнулся с такой проблемой? Нашли какое-нибудь решение?
Заранее спасибо за информацию! |
|
 |
Serj Профи
Вступление в Клуб: 02.08.2007
|
Пт Янв 13, 2012 13:00   |
|
Полезность: Нет оценки
|
гм, hard parse или soft parse ? Потестируйте
_optimizer_use_feedback = false |
|
 |
altuns Участник
Вступление в Клуб: 30.12.2011
|
Пт Янв 13, 2012 13:38   |
|
Полезность: Нет оценки
|
Уже пробовал. Не помогает.
Soft parses |
|
 |
Serj Профи
Вступление в Клуб: 02.08.2007
|
Сб Янв 14, 2012 06:15   |
|
Полезность: Нет оценки
|
cursor_sharing - чему равен?
У нас на 11.2.0.3 примерно как и было (на 10G - 98.7) тут чуть меньше
Execute to Parse %: 97.85
Еще вот это по-тестите - помогает несколько снизить количество частичных раборов
_OPTIM_PEEK_USER_BINDS=false
_OPTIMIZER_EXTENDED_CURSOR_SHARING_REL = NONE |
|
 |
altuns Участник
Вступление в Клуб: 30.12.2011
|
Пн Янв 16, 2012 11:14   |
|
Полезность: Нет оценки
|
Это я тоже пробовал. Перешли уже 3 месяца назад и за это время я успел перепробовать много всего. Нельзя сказать, что работать просто невозможно, но база все равно здорово притормаживает из-за этого. А на какой платформе работаете вы? Мы на AIX 5.3 |
|
 |
Serj Профи
Вступление в Клуб: 02.08.2007
|
Пн Янв 16, 2012 12:06   |
|
Полезность: Нет оценки
|
Solaris 10/09 SPARC, думаю причина софт парсинга кроется не в платформе - что то заставляет СВО активно парсить запросы - софт парсинг происходит когда многократно используется уже разобранный (распарсенный) курсор, по идее cursor_sharing все таки должен влиять на это у меня выставлено
cursor_sharing=force
_optimizer_use_feedback = false
_OPTIM_PEEK_USER_BINDS=false
_OPTIMIZER_EXTENDED_CURSOR_SHARING_REL = NONE |
|
 |
altuns Участник
Вступление в Клуб: 30.12.2011
|
Пн Янв 16, 2012 13:11   |
|
Полезность: Нет оценки
|
Спасибо!
И так тоже пробовал, еще раз проверил, не помогает....(( |
|
 |
Serj Профи
Вступление в Клуб: 02.08.2007
|
|
 |
altuns Участник
Вступление в Клуб: 30.12.2011
|
Вт Янв 17, 2012 11:16   |
|
Полезность: Нет оценки
|
Каждую ночь, в 4:00, на уровне операционной системы, запускается shell-скрипт, который запускает следующие процедуры:
EXEC dbms_stats.gather_schema_stats('IBS',Degree=>4,Cascade=>true,method_opt=>'FOR ALL COLUMNS SIZE 1');
EXEC DBMS_STATS.GATHER_DICTIONARY_STATS(degree=>4);
EXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS(NULL);
На сбор статистики уходит менее 4-х часов.
На уровне Oracle Scheduler GATHER_STATS_JOB в состоянии DISABLE. Т.е. статистику статистику собирает только shell-скрипт.
Спасибо за ссылку! Проработаю этот вариант. |
|
 |
Serj Профи
Вступление в Клуб: 02.08.2007
|
Вт Янв 17, 2012 11:35   |
|
Полезность: Нет оценки
|
altuns пишет: | Каждую ночь, в 4:00, на уровне операционной системы, запускается shell-скрипт, который запускает следующие процедуры:
EXEC dbms_stats.gather_schema_stats('IBS',Degree=>4,Cascade=>true,method_opt=>'FOR ALL COLUMNS SIZE 1');
EXEC DBMS_STATS.GATHER_DICTIONARY_STATS(degree=>4);
EXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS(NULL);
На сбор статистики уходит менее 4-х часов.
На уровне Oracle Scheduler GATHER_STATS_JOB в состоянии DISABLE. Т.е. статистику статистику собирает только shell-скрипт.
Спасибо за ссылку! Проработаю этот вариант. |
EXEC DBMS_STATS.GATHER_DICTIONARY_STATS(degree=>4);
EXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS(NULL); - это лишнее, единожды собранная статистика по словарю будет самодостаточной. У вас скольки ядерный сервер ? По-пробуйте поставить degree=кол-во ядер/2 , по крайней мере для SPARC 64 VII такой подход у нас позволил собирать статистику по схеме IBS за 1:10 , размер MAIN_DOCUM в Гб
Код: | select blocks*8/1024/1024 from all_tables where table_name='Z#MAIN_DOCUM';
BLOCKS*8/1024/1024
------------------
10.0651398
| - сама база занимает 210 Гб. Еще можно попробовать чистить shared_pool после окончания сбора статистики, при излишне раздутом пуле помогает избавится от тормозов - было такое на 10-ке когда использовали AMM, потом отказались - shared_pool слишком раздувается. [/quote] |
|
 |
altuns Участник
Вступление в Клуб: 30.12.2011
|
Ср Янв 18, 2012 06:08   |
|
Полезность: Нет оценки
|
У нас 8 ядер, так что мы как раз и используем половину. Но база более чем в два раза больше вашей. У нас только схема IBS весит 214GB.
Гистограмм в схеме IBS нет. BIND PEEKING в любом случае отключен.
Все-таки у меня есть подозрение, что дело в платформе. На Metalink есть пару слов об этом, не знаю мой ли это случай, но ни Workaround, ни bugfix нет. Пробую развернуть ИБСО на SPARC и посмотреть, повторится ли проблема там. |
|
 |
altuns Участник
Вступление в Клуб: 30.12.2011
|
Ср Янв 18, 2012 06:42   |
|
Полезность: Нет оценки
|
Моя теория не подтвердилась, но зато смотрите, что получается.
Тестовая площадка: Сервер SPARC Solaris 10/09. Есть две базы 10.2.0.4, 11.2.0.2. Обе базы – копии рабочей IBSO за разные периоды времени. Настройки памяти абсолютно одинаковые.
С боевой базы я выловил SQL statements, у которого executes примерно равно parse_calls. Таких выражений достаточно много.
SELECT TO_CHAR(NVL(A2.C_NE_SUMM,0)) FROM Z#DOC_TO_OFF A2, Z#DOC_CARD_INDEX A1 WHERE A1.C_DOCS_OFF=A2.COLLECTION_ID AND (A2.C_MAIN_DOC = :B1 )
Написал PL/SQL программу и прогнал ее на обеих базах:
declare
i number;
stmt constant varchar2(200) := 'SELECT TO_CHAR(NVL(A2.C_NE_SUMM,0)) FROM Z#DOC_TO_OFF A2, Z#DOC_CARD_INDEX A1 WHERE A1.C_DOCS_OFF=A2.COLLECTION_ID AND (A2.C_MAIN_DOC = :B1 )';
begin
for i in 1..10000 loop
execute immediate stmt using 172530243;
execute immediate stmt using 172530244;
execute immediate stmt using 172530245;
execute immediate stmt using 172530246;
execute immediate stmt using 172530247;
execute immediate stmt using 172530248;
execute immediate stmt using 172530249;
execute immediate stmt using 172530250;
end loop;
end;
/
Результаты следующие
10g:
Executions=80000
Parse_calls=19
11g:
Executions=80000
Parse_calls=80000 |
|
 |
Serj Профи
Вступление в Клуб: 02.08.2007
|
Ср Янв 18, 2012 09:09   |
|
Полезность: Нет оценки
|
Как вариант брать часто парсимые запросы, пробовать привязать к ним планы через baseline обязательно- fixed=YES, уж это точно должно помочь. |
|
 |
Serj Профи
Вступление в Клуб: 02.08.2007
|
Ср Янв 18, 2012 09:18   |
|
Полезность: Нет оценки
|
altuns пишет: | Моя теория не подтвердилась, но зато смотрите, что получается.
Тестовая площадка: Сервер SPARC Solaris 10/09. Есть две базы 10.2.0.4, 11.2.0.2. Обе базы – копии рабочей IBSO за разные периоды времени. Настройки памяти абсолютно одинаковые.
С боевой базы я выловил SQL statements, у которого executes примерно равно parse_calls. Таких выражений достаточно много.
SKIP
Результаты следующие
10g:
Executions=80000
Parse_calls=19
11g:
Executions=80000
Parse_calls=80000 | - еще бы прогнать на 11g с OPTIMIZER_FEATURES_ENABLE =10.2.0.4 |
|
 |
altuns Участник
Вступление в Клуб: 30.12.2011
|
Ср Янв 18, 2012 09:52   |
|
Полезность: Нет оценки
|
OPTIMIZER_FEATURES_ENABLE ситуацию не изменило.
Привязывать Baseline я уже пробовал – тоже не помогает. В любом случае baseline избавляет нас только от hard parses, а здесь soft parses. Не стоит забывать, что у вас 11.2.0.3, а у нас 11.2.0.2. Попробую выискать ресурсы, чтобы прокачать тестовую базу ИБСО до 11.2.0.3 и посмотреть, что из этого получится. |
|
 |
|