Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Деградация производительности при работе с LOBами / 22 сообщений из 22, страница 1 из 1
06.06.2017, 15:02
    #39466869
VDom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деградация производительности при работе с LOBами
Коллеги, есть непонятная ситуация.

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ами, и как с этим бороться?
...
Рейтинг: 0 / 0
06.06.2017, 15:42
    #39466933
AlexFF__|
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деградация производительности при работе с LOBами
VDomПри этом это не латчи, и не блокировки - чистое время процессора
Покажете?
Что не swap проверили?
...
Рейтинг: 0 / 0
07.06.2017, 10:06
    #39467554
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деградация производительности при работе с LOBами
VDom,

Что вам ответили в техподдержке Oracle?
...
Рейтинг: 0 / 0
07.06.2017, 12:22
    #39467735
VDom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деградация производительности при работе с LOBами
AlexFF__|, По поводу swap сказать ничего не могу. Если бы это был Linux, то вопросов бы не было :
top
swapoff -a
swapon -a
и проблема былабы решена.
Но это HP-UX а тут всё не так :-(( просто
Ставил систему инженер из HP, специалист по Oracle.
Ситуацию с нагрузкой у нас он знает, как настраивать HP-UX чтобы не было свопа, он точно знает, так что это врядли.
К сожалению я не знаток HP-UX, чтобы в этом убедиться лично.
Но идея принимается - надо убедиться что свопа нет и что он не растёт.
...
Рейтинг: 0 / 0
07.06.2017, 12:29
    #39467739
landy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деградация производительности при работе с LOBами
swapinfo -tam
...
Рейтинг: 0 / 0
07.06.2017, 13:22
    #39467812
VDom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деградация производительности при работе с LOBами
У заказчика давно нет поддержки :-(
Но доступ на Металинк у нас есть.
Реквестов создавать не могу :-((

Информации о проблеме и на Металинке найти не удалось.
...
Рейтинг: 0 / 0
07.06.2017, 13:45
    #39467825
Andron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деградация производительности при работе с LOBами
VDom,

Было на 10 версии Oracle похожее поведение базы: сессия работающая с LOB'ами зависала надолго на ожидании enq: HW - contention
баг 6376915:ENQ HW - CONTENTION WITH LOB SEGMENTS
Решалось установкой патча, либо (если нет саппорта и патч не скачать) периодически на таблицах выделять доп экстенты для LOB с помощью alter table ... modify lob (...) (allocate extent (size ...М)) size можно сразу указывать побольше, в зависимости от кол-ва вставляемых данных (например может хватить 128М надолго, а может и побольше экстент потребуется).
...
Рейтинг: 0 / 0
07.06.2017, 13:51
    #39467829
VDom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деградация производительности при работе с LOBами
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
...
Рейтинг: 0 / 0
07.06.2017, 13:56
    #39467837
landy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деградация производительности при работе с LOBами
Да - не используется
Это же в man swapinfo описано )))
...
Рейтинг: 0 / 0
07.06.2017, 14:13
    #39467844
landy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деградация производительности при работе с LOBами
сессия работающая с 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.
...
Рейтинг: 0 / 0
07.06.2017, 14:43
    #39467866
Takurava
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деградация производительности при работе с LOBами
VDomИнформации о проблеме и на Металинке найти не удалось.Сессию трассировали? Что там?
На HP-UX есть что-то типа линуксового strace? посмотреть, что процесс делает на OS, если в трассировке пусто?
...
Рейтинг: 0 / 0
07.06.2017, 15:46
    #39467932
VDom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деградация производительности при работе с LOBами
Takurava,
Вы понимаете, особо трассировать не чего
Ну говорит что всего один курсор

Вы обратите внимание что наш тестовый пример вообще не работает с таблицами

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
[/SRC]
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;
/
[SRC PLSQL]



То есть идёт работа с LOB чисто в памяти, и тем не менее именно на этом примере видна деградация скорости работы с LOB
...
Рейтинг: 0 / 0
07.06.2017, 15:59
    #39467944
VDom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деградация производительности при работе с LOBами
VDom,

В примере есть только временный LOB, никаких таблиц не используется.
Время выполнения этого скрипта монотонно растёт…
Независимо от текущей мгновенной нагрузки на сервере.
Насколько я понимаю, ничего, кроме процессора, памяти, хранимых процедур и темпа в нём не используется.
Даже относительно ТЕМПа есть сомнения, т.к. темпLOB кэшируем и относительно невелик…

Создаётся впечатление, что какие-то структуры управления памятью, выделяемой под ТемпLOBы, не чистятся в процессе работы сервера, монотонно наращивая свой объём из-за чего теряется скорость обработки…
Как с этим бороться, непонятно…
...
Рейтинг: 0 / 0
07.06.2017, 16:12
    #39467957
Takurava
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деградация производительности при работе с LOBами
VDomТо есть идёт работа с LOB чисто в памяти, и тем не менее именно на этом примере видна деградация скорости работы с LOBОк, вторая часть не поможет?
Код: plsql
1.
На HP-UX есть что-то типа линуксового strace? посмотреть, что процесс делает на OS, если в трассировке пусто?


Сравнить состояние до и после через "AWR : Compare period reports" пробовали?
Посмотреть на v$sgastat - если какие-то "структуры управления памятью" растут, может их поискать?
...
Рейтинг: 0 / 0
07.06.2017, 16:59
    #39468020
VDom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деградация производительности при работе с LOBами
VDom,
«Так же попробуйте отказаться от Кэш, замедлит общий темп, но возможно на длительную работу не скажется.»

Увы, время сразу возрастает примерно в 100 раз, что неприемлемо…
Кстати, время без кэша растёт примерно в той же пропорции, что и с кэшем. Только по абсолютному значению раз в сто больше…

“Сравнить состояние до и после через "AWR : Compare period reports" пробовали?
Посмотреть на v$sgastat - если какие-то "структуры управления памятью" растут, может их поискать?”

Идея вполне здравая, если бы не… Вот время работы скрипта за сутки выросло раза в полтора… Или за неделю – в десять раз… Что с чем сравнивать? «Сейчас» с «сутки назад» или «неделю назад»? БД-то реально рабочая, за сутки меняется всё… Хотя… Если сохранять СГАСТАТ , скажем раз в 10 минут, а потом вдумчиво смотреть на колебания циферок… Например, выстроить графики по каждому параметру за месяц… Ох, не знаю, не знаю… :-/
...
Рейтинг: 0 / 0
08.06.2017, 09:37
    #39468324
orac_list
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деградация производительности при работе с LOBами
VDomVDom,
“Сравнить состояние до и после через "AWR : Compare period reports" пробовали?
Посмотреть на v$sgastat - если какие-то "структуры управления памятью" растут, может их поискать?”
:-/

LOB кэшируется в PGA.
Попробуйте еще указать параметр dur при вызове createtemporary
dbms_lob.createtemporary(zzz,TRUE,dbms_lob.session);
...
Рейтинг: 0 / 0
08.06.2017, 10:13
    #39468355
dba123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деградация производительности при работе с LOBами
Что сессия, что dbms_lob.call - все равно временные лоб-сегменты освободятся только после закрытия сессии.
Возможно, что такой пул иногда надо останавливать или реально освобождать с помощью евента 60025, если дело в ТЕМР ТС(v$sort_usage)
имхо, создать тест-пул, запустить через а ля run_stats(Кайт)
...
Рейтинг: 0 / 0
08.06.2017, 10:37
    #39468374
VDom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деградация производительности при работе с LOBами
Деградация носит кумулятивный характер, поэтому надо понять что может иметь кумулятивный характер, и может ли это быть связанно с операциями с 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.
Tunable                 Usage / Setting
=============================================
filecache_max     12156600320 / 12197325864
maxdsiz               8060928 / 2147483647
maxdsiz_64bit       190971904 / 274877906944
maxfiles_lim              922 / 63488
maxssiz                 98304 / 134217728
maxssiz_64bit         2097152 / 1073741824
maxtsiz              13484032 / 1073741824
maxtsiz_64bit       369098752 / 8589934592
maxuprc                   382 / 27000
max_thread_proc           193 / 3000
msgmbs                      0 / 8
msgmni                      2 / 4096
msgtql                      0 / 30000
nflocks                   132 / 30000
ninode                   3862 / 484096
nkthread                 2148 / 52516
nproc                     870 / 30000
npty                        0 / 200
nstrpty                     2 / 200
nstrtel                     0 / 60
nswapdev                    1 / 32
nswapfs                     0 / 32
semmni                    132 / 30000
semmns                  11705 / 60000
shmmax           104237301760 / 226158430208
shmmni                     51 / 4096
shmseg                     32 / 512

Из приведённого только 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 но ничего конкретного.

Складывается впечатление, что какие то структуры управляющие за управление памятью, с течением времени заполняются, в результате чего начинаются тормоза.
...
Рейтинг: 0 / 0
08.06.2017, 11:43
    #39468451
landy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деградация производительности при работе с LOBами
Насколько я понимаю - filecache_max - это системный кэш для дисков/файлов
Он слабо влияет на производительность Oracle, у него свой кэш, которым он управляет
По поводу управления памятью на HP-UX и Oracle
https://docs.oracle.com/cd/E11882_01/server.112/e10839/appb_hpux.htm#UNXAR010
...
Рейтинг: 0 / 0
08.06.2017, 11:45
    #39468453
landy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деградация производительности при работе с LOBами
Т е теоретически этот кэш можно уменьшить и высвободившуюся память отдать SGA
...
Рейтинг: 0 / 0
09.06.2017, 13:08
    #39469436
SvDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деградация производительности при работе с LOBами
Похожая, например, тема: https://habrahabr.ru/company/luxoft/blog/275901/
В плане, что там тоже temporary lob и увеличение времени ЦП, и ведет себя по разному в разных ОС и версиях.
Учитывая, что mod_plsql всё время пытается это чистить (с учетом параметра PlsqlMaxRequestsPerSession) могут быть какие-нибудь проблемы в управлении структур памяти, например, ОС зависимые.

VDomУточняю, что тестовая среда на Linux x86_64

Если я правильно понял, у вас активно используется BFILE => тоже куча зависимостей от ОС.
...
Рейтинг: 0 / 0
09.06.2017, 13:11
    #39469441
VDom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деградация производительности при работе с LOBами
dba123
Что сессия, что dbms_lob.call - все равно временные лоб-сегменты освободятся только после закрытия сессии.
Возможно, что такой пул иногда надо останавливать или реально освобождать с помощью евента 60025, если дело в ТЕМР ТС(v$sort_usage)
имхо, создать тест-пул, запустить через а ля run_stats(Кайт)


Спасибо за идею. Не уверены что event 60025 есть в Oracle 10. Будем пробовать.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Деградация производительности при работе с LOBами / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]