저는 Red Hat Enterprise Linux Server 버전 5.11(Tikanga)을 운영 체제로 사용하고 있으며 rdbms는 11gR2 소프트웨어입니다. 메모리 대상 = 3GB, 물리적 RAM = 7GB로 데이터베이스를 만들었습니다. 많은 작업을 수행하면 데이터베이스 서비스가 매우 느려집니다. 성능을 향상하려면 SHMALL 및 SHMAX 매개변수를 변경해야 합니다. 어떤 가치를 주어야 하는지 제안해 주실 수 있나요?
답변1
SHMAX
64비트 서버의 경우 사용할 수 있는 가장 좋은 값은 RAM의 절반입니다.
32비트 서버의 경우 3GB
상하이 몰
페이징을 방지하려면 SHMALL을 사용 가능한 RAM보다 작게 유지해야 합니다.
SHMAX
우리의 현재 상황으로 볼 때SHMAX 설정에 대한 RedHat 문서:
이 매개변수는 Linux 프로세스가 가상 주소 공간에 할당할 수 있는 단일 공유 메모리 세그먼트의 최대 크기(바이트)를 정의합니다. 예를 들어, 32비트 플랫폼(x86)에서 Red Hat Enterprise Linux 3 smp 커널을 사용하는 경우 사용자 프로세스의 가상 주소 공간은 3GB입니다. 32비트 플랫폼(x86)에서 Red Hat Enterprise Linux 3 Hugemem 커널을 사용하는 경우 사용자 프로세스의 가상 주소 공간은 거의 4GB입니다. 따라서 32비트 아키텍처의 smp 커널에서 SHMMAX를 4GB - 1바이트(4294967295바이트)로 설정해도 공유 메모리 세그먼트의 최대 크기가 4GB -1로 늘어나지 않습니다. Hugemem 커널을 사용하는 32비트 아키텍처에서 SHMMAX를 4GB - 1바이트로 설정하더라도 프로세스는 이렇게 큰 공유 메모리 세그먼트를 얻을 수 없습니다. 실제로 Hugemem 커널을 사용하는 Oracle 10g R1 SGA의 공유 메모리 세그먼트는 공유 라이브러리와 같은 다른 것에도 가상 주소 공간이 필요하기 때문에 약 3.42GB(약 36억 7천만 바이트)로 제한됩니다. 이는 32비트 시스템에 3개의 2GB 공유 메모리 세그먼트가 있는 경우 어떤 프로세스도 동시에 두 개 이상의 공유 메모리 세그먼트에 연결할 수 없음을 의미합니다. 또한 32비트 시스템에서 SHMMAX를 4294967296바이트(4*1024*1024*1024=4GB)로 설정하면 SHMMAX는 4GB 값을 둘러싸기 때문에 기본적으로 0바이트로 설정됩니다. 이는 SHMMAX가 32비트 시스템에서 4294967295를 초과해서는 안 된다는 의미입니다. x86-64 플랫폼에서는 가상 주소 공간이 32비트로 제한되지 않으므로 SHMMAX는 4GB보다 훨씬 클 수 있습니다. SGA는 공유 메모리로 구성되므로 SHMMAX는 SGA의 크기를 제한할 수 있습니다. SHMMAX는 SGA 크기보다 약간 커야 합니다. SHMMAX가 너무 작으면 다음과 유사한 오류 메시지가 나타날 수 있습니다.
ORA-27123: 공유 메모리 세그먼트에 연결할 수 없습니다
상하이 몰
우리의 현재 상황으로 볼 때SHMALL 설정에 대한 RedHat 문서:
이 매개변수는 시스템 전체에서 사용할 수 있는 공유 메모리 페이지의 총 개수를 설정합니다. 따라서 SHMALL은 항상 ceil(shmmax/PAGE_SIZE) 이상이어야 합니다.
Red Hat Enterprise Linux 2.1, 3, 4 및 5에서 SHMALL의 기본 크기는 2097152입니다. 이는 x86 및 x86-64 플랫폼의 9i 및 10g에 대해 Oracle이 권장하는 최소 설정입니다. 대부분의 경우 이 설정은 시스템에서 사용 가능한 총 공유 메모리 양이 2097152*4096바이트(shmall*PAGE_SIZE), 즉 8GB임을 의미하므로 충분합니다. 더 큰 메모리 페이지에 대한 구성을 지원하는 14장, 대용량 메모리 최적화, 대용량 페이지 및 대용량 페이지를 사용하지 않는 한 PAGE_SIZE는 일반적으로 4096바이트입니다.
Linux 시스템의 기본 PAGE_SIZE가 무엇인지 확실하지 않은 경우 다음 명령을 실행할 수 있습니다.
$ getconf PAGE_SIZE