Computer >> 컴퓨터 >  >> 프로그램 작성 >> 데이터 베이스

Oracle Database의 메모리 튜닝

메모리 조정은 여유 메모리를 Oracle 메모리 구성 요소에 분배하거나 재할당합니다. 주로 Oracle 쿼리에 대한 성능 조정에 사용됩니다.

오늘날 모든 클라이언트의 주요 문제는 데이터베이스 성능과 관련이 있습니다. 이 블로그에서는 데이터베이스의 메모리를 튜닝하여 데이터베이스에서 고성능을 얻는 방법에 대해 설명합니다. 사용 가능한 다양한 메모리 튜닝 방법은 OS 수준 프로세스 튜닝, CPU 튜닝, RAM 튜닝, 데이터베이스 튜닝 등입니다. 이 블로그에서 I 데이터베이스의 메모리 조정에 대해 논의할 예정입니다.

데이터베이스 메모리 조정:

데이터베이스에 대한 메모리 조정은 SGA(시스템 전역 영역) 조정에 불과합니다. 다음은 SGA 튜닝과 관련된 주요 구성 요소 목록입니다. 각 구성요소를 자세히 살펴보겠습니다.

  1. 풀 유지
  2. 기본 풀, 재활용 풀, 스트림 풀
  3. DB 버퍼 캐시:여유 버퍼, 수정된 버퍼, 고정된 버퍼
  4. 공유 풀

풀 유지:

매일 사용하는 특정 패키지가 있습니다. 성능을 높이려면 해당 패키지를 SGA에 유지해야 합니다. 절차의 도움으로 해당 패키지를 보관 풀에 보관할 수 있습니다. SGA에 할당된 공간이 종료되면 SGA는 보관 풀에 패키지를 보관한 후에도 RAM에 재할당해야 합니다. 플러시했다. 다음에 해당 패키지를 다시 시작하고 실행할 때 패키지는 데이터베이스를 종료할 때까지 보관 풀에 남아 있습니다. 이렇게 하면 I/O가 줄어듭니다.

히트 배급의 도움으로 구문 분석 코드 실행 계획이 라이브러리 캐시에서 플러시되는지 확인할 수 있습니다. 라이브러리 캐시의 적중률은> 85%여야 합니다.

스트림 풀 데이터 펌프용 버퍼를 만드는 데 사용됩니다. 매일 특정 테이블(작은 테이블)을 사용하여 성능을 높입니다. 이러한 테이블을 SGA(풀 유지)에 유지하는 것이 좋습니다. 이렇게 하면 디스크에서 데이터를 가져오는 것이 아니라 메모리 자체에서 데이터를 가져오는 경우 성능이 향상됩니다. 큰 테이블의 경우 재활용 풀이 있습니다.

기본적으로 블록 형태의 테이블(작은 테이블)을 선택할 때마다 데이터 버퍼 캐시에서 가져와서 기본 풀에 보관합니다. . 이 기본 풀은 다른 테이블을 선택하면 지워집니다. 버퍼에 공간이 있으면 괜찮고 그렇지 않은 경우 이전 테이블을 플러시하여 새 테이블을 수용합니다. 성능을 높이려면 기본 풀 대신 유지 풀에 작은 테이블을 유지하세요. . 데이터 버퍼 캐시의 적중률은> 95%여야 합니다. 95% 미만이면 데이터베이스 버퍼 캐시의 크기를 조정해야 합니다.

메모리 튜닝의 주요 부분은 데이터베이스 버퍼 캐시와 공유 풀로 메모리에 충분한 데이터를 유지하는 데 유용합니다. 모든 사람은 SGA 튜닝을 위한 데이터베이스 버퍼 캐시의 기본 작업을 알아야 합니다. 블로그 말미에 메모리를 조정하기 위해 적중률을 계산하는 몇 가지 샘플 SQL 쿼리 예제를 공유하겠습니다.

무료 버퍼

수정된 데이터는 이미지(데이터)를 변경하기 전에 가져온 블록과 복사본을 데이터 버퍼 캐시에 사용합니다. 이러한 버퍼를 Free Buffers라고 합니다. 아래 이미지에서 값이 1000인 디스크와 값이 1000인 메모리가 동일합니다.아래 이미지는 Free 버퍼를 보여줍니다.

