Note 1961997.1
yum -y install binutils.x86_64 \
compat-libcap1.x86_64 \
compat-libstdc++-33.i686 \
compat-libstdc++-33.x86_64 \
gcc.x86_64 \
gcc-c++.x86_64 \
glibc.i686 \
glibc.x86_64 \
glibc-devel.i686 \
glibc-devel.x86_64 \
ksh.x86_64 \
libaio.i686 \
libaio.x86_64 \
libaio-devel.i686 \
libaio-devel.x86_64 \
libgcc.i686 \
libgcc.x86_64 \
libstdc++.i686 \
libstdc++.x86_64 \
libstdc++-devel.i686 \
libstdc++-devel.x86_64 \
libXi.i686 \
libXi.x86_64 \
libXtst.i686 \
libXtst.x86_64 \
make.x86_64 \
sysstat.x86_64 \
Для устранения ошибки Bug 21151912 -> Doc ID 2062336.1
Installation of 12.1.0.2 Oracle Database Server/Client on RHEL 7/OL7
reports pre-requisite package 'compat-libstdc++' missing. (Doc ID 2062336.1)
yum -y install compat-libstdc++-33.x86_64 \
compat-libstdc++-33.i686
as Well as Any Application That Uses a Shared Memory Segment (SHM) or Semaphores (SEM) (Doc ID 2081410.1)
Set RemoveIPC=no in /etc/systemd/logind.conf
Set RemoveIPC=no in /etc/systemd/logind.conf
Reboot the server or restart systemd-logind as follows:
$ su - root
$ systemctl daemon-reload
$ systemctl restart systemd-logind
# grep MemTotal /proc/meminfo
# grep SwapTotal /proc/meminfo
kernel.shmall
Max shared memory = shmall * page_size (так будет в байтах)
Размер страницы:
$ getconf PAGE_SIZE
4096
Например, мы хотим под SGA выделить 10GB
10*1024*1024*1024=107374182240 (10Gb in bytes)
107374182240/4096=2621440
kernel.shmall = 2621440
kernel.shmall рекомендуется выставлять в максимальное значение
(т.е. равным размеру физической памяти в системе в страницах)
Минимальное рекомендованное значение kernel.shmall = 6291456
Например, в системе 64GB RAM, выделяем всю под shared memory
Если размер страницы равен 4096 Bytes, то kernel.shmall вычисляется так:
64 Gb
64 * 262144 = 16777216
65536 Mb
65536 * 256 = 16777216
67108864 Kb
67108864 / 4 = 16777216.0
68719476736 Bytes
68719476736 / 4096 = 16777216.0
kernel.shmall = 16777216
Закомментируем существующий параметр:
sed -ie 's/^kernel.shmall/#kernel.shmall/g' /etc/sysctl.conf
Вычисляем и устанавливаем новое значение:
MemTotal Kb / 4
echo "kernel.shmall = $(awk '$1 == "MemTotal:"{tmp=$2/4; printf"%0.0f\n", tmp}' /proc/meminfo)" >> /etc/sysctl.conf
Применить параметры ядра
$ sysctl -p
kernel.shmmax
Рекомендуется выставлять 1/2 от размера физической памяти в системе (в байтах)
К примеру для 64 Гб это будет:
64*1024*1024*1024=68719476736 (64Gb in bytes)
68719476736/2=34359738368
kernel.shmmax = 34359738368
64 Gb
64 * 536870912 = 34359738368
65536 Mb
65536 * 524288 = 34359738368
67108864 Kb
67108864 * 512 = 34359738368
68719476736 Bytes
68719476736 / 2 = 34359738368
kernel.shmmax = 34359738368
Закомментируем существующий параметр:
sed -ie 's/^kernel.shmmax/#kernel.shmmax/g' /etc/sysctl.conf
Вычисляем и устанавливаем новое значение:
MemTotal Kb * 512
echo "kernel.shmmax = $(awk '$1 == "MemTotal:"{tmp=$2*512; printf"%0.0f\n", tmp}' /proc/meminfo)" >> /etc/sysctl.conf
Применить параметры ядра
$ sysctl -p
kernel.shmmni
Рекомендуется установить kernel.shmmni = 4096
Применить параметры ядра
$ sysctl -p
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
kernel.panic_on_oops = 1
Устанавливаем
cat << EOF >> /etc/sysctl.conf
kernel.shmmni = 4096
net.ipv4.ip_local_port_range = 9000 65535
kernel.sem = 250 32000 100 128
net.core.rmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048576
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.panic_on_oops = 1
EOF
Применить параметры ядра
$ sysctl -p
Устранить обрывы связи для долго работающих запросов
при использовании фаерволов между БД и клиентом
Добавить в /etc/sysctl.conf
cat >> /etc/sysctl.conf << EOF
###########################################
### For CheckPoint Timeout ################
###########################################
net.ipv4.tcp_keepalive_intvl = 75
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_time = 2700
###########################################
EOF
Применить параметры ядра
$ sysctl -p
Убедитесь, что последняя версия PAM загружена в
/etc/pam.d/login file
cat > /etc/pam.d/login << EOF
#+-------------------------------+
#| Setting parameters for Oracle |
#+-------------------------------+
session required pam_limits.so
EOF
Set Shell limits for oracle users:
cat > /etc/security/limits.d/70-oracle.conf << EOF
#+-------------------------------+
#| Setting parameters for Oracle |
#+-------------------------------+
oracle soft nofile 131072
oracle hard nofile 131072
oracle soft nproc 131072
oracle hard nproc 131072
# For 64 Gb Installed : 67108864=64*1024*1024 (размер в Kb)
oracle soft memlock 67108864
oracle hard memlock 67108864
#
EOF
Set Shell limits for root users:
cat > /etc/security/limits.d/70-root.conf << EOF
#+-------------------------------------+
#| Setting limits root [for Oracle DB] |
#+-------------------------------------+
root soft nofile 131072
root hard nofile 131072
root soft nproc 131072
root hard nproc 131072
# For 64 Gb Installed : 67108864=64*1024*1024 (размер в Kb)
root soft memlock 67108864
root hard memlock 67108864
#
EOF
Проверяем:
su - oracle -c 'id; ulimit -a'
su - root -c 'id; ulimit -a'
Для сервера с RAM=64 GB
su - root
df -h /dev/shm/
umount /dev/shm
mount -t tmpfs shmfs -o size=64g /dev/shm
Добавить строчку в /etc/fstab следующего содержания:
cat >> /etc/fstab <
tmpfs /dev/shm tmpfs size=64g 0 0
EOF
/tmp -> требуется минимум 1 GB
ntpdate omega.local
Настройка NTP daemon
Настроить запуск демона с параметром -x :
ntpd -u ntp:ntp -p /var/run/ntpd.pid -x
В файле /etc/resolv.conf добавить domain omega.local
rpm -qi cvuqdisk
rpm -iv cvuqdisk-1.0.9-1.rpm
Необходимо выбрать наиболее удобный вариант
Настройка загрузчика
в /boot/grub/grub.conf -> добавить опцию transparent_hugepage=never
kernel /vmlinuz-2.6.32-504.1.3.el6.x86_64 ro root=LABEL=/ transparent_hugepage=never
Скрипт автозапуска
В файле /etc/rc.local добавить скрипт отключение Transparent HugePages
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
Начинася с Oracle Linux 7 в ядер UEK, transparent hugepages отключены по умолчанию,
никаких действий принимать не надо!
Oracle может использовать Hugepages для размещения SGA.
Hugepages не вытесняются в swap.
Процессор уменьшит число трансляций виртуальных адресов памяти в физические.
Кеш CPU Translation Lookaside Buffers (TLB) будет реже устаревать.
При использовании больших страниц памяти shared memory для СУБД настраивать не нужно.
Но если используется ASM, то для его экземпляра зарезервируем 1024 МБ shared memory,
поэтому размер /dev/shm быть не менее 1024 МБ
$ sqlplus / as sysasm
Для версии 11.2.0.3 и ниже (Note 265633.1) минимально необходимые параметры:
alter system set memory_target = 320M scope=spfile sid='*';
alter system set shared_pool_size = 128M scope=spfile sid='*';
alter system set large_pool_size = 64M scope=spfile sid='*';
Для версии 11.2.0.4 и выше (Note 1536039.1 и Note 1982132.1):
alter system set memory_target = 1024M scope=spfile sid='*';
alter system set shared_pool_size = 128M scope=spfile sid='*';
alter system set large_pool_size = 64M scope=spfile sid='*';
Для высоконагруженных многопроцессорных систем (Note 437924.1)
Для версии 11.2.0.3 и выше:
alter system set memory_max_target= 2048M scope=spfile sid='*';
alter system set memory_target = 1536M scope=spfile sid='*';
alter system set shared_pool_size = 128M scope=spfile sid='*';
alter system set large_pool_size = 64M scope=spfile sid='*';
Необходимо отключить автоматическое управление памятью AMM
alter system set memory_target=0
Количество больших страниц памяти задаётся параметром ядра vm.nr_hugepages.
Можно динамически изменять количество hugepages, но лучше резервировать их при загрузке ОС.
Информацию об использовании hugepages можно узнать из /proc/meminfo:
bash-4.2$ grep Huge /proc/meminfo
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
bash-4.2$
Покажет
- сколько всего выделено страниц
- сколько свободных страниц
- сколько зарезервированных страниц
- размер одной страницы памяти
Рассчитаем необходимое количество страниц:
На сервере 64 Gb
Параметры экземпляра такие:
memory_max_target = 61440M
memory_target = 61440M
sga_max_size = 36864M
sga_target = 36864M
pga_aggregate_target = 24576M
Если размер страницы равен 2 Mb (2048 Kb)
то количество страниц расчитываем так:
для sga_max_size = 36 Gb
36 Gb
36 * 512 = 18432
36864 Mb
36864 * 0.5 = 18432
37748736 Kb
37748736 / 2048 = 18432
38654705664 Bytes
38654705664 / 2097152 = 18432
Необходимо выделить небольшой запас свободных страниц hugepages
18432 увеличим до 18450
vm.nr_hugepages = 18450
/etc/security/limits.conf
Пользователю, от которого запускается СУБД разрешено блокировать память такого размера
oracle soft memlock 67108864
oracle hard memlock 67108864
$ ulimit -l
SQL> alter system set memory_target=0;
System altered.
SQL> alter system set memory_max_target=0;
System altered.
Под root
# vi /etc/sysctl.conf
vm.nr_hugepages = 18450
# sysctl -p
# sysctl vm.nr_hugepages=18450
shutdown immediate;
# reboot
Проверяем:
# grep ^Huge /proc/meminfo
Есть такой bash-скрипт (MOS) note 401749.1
Который рассчитывает рекомендуемое значение vm.nr_hugepages.
#!/bin/bash
#
# hugepages_settings.sh
#
# Linux bash script to compute values for the
# recommended HugePages/HugeTLB configuration
#
# Note: This script does calculation for all shared memory
# segments available when the script is run, no matter it
# is an Oracle RDBMS shared memory segment or not.
# Check for the kernel version
KERN=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'`
# Find out the HugePage size
HPG_SZ=`grep Hugepagesize /proc/meminfo | awk {'print $2'}`
# Start from 1 pages to be on the safe side and guarantee 1 free HugePage
NUM_PG=1
# Cumulative number of pages required to handle the running shared memory segments
for SEG_BYTES in `ipcs -m | awk {'print $5'} | grep "[0-9][0-9]*"`
do
MIN_PG=`echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q`
if [ $MIN_PG -gt 0 ]; then
NUM_PG=`echo "$NUM_PG+$MIN_PG+1" | bc -q`
fi
done
# Finish with results
case $KERN in
'2.4') HUGETLB_POOL=`echo "$NUM_PG*$HPG_SZ/1024" | bc -q`;
echo "Recommended setting: vm.hugetlb_pool = $HUGETLB_POOL" ;;
'2.6') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
*) echo "Unrecognized kernel version $KERN. Exiting." ;;
esac
# End
$ chmod u+x ./hugepages_setting.sh
$ ./hugepages_settings.sh
.
.
.
Recommended setting: vm.nr_hugepages = nnnn
Установка пакетов:
yum -y install binutils.x86_64 \
compat-libcap1.x86_64 \
compat-libstdc++-33.i686 \
compat-libstdc++-33.x86_64 \
gcc.x86_64 \
gcc-c++.x86_64 \
glibc.i686 \
glibc.x86_64 \
glibc-devel.i686 \
glibc-devel.x86_64 \
ksh.x86_64 \
libaio.i686 \
libaio.x86_64 \
libaio-devel.i686 \
libaio-devel.x86_64 \
libgcc.i686 \
libgcc.x86_64 \
libstdc++.i686 \
libstdc++.x86_64 \
libstdc++-devel.i686 \
libstdc++-devel.x86_64 \
libXi.i686 \
libXi.x86_64 \
libXtst.i686 \
libXtst.x86_64 \
make.x86_64 \
sysstat.x86_64 \
Для устранения ошибки Bug 21151912 -> Doc ID 2062336.1
Installation of 12.1.0.2 Oracle Database Server/Client on RHEL 7/OL7
reports pre-requisite package 'compat-libstdc++' missing. (Doc ID 2062336.1)
yum -y install compat-libstdc++-33.x86_64 \
compat-libstdc++-33.i686
ALERT: Setting RemoveIPC=yes on Redhat 7.2 Crashes ASM and Database Instances
as Well as Any Application That Uses a Shared Memory Segment (SHM) or Semaphores (SEM) (Doc ID 2081410.1)
Set RemoveIPC=no in /etc/systemd/logind.conf
Set RemoveIPC=no in /etc/systemd/logind.conf
Reboot the server or restart systemd-logind as follows:
$ su - root
$ systemctl daemon-reload
$ systemctl restart systemd-logind
Смотрим размеры физической памяти и Swap
# grep MemTotal /proc/meminfo
# grep SwapTotal /proc/meminfo
Установка параметров ядра
Общий объём доступной разделяемой памяти (в страницах)
kernel.shmall
Max shared memory = shmall * page_size (так будет в байтах)
Размер страницы:
$ getconf PAGE_SIZE
4096
Например, мы хотим под SGA выделить 10GB
10*1024*1024*1024=107374182240 (10Gb in bytes)
107374182240/4096=2621440
kernel.shmall = 2621440
kernel.shmall рекомендуется выставлять в максимальное значение
(т.е. равным размеру физической памяти в системе в страницах)
Минимальное рекомендованное значение kernel.shmall = 6291456
Например, в системе 64GB RAM, выделяем всю под shared memory
Если размер страницы равен 4096 Bytes, то kernel.shmall вычисляется так:
64 Gb
64 * 262144 = 16777216
65536 Mb
65536 * 256 = 16777216
67108864 Kb
67108864 / 4 = 16777216.0
68719476736 Bytes
68719476736 / 4096 = 16777216.0
kernel.shmall = 16777216
Закомментируем существующий параметр:
sed -ie 's/^kernel.shmall/#kernel.shmall/g' /etc/sysctl.conf
Вычисляем и устанавливаем новое значение:
MemTotal Kb / 4
echo "kernel.shmall = $(awk '$1 == "MemTotal:"{tmp=$2/4; printf"%0.0f\n", tmp}' /proc/meminfo)" >> /etc/sysctl.conf
Применить параметры ядра
$ sysctl -p
Максимальный размер сегмента разделяемой памяти (в байтах)
kernel.shmmax
Рекомендуется выставлять 1/2 от размера физической памяти в системе (в байтах)
К примеру для 64 Гб это будет:
64*1024*1024*1024=68719476736 (64Gb in bytes)
68719476736/2=34359738368
kernel.shmmax = 34359738368
64 Gb
64 * 536870912 = 34359738368
65536 Mb
65536 * 524288 = 34359738368
67108864 Kb
67108864 * 512 = 34359738368
68719476736 Bytes
68719476736 / 2 = 34359738368
kernel.shmmax = 34359738368
Закомментируем существующий параметр:
sed -ie 's/^kernel.shmmax/#kernel.shmmax/g' /etc/sysctl.conf
Вычисляем и устанавливаем новое значение:
MemTotal Kb * 512
echo "kernel.shmmax = $(awk '$1 == "MemTotal:"{tmp=$2*512; printf"%0.0f\n", tmp}' /proc/meminfo)" >> /etc/sysctl.conf
Применить параметры ядра
$ sysctl -p
Максимальное число сегментов разделяемой памяти для всей системы
kernel.shmmni
Рекомендуется установить kernel.shmmni = 4096
Применить параметры ядра
$ sysctl -p
Рекомендуемые значения других параметров ядра следующие:
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
kernel.panic_on_oops = 1
Устанавливаем
cat << EOF >> /etc/sysctl.conf
kernel.shmmni = 4096
net.ipv4.ip_local_port_range = 9000 65535
kernel.sem = 250 32000 100 128
net.core.rmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048576
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.panic_on_oops = 1
EOF
Применить параметры ядра
$ sysctl -p
Сетевые параметры:
Устранить обрывы связи для долго работающих запросов
при использовании фаерволов между БД и клиентом
Добавить в /etc/sysctl.conf
cat >> /etc/sysctl.conf << EOF
###########################################
### For CheckPoint Timeout ################
###########################################
net.ipv4.tcp_keepalive_intvl = 75
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_time = 2700
###########################################
EOF
Применить параметры ядра
$ sysctl -p
Настройка Shell Limits:
Убедитесь, что последняя версия PAM загружена в
/etc/pam.d/login file
cat > /etc/pam.d/login << EOF
#+-------------------------------+
#| Setting parameters for Oracle |
#+-------------------------------+
session required pam_limits.so
EOF
Set Shell limits for oracle users:
cat > /etc/security/limits.d/70-oracle.conf << EOF
#+-------------------------------+
#| Setting parameters for Oracle |
#+-------------------------------+
oracle soft nofile 131072
oracle hard nofile 131072
oracle soft nproc 131072
oracle hard nproc 131072
# For 64 Gb Installed : 67108864=64*1024*1024 (размер в Kb)
oracle soft memlock 67108864
oracle hard memlock 67108864
#
EOF
Set Shell limits for root users:
cat > /etc/security/limits.d/70-root.conf << EOF
#+-------------------------------------+
#| Setting limits root [for Oracle DB] |
#+-------------------------------------+
root soft nofile 131072
root hard nofile 131072
root soft nproc 131072
root hard nproc 131072
# For 64 Gb Installed : 67108864=64*1024*1024 (размер в Kb)
root soft memlock 67108864
root hard memlock 67108864
#
EOF
Проверяем:
su - oracle -c 'id; ulimit -a'
su - root -c 'id; ulimit -a'
Настройка /dev/shm
Для сервера с RAM=64 GB
su - root
df -h /dev/shm/
umount /dev/shm
mount -t tmpfs shmfs -o size=64g /dev/shm
Добавить строчку в /etc/fstab следующего содержания:
cat >> /etc/fstab <
tmpfs /dev/shm tmpfs size=64g 0 0
EOF
Требование к размеру файловых систем
/tmp -> требуется минимум 1 GB
Установить точное время
ntpdate omega.local
Настройка NTP daemon
Настроить запуск демона с параметром -x :
ntpd -u ntp:ntp -p /var/run/ntpd.pid -x
Настройка разрешения имен
В файле /etc/resolv.conf добавить domain omega.local
Installing the cvuqdisk Package for Linux (RAC only)
rpm -qi cvuqdisk
rpm -iv cvuqdisk-1.0.9-1.rpm
Disabling Transparent HugePages
Необходимо выбрать наиболее удобный вариант
Настройка загрузчика
в /boot/grub/grub.conf -> добавить опцию transparent_hugepage=never
kernel /vmlinuz-2.6.32-504.1.3.el6.x86_64 ro root=LABEL=/ transparent_hugepage=never
Скрипт автозапуска
В файле /etc/rc.local добавить скрипт отключение Transparent HugePages
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
Начинася с Oracle Linux 7 в ядер UEK, transparent hugepages отключены по умолчанию,
никаких действий принимать не надо!
Настройка Hugepages
Oracle может использовать Hugepages для размещения SGA.
Hugepages не вытесняются в swap.
Процессор уменьшит число трансляций виртуальных адресов памяти в физические.
Кеш CPU Translation Lookaside Buffers (TLB) будет реже устаревать.
При использовании больших страниц памяти shared memory для СУБД настраивать не нужно.
Но если используется ASM, то для его экземпляра зарезервируем 1024 МБ shared memory,
поэтому размер /dev/shm быть не менее 1024 МБ
$ sqlplus / as sysasm
Для версии 11.2.0.3 и ниже (Note 265633.1) минимально необходимые параметры:
alter system set memory_target = 320M scope=spfile sid='*';
alter system set shared_pool_size = 128M scope=spfile sid='*';
alter system set large_pool_size = 64M scope=spfile sid='*';
Для версии 11.2.0.4 и выше (Note 1536039.1 и Note 1982132.1):
alter system set memory_target = 1024M scope=spfile sid='*';
alter system set shared_pool_size = 128M scope=spfile sid='*';
alter system set large_pool_size = 64M scope=spfile sid='*';
Для высоконагруженных многопроцессорных систем (Note 437924.1)
Для версии 11.2.0.3 и выше:
alter system set memory_max_target= 2048M scope=spfile sid='*';
alter system set memory_target = 1536M scope=spfile sid='*';
alter system set shared_pool_size = 128M scope=spfile sid='*';
alter system set large_pool_size = 64M scope=spfile sid='*';
Необходимо отключить автоматическое управление памятью AMM
alter system set memory_target=0
Количество больших страниц памяти задаётся параметром ядра vm.nr_hugepages.
Можно динамически изменять количество hugepages, но лучше резервировать их при загрузке ОС.
Информацию об использовании hugepages можно узнать из /proc/meminfo:
bash-4.2$ grep Huge /proc/meminfo
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
bash-4.2$
Покажет
- сколько всего выделено страниц
- сколько свободных страниц
- сколько зарезервированных страниц
- размер одной страницы памяти
Рассчитаем необходимое количество страниц:
На сервере 64 Gb
Параметры экземпляра такие:
memory_max_target = 61440M
memory_target = 61440M
sga_max_size = 36864M
sga_target = 36864M
pga_aggregate_target = 24576M
Если размер страницы равен 2 Mb (2048 Kb)
то количество страниц расчитываем так:
для sga_max_size = 36 Gb
36 Gb
36 * 512 = 18432
36864 Mb
36864 * 0.5 = 18432
37748736 Kb
37748736 / 2048 = 18432
38654705664 Bytes
38654705664 / 2097152 = 18432
Необходимо выделить небольшой запас свободных страниц hugepages
18432 увеличим до 18450
vm.nr_hugepages = 18450
Проверьте настройку лимитов
/etc/security/limits.conf
Пользователю, от которого запускается СУБД разрешено блокировать память такого размера
oracle soft memlock 67108864
oracle hard memlock 67108864
$ ulimit -l
Отключите AMM
SQL> alter system set memory_target=0;
System altered.
SQL> alter system set memory_max_target=0;
System altered.
Установите рассчитанное значение параметру vm.nr_hugepages
Под root
# vi /etc/sysctl.conf
vm.nr_hugepages = 18450
# sysctl -p
# sysctl vm.nr_hugepages=18450
shutdown immediate;
# reboot
Проверяем:
# grep ^Huge /proc/meminfo
Примечание:
Есть такой bash-скрипт (MOS) note 401749.1
Который рассчитывает рекомендуемое значение vm.nr_hugepages.
#!/bin/bash
#
# hugepages_settings.sh
#
# Linux bash script to compute values for the
# recommended HugePages/HugeTLB configuration
#
# Note: This script does calculation for all shared memory
# segments available when the script is run, no matter it
# is an Oracle RDBMS shared memory segment or not.
# Check for the kernel version
KERN=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'`
# Find out the HugePage size
HPG_SZ=`grep Hugepagesize /proc/meminfo | awk {'print $2'}`
# Start from 1 pages to be on the safe side and guarantee 1 free HugePage
NUM_PG=1
# Cumulative number of pages required to handle the running shared memory segments
for SEG_BYTES in `ipcs -m | awk {'print $5'} | grep "[0-9][0-9]*"`
do
MIN_PG=`echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q`
if [ $MIN_PG -gt 0 ]; then
NUM_PG=`echo "$NUM_PG+$MIN_PG+1" | bc -q`
fi
done
# Finish with results
case $KERN in
'2.4') HUGETLB_POOL=`echo "$NUM_PG*$HPG_SZ/1024" | bc -q`;
echo "Recommended setting: vm.hugetlb_pool = $HUGETLB_POOL" ;;
'2.6') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
*) echo "Unrecognized kernel version $KERN. Exiting." ;;
esac
# End
$ chmod u+x ./hugepages_setting.sh
$ ./hugepages_settings.sh
.
.
.
Recommended setting: vm.nr_hugepages = nnnn
Комментариев нет:
Отправить комментарий