|
|
|
Деградация производительности при работе с LOBами
|
|||
|---|---|---|---|
|
#18+
Коллеги, есть непонятная ситуация. HP-UX 11.31 Itanium Memory – 200+ G DB – 10.2.0.5 Size – 10+ Tb Все возможные патчи на БД поставлены. Нагрузка - 1000-1800 (50-100 активных сессий), плюс джобы подготавливающие отчёты, загрузки данных, то-сё… Основное приложение написано на АПЕКС 3.1.2.00.02. Раздельная инсталляция - БД на одном сервере, Апач на другом. После старта экземпляра всё работает нормально, однако через неделю-две производительность сильно снижается! Падает производительность приложений работающих с LOB, а таких у нас большинство. В частности, это проявляется в черезвычайно длительной процедуре заливки новых версий Апекс приложений. Если вначале это минуты, то по прошедствии времени, при деградации производительности с LOB, это длится часами, или вообще не заканчивается. С нашей точки зрения, это следствие всё той же деградации производительности с LOBами. Причина этого явления непонятна. Единственный способ который реально помогает - перегрузка БД. Сами понимаете, что это не метод. При этом это не латчи, и не блокировки - чистое время процессора. Смена TEMP & UNDO tablespace’ов, alter system flush - и другие приседания и камлания эффекта не дают. В инете ничего на эту тему нарыть не удалось. В основном это банальные советы, типа не делайте много мелких изменений LOB, накопите в переменной и пишите максимально большими кусками. Но это не объясняет причину снижения одних и тех же операций с LOB со временем. Конкретный тестовый пример простейший. Берём блок : set timing on; set serveroutput on DECLARE zzz CLOB; xxx CLOB := 'asdasdasdasd'; BEGIN dbms_lob.createtemporary(zzz,TRUE); FOR i IN 1..10000 Loop dbms_lob.append(zzz, xxx); END LOOP; dbms_lob.freetemporary(zzz); EXCEPTION WHEN OTHERS THEN dbms_lob.freetemporary(zzz); RAISE; END; / После старта экземпляра время его выполнения ок. 0.2 с. Темп деградации – примерно в 10 раз в неделю. Через неделю примерно 2 сек., через 2 недели – 10-20 и т.д. Естественно, ждать, пока замедлится на 3-4-5 порядков, возможности нет, приходится экземпляр перезапускать. И опять – всё возвращается к описанной картине. Никакой корреляции с платформой, версией ОС, спецификой АПЕКС, версией БД установить не удалось. Промоделировать ситуацию не удаётся, так как на тестовых серверах не удаётся организовать адекватную нагрузку. Таким образом на тестовых серверах, подобная ситуация не воспроизводится. Уточняю, что тестовая среда на Linux x86_64. Так что нельзя исключать зависимость от платформы. Есть у кого нибудь идеи из-за чего может происходить деградация работы с LOBами, и как с этим бороться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 15:02 |
|
||
|
Деградация производительности при работе с LOBами
|
|||
|---|---|---|---|
|
#18+
VDomПри этом это не латчи, и не блокировки - чистое время процессора Покажете? Что не swap проверили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 15:42 |
|
||
|
Деградация производительности при работе с LOBами
|
|||
|---|---|---|---|
|
#18+
VDom, Что вам ответили в техподдержке Oracle? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 10:06 |
|
||
|
Деградация производительности при работе с LOBами
|
|||
|---|---|---|---|
|
#18+
AlexFF__|, По поводу swap сказать ничего не могу. Если бы это был Linux, то вопросов бы не было : top swapoff -a swapon -a и проблема былабы решена. Но это HP-UX а тут всё не так :-(( просто Ставил систему инженер из HP, специалист по Oracle. Ситуацию с нагрузкой у нас он знает, как настраивать HP-UX чтобы не было свопа, он точно знает, так что это врядли. К сожалению я не знаток HP-UX, чтобы в этом убедиться лично. Но идея принимается - надо убедиться что свопа нет и что он не растёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 12:22 |
|
||
|
Деградация производительности при работе с LOBами
|
|||
|---|---|---|---|
|
#18+
swapinfo -tam ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 12:29 |
|
||
|
Деградация производительности при работе с LOBами
|
|||
|---|---|---|---|
|
#18+
У заказчика давно нет поддержки :-( Но доступ на Металинк у нас есть. Реквестов создавать не могу :-(( Информации о проблеме и на Металинке найти не удалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 13:22 |
|
||
|
Деградация производительности при работе с LOBами
|
|||
|---|---|---|---|
|
#18+
VDom, Было на 10 версии Oracle похожее поведение базы: сессия работающая с LOB'ами зависала надолго на ожидании enq: HW - contention баг 6376915:ENQ HW - CONTENTION WITH LOB SEGMENTS Решалось установкой патча, либо (если нет саппорта и патч не скачать) периодически на таблицах выделять доп экстенты для LOB с помощью alter table ... modify lob (...) (allocate extent (size ...М)) size можно сразу указывать побольше, в зависимости от кол-ва вставляемых данных (например может хватить 128М надолго, а может и побольше экстент потребуется). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 13:45 |
|
||
|
Деградация производительности при работе с LOBами
|
|||
|---|---|---|---|
|
#18+
landy, sdp11:/ # swapinfo -tam Mb Mb Mb PCT START/ Mb TYPE AVAIL USED FREE USED LIMIT RESERVE PRI NAME dev 32768 89 32679 0% 0 - 1 /dev/vg00/lvol3 reserve - 20757 -20757 memory 387743 262227 125516 68% total 420511 283073 137438 67% - 0 - Я так понял что своп на /dev/vg00/lvol3 как видите он не используется - PCT USED = 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 13:51 |
|
||
|
Деградация производительности при работе с LOBами
|
|||
|---|---|---|---|
|
#18+
Да - не используется Это же в man swapinfo описано ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 13:56 |
|
||
|
Деградация производительности при работе с LOBами
|
|||
|---|---|---|---|
|
#18+
сессия работающая с LOB'ами зависала надолго на ожидании enq: HW - contention баг 6376915:ENQ HW - CONTENTION WITH LOB SEGMENTS как workaround(если это ожидания как выше): Set PCTVERSION to 100 for the blobs seems to clear up the HW: enqueue - but that is not a solution as it will use up space and never allow it to be re-used. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 14:13 |
|
||
|
Деградация производительности при работе с LOBами
|
|||
|---|---|---|---|
|
#18+
VDomИнформации о проблеме и на Металинке найти не удалось.Сессию трассировали? Что там? На HP-UX есть что-то типа линуксового strace? посмотреть, что процесс делает на OS, если в трассировке пусто? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 14:43 |
|
||
|
Деградация производительности при работе с LOBами
|
|||
|---|---|---|---|
|
#18+
Takurava, Вы понимаете, особо трассировать не чего Ну говорит что всего один курсор Вы обратите внимание что наш тестовый пример вообще не работает с таблицами Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. То есть идёт работа с LOB чисто в памяти, и тем не менее именно на этом примере видна деградация скорости работы с LOB ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 15:46 |
|
||
|
Деградация производительности при работе с LOBами
|
|||
|---|---|---|---|
|
#18+
VDom, В примере есть только временный LOB, никаких таблиц не используется. Время выполнения этого скрипта монотонно растёт… Независимо от текущей мгновенной нагрузки на сервере. Насколько я понимаю, ничего, кроме процессора, памяти, хранимых процедур и темпа в нём не используется. Даже относительно ТЕМПа есть сомнения, т.к. темпLOB кэшируем и относительно невелик… Создаётся впечатление, что какие-то структуры управления памятью, выделяемой под ТемпLOBы, не чистятся в процессе работы сервера, монотонно наращивая свой объём из-за чего теряется скорость обработки… Как с этим бороться, непонятно… ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 15:59 |
|
||
|
Деградация производительности при работе с LOBами
|
|||
|---|---|---|---|
|
#18+
VDomТо есть идёт работа с LOB чисто в памяти, и тем не менее именно на этом примере видна деградация скорости работы с LOBОк, вторая часть не поможет? Код: plsql 1. Сравнить состояние до и после через "AWR : Compare period reports" пробовали? Посмотреть на v$sgastat - если какие-то "структуры управления памятью" растут, может их поискать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 16:12 |
|
||
|
Деградация производительности при работе с LOBами
|
|||
|---|---|---|---|
|
#18+
VDom, «Так же попробуйте отказаться от Кэш, замедлит общий темп, но возможно на длительную работу не скажется.» Увы, время сразу возрастает примерно в 100 раз, что неприемлемо… Кстати, время без кэша растёт примерно в той же пропорции, что и с кэшем. Только по абсолютному значению раз в сто больше… “Сравнить состояние до и после через "AWR : Compare period reports" пробовали? Посмотреть на v$sgastat - если какие-то "структуры управления памятью" растут, может их поискать?” Идея вполне здравая, если бы не… Вот время работы скрипта за сутки выросло раза в полтора… Или за неделю – в десять раз… Что с чем сравнивать? «Сейчас» с «сутки назад» или «неделю назад»? БД-то реально рабочая, за сутки меняется всё… Хотя… Если сохранять СГАСТАТ , скажем раз в 10 минут, а потом вдумчиво смотреть на колебания циферок… Например, выстроить графики по каждому параметру за месяц… Ох, не знаю, не знаю… :-/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2017, 16:59 |
|
||
|
Деградация производительности при работе с LOBами
|
|||
|---|---|---|---|
|
#18+
VDomVDom, “Сравнить состояние до и после через "AWR : Compare period reports" пробовали? Посмотреть на v$sgastat - если какие-то "структуры управления памятью" растут, может их поискать?” :-/ LOB кэшируется в PGA. Попробуйте еще указать параметр dur при вызове createtemporary dbms_lob.createtemporary(zzz,TRUE,dbms_lob.session); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2017, 09:37 |
|
||
|
Деградация производительности при работе с LOBами
|
|||
|---|---|---|---|
|
#18+
Что сессия, что dbms_lob.call - все равно временные лоб-сегменты освободятся только после закрытия сессии. Возможно, что такой пул иногда надо останавливать или реально освобождать с помощью евента 60025, если дело в ТЕМР ТС(v$sort_usage) имхо, создать тест-пул, запустить через а ля run_stats(Кайт) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2017, 10:13 |
|
||
|
Деградация производительности при работе с LOBами
|
|||
|---|---|---|---|
|
#18+
Деградация носит кумулятивный характер, поэтому надо понять что может иметь кумулятивный характер, и может ли это быть связанно с операциями с LOB. С моей точки зрения это : 1) сегментация TEMP табличного пространства - замена табличного пространства TEMP на другое ничего не даёт поэтому этот фактор исключаем 2) рост swap памяти - проверка показала что свопа нет и он не растёт 3) переполнение каких то счётчиков, или семафоров - В HP-UX есть заклинание kcusage показывающее пороговые значения и текущие Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. Из приведённого только filecache_max наводит на размышления. Он достиг 12156600320 при пороге 12197325864. Разница 40 725 544. Вроде много, но это 0,34% !! Это настораживает. Вообщето в БД у нас 187 ТП, а у них 592 файла. И это без всяких других файлов БД (онлайн журналов и т.д.). Непонятно только как это может влиять на LOB. 4) сегментация памяти - мне кажется что это кандидат №1 Поясню почему. Есть такое понятие как управление большой памятью. Памяти у нас действительно много, и я даже не всю её использую. System Page Size: 16Kbytes Memory: 261149792K (137296352K) real, 265148832K (139316016K) virtual, 105355568K free Page# 1/893 В связи с этим вспоминаем что есть такая вещь как HugePages, которую как раз и рекомендуется использовать при большой памяти. То есть при старте память для Oracle сразу выделяется одним непрерывным куском, а внутри этого куска управление памятью выполняется максимально большими страницами. Всё это хорошо описано, и я неоднократно это настраивал но под Linux. Специалисты по HP-UX говорят что в HP-UX нет понятия HugePages и что там всё изначально делается правильно?? Но как? Толком мне никто этого так и не пояснил. В инете есть какие то упоминания о HugePages и HP-UX но ничего конкретного. Складывается впечатление, что какие то структуры управляющие за управление памятью, с течением времени заполняются, в результате чего начинаются тормоза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2017, 10:37 |
|
||
|
Деградация производительности при работе с LOBами
|
|||
|---|---|---|---|
|
#18+
Насколько я понимаю - filecache_max - это системный кэш для дисков/файлов Он слабо влияет на производительность Oracle, у него свой кэш, которым он управляет По поводу управления памятью на HP-UX и Oracle https://docs.oracle.com/cd/E11882_01/server.112/e10839/appb_hpux.htm#UNXAR010 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2017, 11:43 |
|
||
|
Деградация производительности при работе с LOBами
|
|||
|---|---|---|---|
|
#18+
Т е теоретически этот кэш можно уменьшить и высвободившуюся память отдать SGA ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2017, 11:45 |
|
||
|
Деградация производительности при работе с LOBами
|
|||
|---|---|---|---|
|
#18+
Похожая, например, тема: https://habrahabr.ru/company/luxoft/blog/275901/ В плане, что там тоже temporary lob и увеличение времени ЦП, и ведет себя по разному в разных ОС и версиях. Учитывая, что mod_plsql всё время пытается это чистить (с учетом параметра PlsqlMaxRequestsPerSession) могут быть какие-нибудь проблемы в управлении структур памяти, например, ОС зависимые. VDomУточняю, что тестовая среда на Linux x86_64 Если я правильно понял, у вас активно используется BFILE => тоже куча зависимостей от ОС. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2017, 13:08 |
|
||
|
Деградация производительности при работе с LOBами
|
|||
|---|---|---|---|
|
#18+
dba123 Что сессия, что dbms_lob.call - все равно временные лоб-сегменты освободятся только после закрытия сессии. Возможно, что такой пул иногда надо останавливать или реально освобождать с помощью евента 60025, если дело в ТЕМР ТС(v$sort_usage) имхо, создать тест-пул, запустить через а ля run_stats(Кайт) Спасибо за идею. Не уверены что event 60025 есть в Oracle 10. Будем пробовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2017, 13:11 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39468451&tid=1885785]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
194ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 541ms |

| 0 / 0 |
