Большое потребление памяти Ораклом на IBM AIX


Главная Форумы Программное обеспечение СУБД Большое потребление памяти Ораклом на IBM AIX

В этой теме 36 ответов, 8 участников, последнее обновление  Michael 6 года/лет, 9 мес. назад.

  • Автор
    Сообщения
  • #11250

    v V
    Участник

    Oracle 9.2.0.8 OS — IBM AIL 5L
    Память на сервере для оракла распределена большими страницами по 16 Мб.
    Всего отведено 23 Гб.

    Проблема заключается в следующем:

    SGA_MAX_SIZE составляет всего 10 Гб, но при этом свободных страниц памяти не остается совсем.
    Клиентсокое приложение двухуровневое и пользователи приложения логинятся на сервер оракла. Днем открыто около 500 соединений. Подключение DEDICATED. Как я понимаю, оставшиеся 13 Гб съедают именно пользовательские подключения (или я не прав?).

    Вопрос: Может подключать пользователей как SHARED? чем это чревато?
    Или вообще отказаться от больших страниц и вернуться к дефолтному значению 4к?

    Спасибо!

  • #11251

    uxTuaHgp
    Участник

    Владислав,
    а вы администратор AIX или DBA?

    Что значит выделили большими страницами?

    Ставлю на то, что память съедает PGA — эта часть памяти практически неконтролируема.
    Есть PGA_AGGREGATE_TARGET параметр, но он является только целью, а один дурной запрос может запросто положить сервер за счет потребления PGA.

    Ищите паршивую овцу.

    Что касается Шаред режима — это может дать выхлоп, однако если виновата таки паршивая овца — все будет тщетно.

  • #11252

    v V
    Участник

    Владислав,
    а вы администратор AIX или DBA?

    Что значит выделили большими страницами?

    Ставлю на то, что память съедает PGA — эта часть памяти практически неконтролируема.
    Есть PGA_AGGREGATE_TARGET параметр, но он является только целью, а один дурной запрос может запросто положить сервер за счет потребления PGA.

    Ищите паршивую овцу.

    Что касается Шаред режима — это может дать выхлоп, однако если виновата таки паршивая овца — все будет тщетно.

    Страницы по 16 Мб.
    Я и Ораклом занимаюсь и Аиксом.
    Что значит PGA неконтролируема? А какими инструментальными средствами это проверить?

  • #11255

    roman
    Участник

    Что значит фраза: «свободных страниц памяти не остается совсем»?
    Очень многое может зависить от вашей текущей конфигурации памяти.
    Общее состояние PGA можно проверить с помощью SQL-запроса
    select * from v$pgastat;
    И покажите вывод команды svmon -G

  • #11256

    uxTuaHgp
    Участник

    Кстати да, тюнили VMM?
    Может быть у вас просто вся свободная память съедена файловым кэшем?
    vmo -a
    покажите тоже

    Я что-то упустил.
    Как вы выдаете страницы по 16М и кем это рекомендовано?

  • #11258

    v V
    Участник

    Что значит фраза: «свободных страниц памяти не остается совсем»?
    Очень многое может зависить от вашей текущей конфигурации памяти.
    Общее состояние PGA можно проверить с помощью SQL-запроса
    select * from v$pgastat;
    И покажите вывод команды svmon -G

    >svmon -G

    size inuse free pin virtual
    memory 7864320 7859297 5023 7379536 7295919
    pg space 2097152 449641

    work pers clnt other
    pin 3842250 0 0 330118
    in use 6979474 0 179407

    PageSize PoolSize inuse pgsp pin virtual
    s 4 KB — 1485025 283513 1150400 1501695
    m 64 KB — 21560 10383 12489 29083
    L 16 MB 1472 1301 0 1472 1301

    Наша проблема заключается вот в чем:
    >vmstat -l

    kthr memory page faults cpu large-page
    —— ———— ———————— ———— ———— ————
    r b avm fre re pi po fr sr cy in sy cs us sy id wa alp flp
    3 1 7083761 5357 0 4 4 852 3930 0 1643 19314 4424 36 6 50 8 1314 158

    здесь flp часто близко к 0 и тогда пользователь при коннекте получает сообщение
    ora-12500 TNS:Listener faled to start a dedicated server process

  • #11259

    v V
    Участник

    Кстати да, тюнили VMM?
    Может быть у вас просто вся свободная память съедена файловым кэшем?
    vmo -a
    покажите тоже

    Я что-то упустил.
    Как вы выдаете страницы по 16М и кем это рекомендовано?

    Настройка производилась согласно рекоммендация IBM а также докам с metalink.oracle.com

    >vmo -a

    cpu_scale_memp = 8
    data_stagger_interval = 161
    defps = 1
    force_relalias_lite = 0
    framesets = 2
    htabscale = n/a
    kernel_heap_psize = 4096
    kernel_psize = 16777216
    large_page_heap_size = 0
    lgpg_regions = 1472
    lgpg_size = 16777216
    low_ps_handling = 1
    lru_file_repage = 0
    lru_poll_interval = 10
    lrubucket = 131072
    maxclient% = 80
    maxfree = 1088
    maxperm = 1137121
    maxperm% = 80
    maxpin = 1534043
    maxpin% = 80
    mbuf_heap_psize = 65536
    memory_affinity = 1
    memory_frames = 7864320
    memplace_data = 2
    memplace_mapped_file = 2
    memplace_shm_anonymous = 2
    memplace_shm_named = 2
    memplace_stack = 2
    memplace_text = 2
    memplace_unmapped_file = 2
    mempools = 2
    minfree = 960
    minperm = 71070
    minperm% = 5
    nokilluid = 0
    npskill = 16384
    npsrpgmax = 131072
    npsrpgmin = 98304
    npsscrubmax = 131072
    npsscrubmin = 98304
    npswarn = 65536
    num_spec_dataseg = 0
    numpsblks = 2097152
    page_steal_method = 0
    pagecoloring = n/a
    pinnable_frames = 486684
    psm_timeout_interval = 5000
    pta_balance_threshold = n/a
    relalias_percentage = 0
    rpgclean = 0
    rpgcontrol = 2
    scrub = 0
    scrubclean = 0
    soft_min_lgpgs_vmpool = 0
    spec_dataseg_int = 512
    strict_maxclient = 1
    strict_maxperm = 0
    v_pinshm = 1
    vm_modlist_threshold = -1
    vmm_fork_policy = 1
    vmm_mpsize_support = 1
    wlm_memlimit_nonpg = 1

  • #11260

    uxTuaHgp
    Участник

    maxclient%=80 тоже по рекомендациям?

  • #11261

    andrewk
    Участник

    16 * 1472 = 23552

  • #11262

    v V
    Участник

    maxclient%=80 тоже по рекомендациям?

    maxclient%=80 кажется это дефолтное значение. Почему его оставили таким, сейчас уже не скажу.
    Каким оно должно быть?

  • #11263

    v V
    Участник

    16 * 1472 = 23552

    простите, и что?

  • #11264

    andrewk
    Участник

    i don’t have a russian keyboard, because of that i’ll write in english. sorry, if you understand english the same way, as you understand AIX. The large pages in AIX are always in memory. If you reserved the whole your memory for the large pages, you’ve lost your memory. It doesn’t depend, whether you use them or not, they simply can’t be paged out. Change your lgpg_regions to a lower value and you’ll find a lot of free memory.

  • #11265

    uxTuaHgp
    Участник

    16 * 1472 = 23552

    Это как бы тонкий намек на что? 🙂
    Что вся доступная память или даже больше отдана под большие страницы?
    Кстати, а как в таком случае будет выделяться память при форках?
    Минимальный квант памяти процесса будет тоже 16М?

    Я чтойта не врубаюсь.

  • #11266

    uxTuaHgp
    Участник

    Да, andrewk, как всегда прав.

    3. Configure the AIX large-page pool by calculating the number of large pages that are required for the SGA:
    num_of_large_pages = INT((total_SGA_size-1)/16MB)+1
    4. Configure the number and size of large pages:
    # vmo -p -o lgpg_regions=num_of_large_pages -o lgpg_size=16777216
    Tuning IBM

    Количество больших страниц не должно быть много больше SGA.
    А у Вас почему-то вся память отдана под большие страницы.

    Взято отсюда

  • #11267

    andrewk
    Участник

    [quote quote="andrewk" post=10571]16 * 1472 = 23552

    Это как бы тонкий намек на что? 🙂
    Что вся доступная память или даже больше отдана под большие страницы?
    Кстати, а как в таком случае будет выделяться память при форках?
    Минимальный квант памяти процесса будет тоже 16М?

    Я чтойта не врубаюсь.[/quote]

    all large pages are always in memory and can not be paged out — it’s the most important rule when using large pages. Forks and process memory are not relevant to the situation. The process might use the large pages, but it doesn’t mean, that it uses. For usage of large pages the process should also do some steps — e.g. it should be given a capability to use the large pages.

  • #11268

    v V
    Участник

    i don’t have a russian keyboard, because of that i’ll write in english. sorry, if you understand english the same way, as you understand AIX. The large pages in AIX are always in memory. If you reserved the whole your memory for the large pages, you’ve lost your memory. It doesn’t depend, whether you use them or not, they simply can’t be paged out. Change your lgpg_regions to a lower value and you’ll find a lot of free memory.

    Вся память сервера 32 Гб. под lp отвели 23. как я понимаю обычные процессы не могут ее использовать. и только оракл с включением дополнительных опций понимаает что нужно работать именно в этой области.

    И повторю вопрос Александра — получается под каждый пользовательский процесс отводится минимум 16Мб?
    Или нет?

    Хм, уменьшить lpg_regions? Так их и так не хватает. Вся SGA сейчас всего лишь 5 Гб и если я пытаюст ее увеличить то по vmstat -l параметр lp стремится к 0 и пользователи получают отказ в коннектах

  • #11269

    uxTuaHgp
    Участник

    Кстати вот еще оттуда-же:

    The new 64 KB pages are preferred over 16 MB pages, and it is recommended that you use them instead of 16 MB pages on systems that support both page sizes. This is because 64 KB pages provide most of the benefit of 16 MB pages, without the special tuning requirements of 16 MB pages. If the memory is not properly tuned for 16 MB pages, the performance can be worse. On systems where 64 KB pages are not supported, you can use 16 MB pages, but carefully monitor the memory usage on these systems to make sure that memory is used properly. Users who want to consider 16 MB pages should discuss this with AIX support or IBM consultant.

    В общем включать LOCK_SGA и юзать 64K страницы.
    16М страницы — пережиток прошлого.

  • #11270

    uxTuaHgp
    Участник

    И повторю вопрос Александра — получается под каждый пользовательский процесс отводится минимум 16Мб?
    Или нет?

    Чтобы процесс мог использовать 16М страницы, он должен это уметь.
    Насколько я понял, под компютешнал эта память не может быть использована.

  • #11271

    andrewk
    Участник

    you are using only 1301 of 1472 pages. So, you can without any complications reduce the number of large pages from 1472 to 1301 and receive 171*16 MB free memory. PGA can’t use 16MB pages afaik. So this memory is only for SGA.
    If you mean «user connection to Oracle» under «user’s process», so i don’t know, how Oracle works in such details, but I presume (as I wrote), that large pages are used only for SGA. For all other purposes (such as PGA, LGWR, ARC0, user connections, and so on) Oracle uses normal 4KB or medium 64KB pages.

  • #11272

    uxTuaHgp
    Участник

    Опять я соврамши.
    LOCK_SGA вам в общем и не нужен для 64К
    Oracle начиная с 10.2.0.4 умеет работать с 64К страницами, причем никаких манипуляций со стороны ОС не нужно.
    А если LOCK_SGA=TRUE, то оракл жрет еще и 16М страницы.

  • #11273

    v V
    Участник

    you are using only 1301 of 1472 pages. So, you can without any complications reduce the number of large pages from 1472 to 1301 and receive 171*16 MB free memory. PGA can’t use 16MB pages afaik. So this memory is only for SGA.
    If you mean «user connection to Oracle» under «user’s process», so i don’t know, how Oracle works in such details, but I presume (as I wrote), that large pages are used only for SGA. For all other purposes (such as PGA, LGWR, ARC0, user connections, and so on) Oracle uses normal 4KB or medium 64KB pages.

    Тогда почему при размере SGA = 5Гб в среднем свободных станиц остается около 100? (100*16 = 1,6 Гб)
    я выделил 1472*16 = 23 Гб. Вычитаем SGA. Где остальная память?
    SGA_MAX_SIZE = 10 Гб. Но сумма log_buffer+java_pool+large_pool+shared_pool+buffer_cache = 5Гб

  • #11275

    andrewk
    Участник

    [quote quote="andrewk" post=10581]you are using only 1301 of 1472 pages. So, you can without any complications reduce the number of large pages from 1472 to 1301 and receive 171*16 MB free memory. PGA can’t use 16MB pages afaik. So this memory is only for SGA.
    If you mean «user connection to Oracle» under «user’s process», so i don’t know, how Oracle works in such details, but I presume (as I wrote), that large pages are used only for SGA. For all other purposes (such as PGA, LGWR, ARC0, user connections, and so on) Oracle uses normal 4KB or medium 64KB pages.

    Тогда почему при размере SGA = 5Гб в среднем свободных станиц остается около 100? (100*16 = 1,6 Гб)
    я выделил 1472*16 = 23 Гб. Вычитаем SGA. Где остальная память?
    SGA_MAX_SIZE = 10 Гб. Но сумма log_buffer+java_pool+large_pool+shared_pool+buffer_cache = 5Гб[/quote]

    PGA can’t use 16MB pages [b]afaik[/b].
    [b]i don’t know, how Oracle works in such details[/b], but [b]I presume[/b] (as I wrote), that large pages are used only for SGA.

  • #11276

    yota
    Участник

    Опять я соврамши.
    LOCK_SGA вам в общем и не нужен для 64К
    Oracle начиная с 10.2.0.4 умеет работать с 64К страницами, причем никаких манипуляций со стороны ОС не нужно.
    А если LOCK_SGA=TRUE, то оракл жрет еще и 16М страницы.

    Правильно говорите, использовать 16М страницы не нужно. Нужно использовать 64К страницы, они выделяются автоматически. И второе, оракл будет использовать ТОЛЬКО большие страницы того, типа что будет указано. Использовать одновременно 64К и 16М он не может и не будет.

  • #11278

    yota
    Участник

    Oracle 9.2.0.8 OS — IBM AIL 5L
    Память на сервере для оракла распределена большими страницами по 16 Мб.
    Всего отведено 23 Гб.

    Проблема заключается в следующем:

    SGA_MAX_SIZE составляет всего 10 Гб, но при этом свободных страниц памяти не остается совсем.

    Ну так, понятное дело. Зачем вы выделили 23 ГБ больших страниц, если задали ораклу использовать только 10ГБ? Естественно остальное лежит мертвым грузом.

  • #11279

    yota
    Участник

    [quote quote="Александр" post=10570]maxclient%=80 тоже по рекомендациям?

    maxclient%=80 кажется это дефолтное значение. Почему его оставили таким, сейчас уже не скажу.
    Каким оно должно быть?[/quote]
    При lru_file_repage=0 это не имеет принципиального значения.

  • #11280

    yota
    Участник

    В общем включать LOCK_SGA и юзать 64K страницы.
    16М страницы — пережиток прошлого.

    Любые большие страницы они всегда запинены, поскольку не могут в принципе быть сброшены в свап, так что по сути LOCK_SGA делать не обязательно 🙂

  • #11281

    yota
    Участник

    Опять я соврамши.
    LOCK_SGA вам в общем и не нужен для 64К
    Oracle начиная с 10.2.0.4 умеет работать с 64К страницами, причем никаких манипуляций со стороны ОС не нужно.
    А если LOCK_SGA=TRUE, то оракл жрет еще и 16М страницы.

    Эээ… нет, он будет выделять 16М страницы ЕСЛИ они предварительно сконфигурены и выделены, ИЛИ будет использовать 64К страницы если поддерживаются процессором (POWER5+ or later). Но ни в коем случае оракл не будет их использовать одновременно. Ну и, конечно, andrewk совершенно прав. Большие страницы оракл для PGA не использует.

  • #11286

    v V
    Участник

    Oracle 9.2.0.8 будет работать со страницами 64к?

  • #11287

    uxTuaHgp
    Участник

    судя по всему нет

  • #11288

    v V
    Участник

    Отсюда снова следует мой вопрос — какими средствами или методиками определить кто испльзует память(именоо large pages)?
    Может я что-то напутал с вычислениями параметров? Может в доках чего-то не дочитал? Тогда помогите/подскажите!

  • #11289

    andrewk
    Участник

    svmon -P

  • #11491

    v V
    Участник

    Писали-писали, господа, но так ничего дельного и не посоветовали…

  • #11495

    Serg
    Участник

    сравняйте для начала lgpg_regions*16 с размером вашей SGA/

  • #11498

    andrewk
    Участник

    imho Вам тут много чего насоветовали, но если Вы хотите что-то конкретное услышать, то так и пишите. Например, «я хочу услышать, что AIX — г.!» Мы Вам так и напишем — нам не жалко.

  • #11499

    yota
    Участник

    Писали-писали, господа, но так ничего дельного и не посоветовали…

    Вам дали ответы, в том числе и абсолютно верные. Если вы их не увидели это как бы ваши проблемы.

  • #11500

    Oleg
    Участник

    ora-12500 TNS:Listener faled to start a dedicated server process

    а какой в ОС лимит на кол-во процессов?
    $ ulimit -a
    max user processes?

  • #11519

    Michael
    Участник

    $ ulimit -a

    И каков результат выполнения команды на Вашем сервере? Сколько процессов разрешено запускать пользователю, под которым Вы стартуете Oracle?

    И еще: что насчёт числа процессов сказано в init.ora?

Для ответа в этой теме необходимо авторизоваться.