Подниму ка я темку.
Понадобилось мне память оракловую поднастроить. Заодно и с выделением ее в ОС решил разобраться.
Изначально shmmax был 4Г-1 и было выделено несколько сегменов(тоже что-то около 8). После настройки БД решил собрать шаред память в один сегмент:
[root@storage pfile]# sysctl -w kernel.shmmax=3221225472
kernel.shmmax = 3221225472
[root@storage pfile]# [root@storage bdump]# ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 9109504 oracle 600 16777216 29
0x00000000 9240577 oracle 600 1291845632 29
0x00000000 9371650 oracle 600 654311424 29
0x00000000 9502723 oracle 600 318767104 29
0x00000000 9633796 oracle 600 167772160 29
0x00000000 9764869 oracle 600 83886080 29
0x00000000 9895942 oracle 600 33554432 29
0x00000000 10027015 oracle 600 16777216 29
0xeaea2344 10059784 oracle 640 18874368 29
[root@storage bdump]# sysctl -w kernel.shmmax=2147483648
kernel.shmmax = 2147483648
[root@storage bdump]# ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 10092544 oracle 600 16777216 23
0x00000000 10125313 oracle 600 2147483648 23
0x00000000 10256386 oracle 600 218103808 23
0xeaea2344 10289155 oracle 640 220200960 23
[root@storage etc]# uname -a
Linux storage.primbank.ru 2.6.18-92.el5PAE #1 SMP Fri May 23 22:26:05 EDT 2008 i686 i686 i386 GNU/Linux
После каждого изменения параметра инстанс перестартовывал. На сервере кроме БД ничего нет. Теоретически можно списать на фрагментацию памяти - типа при первом старте он нашел только кусок 1291845632 байт, а при втором уже был доступен 2147483648 байт. А размер сегмента это уже случайно наложилось. Но вероятность этого мне кажется исчезающе мала. Опять же, живший до этого инстанс имел много сегментов при shmmax в 4Г. и он точно был запущен на не фрагментированной памяти (стартовал после перезагрузки).
на всякий случай как выглядит БД:
SQL> startup force
ORACLE instance started.
Total System Global Area 2600468480 bytes
Fixed Size 1275368 bytes
Variable Size 469764632 bytes
Database Buffers 2113929216 bytes
Redo Buffers 15499264 bytes
Database mounted.
Database opened.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - Production
Используются hugepages:
[root@storage bdump]# cat /proc/meminfo
MemTotal: 4151124 kB
MemFree: 339624 kB
Buffers: 146096 kB
Cached: 651120 kB
SwapCached: 5852 kB
Active: 638904 kB
Inactive: 569560 kB
HighTotal: 3275648 kB
HighFree: 62560 kB
LowTotal: 875476 kB
LowFree: 277064 kB
SwapTotal: 4080424 kB
SwapFree: 4056076 kB
Dirty: 20 kB
Writeback: 0 kB
AnonPages: 413436 kB
Mapped: 117804 kB
Slab: 29044 kB
PageTables: 23856 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
CommitLimit: 4886224 kB
Committed_AS: 1408908 kB
VmallocTotal: 116728 kB
VmallocUsed: 4000 kB
VmallocChunk: 112400 kB
HugePages_Total: 1240
HugePages_Free: 209
HugePages_Rsvd: 105
Hugepagesize: 2048 kB
Кто-нибудь может объяснить зависимость размера и кол-ва сегментов от значения shmmax?