Oracle a simplificat la fiecare versiune managementul memoriei astfel începând cu versiunea 9i a introdus managementul automat al PGA-ului cu ajutorul parametrului PGA_AGGREGATE_TARGET, în versiunea 10g a introdus managementul automat al SGA-ului (ASMM) prin parametrul SGA_TARGET iar o data cu versiunea 11g a fost lansat automatic memory managemant (AMM). In unele situații eu prefer sa am un control mai bun asupra alocării memoriei în PGA si SGA, de aceea prefer sa folosesc ASMM. In următoarele rânduri voi dezactiva AMM si voi activa ASMM pe OS ce rulează RedHat.
--backup SQL> create pfile from spfile; --Disable AMM SQL> alter system reset memory_max_target scope=spfile; System altered. SQL> alter system reset memory_target scope=spfile; System altered. --Enable ASMM SQL> alter system set sga_target=20G scope=spfile; System altered. SQL> alter system set sga_max_size=20G scope=spfile; System altered. SQL> alter system set pga_aggregate_target=16G scope=spfile; System altered. --un restart al bazei de date ar trebui sa activeze noile configurari SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> startup ORA-27102: out of memory Linux-x86_64 Error: 28: No space left on device Additional information: -67108864 Additional information: 1
Eroarea nu este foarte intuitiva dar problema cu siguranța vine din cauza parametrilor de kernel care trebuiau verificați înainte de a reporni baza.
Check the page size: $getconf PAGE_SIZE 4096 $cat /etc/sysctl.conf | grep kernel.shmall kernel.shmall = 2097152
Dupa cum este setat kernel.shmall, sga_target poate avea cel mult valoarea 8G.
Valoarea corespunzătoare configurării dorite trebuie sa fie următoarea:
1024 * 1024 * 1024 * 20 / 4096 = 5242880
Prin urmare se modifica kernel.shmall cu noua valoare 5242880 și încercam din nou sa pornim baza de date.
SQL> startup ORA-27102: out of memory Linux-x86_64 Error: 28: No space left on device Additional information: -67108864 Additional information: 1
Aceeași eroare! Pe aceasta baza parametrul PROCESSES are o valoare mai mare decât cea implicita de aceea parametrul SEMMNI ar trebui modificat pentru ca sistemul de operare sa poată găzdui mai multe semafoare.
$ /sbin/sysctl -a | grep sem kernel.sem = 250 32000 100 128
Se modifica kernel.sem în 250 32000 100 200
SQL> startup ORACLE instance started. Total System Global Area 2.1379E+10 bytes Fixed Size 2262656 bytes Variable Size 3758098816 bytes Database Buffers 1.7583E+10 bytes Redo Buffers 36073472 bytes Database mounted. Database opened.
Instanta a fost pornita cu succes iar ASMM a fost activat.