수정된 버퍼

수정된 버퍼는 더티 버퍼라고도 합니다. 디스크의 이미지와 데이터의 데이터 버퍼 캐시에 있는 이미지가 변경되었지만 이러한 버퍼 또는 데이터가 아직 디스크에 기록되지 않았습니다. 이러한 버퍼를 더티 버퍼라고 합니다.

다음 이미지는 수정된 버퍼를 보여줍니다.

고정 버퍼

DB 버퍼 캐시의 데이터는 매번 변경됩니다. 서버 프로세스는 추가 트랜잭션을 위해 이러한 수정된 데이터를 선택합니다. 이 선택된 데이터는 고정된 데이터 또는 버퍼일 뿐입니다.

물리적 읽기 :Oracle이 I/O를 수행하여 디스크에서 읽는 Oracle 데이터 블록입니다.

논리적 읽기 :Oracle이 데이터베이스 버퍼 캐시 자체에서 데이터를 읽어 요청을 충족할 수 있으면 논리적 읽기 상태가 됩니다.

DB 블록 가져오기 :Oracle이 데이터베이스 버퍼 캐시에서 필요한 데이터를 찾으면 Oracle은 데이터가 커밋되었는지 여부를 확인하고 커밋된 경우 버퍼에서 가져옵니다. 이러한 버퍼를 DB 버퍼 가져오기라고도 합니다.

일관된 읽기 :데이터베이스 버퍼 캐시에서 존재하지만 수정되었지만 커밋되지 않은 블록입니다. 따라서 undo 데이터 파일에서 데이터를 가져와야 합니다.

db_buffer_cache의 목표는 논리적 읽기를 늘리는 것입니다.

소프트 파싱 :라이브러리 캐시에 이미 사용 가능한 실행 계획이 있는 경우 디스크로 이동하지 않고 기존 실행 계획에서 구문 분석 계획(파싱 코드)을 생성합니다. 이것을 소프트 구문 분석이라고 합니다.

하드 파싱 :구문 분석 코드를 생성하기 위해 실행 계획이 사용 가능한지 확인하고 실행 계획이 사용 가능한 경우 소프트 구문 분석을 수행합니다. 실행 계획을 사용할 수 없는 경우 하드 구문 분석을 수행하여 디스크로 이동합니다.

공유 풀 :Shared Pool은 Library Cache와 Data Dictionary Cache의 조합입니다.

라이브러리 캐시: 라이브러리 캐시의 목표는 소프트 파싱을 높이는 것입니다.

목표 달성 방법:

  1. 바인드 변수 사용

  2. 저장 프로시저 작성

  3. 적중률(공유 풀 크기를 늘리지 않는 경우> 85%여야 함)

  4. DBMS_Shared_pool(패키지)적중률은 SQL 쿼리를 사용하여 메모리를 튜닝하는 데 중요한 역할을 합니다.

데이터 사전 캐시 :행 캐시라고도 합니다. 데이터 사전 캐시 적중률은 공유 풀 크기를 늘리지 않는 경우>85%여야 합니다.

다음은 적중률을 계산하기 위한 샘플 쿼리입니다.

select (sum(pinhits)/sum(pins))*100 as lchitratio from v$librarycache;

select namespace, pins, pinhits, reloads from v$librarycache order by namespace;

dbms_Shared_pool 패키지를 얻으려면 @$ORACLE_HOME/rdbms/admin/dbmspool.sql을 실행하십시오.

select namespace, kept, locks, executions from v$db_object_cache where type like '%PROC%';

데이터 사전 캐시 적중률:

select (sum(gets-getmisses-fixed))/sun(gets) as "ddchitratio" from v$rowcache;

리두 로그 버퍼 캐시:

v$sysstat에서 이름, 값 선택 여기서 'redo%';와 같은 이름

위에서 논의한 사항이 유용하고 이제 데이터베이스에서 메모리를 쉽게 조정할 수 있기를 바랍니다.

피드백 탭을 사용하여 의견을 작성하거나 질문하십시오. 저희와 대화를 시작할 수도 있습니다.