28.12.2014 10:46
OlegON
 
В Oracle есть возможность использовать HugePages, т.е. если в сервере достаточно большое количество памяти (больше 16Гб), то есть смысл адресовать ее большими страницами, что весьма положительно сказывается на производительности. При таком переключении вместо 4Кб страниц можно использовать 2Мб страницы, что упрощает работу менеджеру. В силу ряда обстоятельств не рекомендую использовать эту опцию на версиях RDBMS ниже 11.2.0.3. Описывать буду для нормальной системы, т.е. Linux. Если кто-то опишет вариант включения больших страниц под Windows - плюс в карму и спасибо на форуме гарантированы.

Итак. Во-первых, убедитесь, что вы правильно настроили системные параметры (Как посчитать shmmax и shmall).
Далее, смотрим
Код:
cat /proc/meminfo | grep -i page
AnonPages:        234952 kB
PageTables:        22708 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Видим, что страница у нас 2048Кб (значение можно изменить параметром загрузки ядра bigpages=4100MB, например, в официальной доке не нашел, не пробовал). Из этого значения необходимо вычислить количество страниц, которое мы под большие страницы выделяем (для всего остального эта память будет недоступна сразу, всю память выделять не надо) и вписываем это значение в vm.nr_hugepages файла /etc/sysctl.conf. Например,
Код:
echo "( 43 * 1024 * 1024 * 1024 ) / (2 * 1024 * 1024)" | bc -l
vm.nr_hugepages=22016
(это где-то для 43Гб при доступных 55Гб) для древних ядер этот параметр был недоступен (вместо него надо было использовать vm.hugetlb_pool).
выполняем sysctl -p, чтобы память выделилась.
скрытое

Выделяем юзеру oracle память для блокировки в /etc/security/limits.conf
Цитата:
oracle soft core unlimited
oracle hard core unlimited
oracle soft memlock 54217728
oracle hard memlock 54217728
обратите внимание, что memlock в unlimited не выставляется. Почему - я не докопался. Перелогиньтесь.

Теперь переходим непосредственно к Oracle. Исхожу из того, что память у вас и так настроена (AMM с HugePages не совместимо на данный момент), поэтому настраиваем только большие страницы.
Код:
alter system set use_large_pages=only scope=spfile;
startup force
если вы накосячили с какими-то параметрами, то база тупо не запустится. Можно выставить не only, а true и смотреть в алертлоге, используются большие страницы или нет. Мне было влом.

После всей процедуры попробуйте выполнить
Код:
cat /proc/meminfo | grep -i page
AnonPages:        235080 kB
PageTables:        22712 kB
AnonHugePages:         0 kB
HugePages_Total:   21400
HugePages_Free:     2534
HugePages_Rsvd:      527
HugePages_Surp:        0
Hugepagesize:       2048 kB
чтобы убедиться, что все работает... При старте БД, естественно, что HugePages_Free будет достаточно велико, потом при работе заполнится...
Часовой пояс GMT +3, время: 11:41.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.