오라클 학습의 메모리 할당 및 튜닝을 요약하고 정리합니다.
이 기사에서는 Oracle에 대한 관련 지식을 제공합니다. 주로 메모리 할당 및 튜닝과 관련된 문제를 소개합니다. Oracle의 메모리는 공유 및 개인 관점에서 시스템 전역 영역과 프로세스 전역 영역으로 나눌 수 있습니다. 모두에게 도움이 되기를 함께 살펴보겠습니다.
추천 튜토리얼: "Oracle Learning Tutorial"
1. 개요
오라클의 메모리는 공유와 프라이빗, 즉 SGA 관점에서 시스템 전역 영역과 프로세스 전역 영역으로 나눌 수 있습니다. 및 PGA(프로세스 글로벌 영역 또는 프라이빗 글로벌 영역)입니다. SGA 영역의 메모리는 전역적으로 공유됩니다. Oracle의 경우 공유 메모리 세그먼트(하나 이상일 수 있음)를 설정해야 합니다. 왜냐하면 Oracle은 UNIX에서는 다중 프로세스이고 Oracle은 단일이기 때문입니다. 프로세스(다중 스레드)이므로 공유 메모리 세그먼트를 설정할 필요가 없습니다. PGA는 프로세스(스레드) 전용 영역입니다. Oracle이 공유 서버 모드(MTS)를 사용하는 경우 PGA의 일부, 즉 UGA가 공유 메모리 Large_pool_size에 배치됩니다.
Oracle 메모리 아키텍처 구성 사진을 게시하면 사진의 표시에 따라 주요 매개변수와 매개변수 이름을 한눈에 볼 수 있습니다.
SGA 부분에 대해서는 sqlplus 쿼리를 통해 확인하세요:
SQL> select * from v$sga; NAME VALUE ---------- -------------------- Fixed Size 454032 Variable Size 109051904 Database Buffers 385875968 Redo Buffers 667648
고정 크기:
오라클은 플랫폼과 버전에 따라 다를 수 있지만 특정 환경에서는 고정된 값으로 SGA의 각 구성 요소에 대한 정보를 저장하며 SGA 구축을 안내하는 영역이라고 볼 수 있습니다.
가변 크기:
shared_pool_size, java_pool_size, Large_pool_size 및 기타 메모리 설정을 포함합니다
데이터베이스 버퍼:
은 데이터 버퍼를 나타냅니다.
8i에서는 db_block_buffer*db_block_size, buffer_pool_keep 및 buffer_pool_recycle의 세 가지 메모리 부분을 포함합니다.
9i에서는 db_cache_size, db_keep_cache_size, db_recycle_cache_size, db_nk_cache_size를 포함합니다.
리두 버퍼:
은 로그 버퍼 log_buffer를 의미합니다. 여기서 추가적으로 주목해야 할 점은 v$parameter, v$sgastat, v$sga에 대한 쿼리 값이 다를 수 있다는 것입니다. v$parameter의 값은 사용자의 이니셜 을 나타냅니다.
초기화 매개변수 파일 v$sgastat에 설정된 값은 오라클에서 실제로 할당한 로그 버퍼 크기입니다(버퍼의 할당 값은 실제로 이산적이며, 블록 내에서 가장 작은 단위로 할당되지 않기 때문입니다),
v$sga에서 쿼리한 값은 Oracle이 로그 버퍼를 할당한 후 로그 버퍼를 보호하기 위해 일부 보호 페이지가 설정된다는 것입니다. 일반적으로 보호 페이지의 크기는 약 11k(약 11k)입니다. 다른 환경에서는 다를 수 있습니다).
2. SGA 내부 매개변수 및 설정:
2.1 Log_buffer 일반적으로 로그 버퍼 크기 설정에 대한 제안은 그리 많지 않다고 생각합니다. 왜냐하면 LGWR에서 작성한 트리거 조건을 참조하면 일반적으로 3M를 초과하는 것은 그다지 의미가 없다는 것을 알 수 있기 때문입니다. 정식 시스템으로는
이 부분을 먼저 log_buffer=3-5M 크기로 설정한 후 특정 상황에 맞게 조정하는 것을 고려해 볼 수 있습니다. log_buffer는 Redo 로그의 버퍼입니다. 여기서 Redo Log의 Trigger Event(LGWR)를 이해해야 합니다 1. Redo 로그 버퍼의 용량이 1/3에 도달하면 2. 도달, 일반적으로 3 초입니다. 3. 리두 로그 버퍼의 리두 로그 용량이 1M에 도달합니다. 4. DBWn이 버퍼의 데이터를 데이터 파일에 쓰기 전 5. 위의 결론은 다른 말로 표현할 수 있습니다 1.log_buffer의 내용이 1/3이 차면 캐시가 한 번 새로 고쳐집니다. 2. 최대 간격은 3초이며, 캐시는 한 번 새로 고쳐집니다. 3 log_buffer의 데이터가 1M에 도달하면 캐시가 한 번 새로 고쳐집니다. 4 "트랜잭션"이 제출될 때마다 캐시가 새로 고쳐집니다. 2.2 Large_pool_size 대형 버퍼 풀 설정의 경우 MTS를 사용하지 않는 경우 다음을 권장합니다. 20-30M이면 충분합니다. 이 부분은 주로 병렬 질의 시 일부 정보를 저장하는 데 사용되며, 백업 시 RMAN에서 사용할 수도 있습니다.
MTS가 설정되면 UGA 부분이 여기로 옮겨지기 때문에 이 부분의 크기는 서버 프로세스 수와 관련 세션 메모리 매개 변수 설정을 기반으로 종합적으로 고려해야 합니다. 2.3 Java_pool_size
데이터베이스가 JAVA를 사용하지 않는 경우 일반적으로 10-20M 정도만 유지하면 충분하다고 생각합니다. 실제로는 32k 이상일 수도 있지만 데이터베이스 설치 시 구성 요소(예: http 서버)에 따라 다릅니다. 2.4 Shared_pool_size Shared_pool_size 오버헤드는 일반적으로 300M 이내로 유지되어야 합니다. 시스템이 많은 저장 프로시저, 함수 및 패키지를 사용하지 않는 한,
oracle erp와 같은 애플리케이션은 500M 이상에 도달할 수 있습니다. 따라서 우리는 1G 메모리를 갖춘 시스템을 가정하고 다음을 고려할 수 있습니다.
이 매개변수를 100M로 설정하세요. 2G 시스템의 경우 150M로 설정하는 것이 좋습니다. 8G 시스템의 경우 200~300M으로 설정하는 것이 좋습니다. 2.5SGA_MAX_SIZE SGA 영역에는 다양한 버퍼와 메모리가 포함됩니다. pools 이며 대부분은 특정 매개변수를 통해 크기를 지정할 수 있습니다. 그러나 값비싼 자원이기 때문에 시스템의 물리적 메모리 크기는 제한되어 있습니다.
실제 물리적 메모리 크기가 CPU 메모리 주소 지정과 관련될 필요는 없지만(이에 대해서는 나중에 자세히 소개합니다), 가상 메모리를 과도하게 사용하면 페이지 인/아웃이 발생합니다.
시스템 성능에 큰 영향을 미치며 시스템 충돌을 일으킬 수도 있습니다. 따라서 SGA에서 사용하는 가상 메모리의 최대 크기를 제어하는 매개변수가 필요합니다. 이 매개변수는 SGA_MAX_SIZE입니다. 인스턴스가 시작되면
각 메모리 영역은 인스턴스에 필요한 최소 크기만 할당하며, 필요에 따라 크기가 확장되며 전체 크기는 SGA_MAX_SIZE로 제한됩니다. OLTP 시스템의 경우 다음을 참조하세요. 시스템 메모리 SGA_MAX_SIZ E 값 1G ㅋㅋㅋ 4G 2500M 8G 5G 2.6 PRE_PAGE_SGA Oracle 인스턴스가 시작되면 각 메모리 영역 중 가장 작은 크기만 로드됩니다. 그리고 다른 SGA 메모리는 가상 메모리로만 할당되는데,
프로세스가 해당 페이지에 닿았을 때만 물리 메모리에서 교체됩니다. 그러나 일단 인스턴스가 시작되면 모든 SGA가
모두 물리적 메모리에 할당됩니다. 이때 PRE_PAGE_SGA 파라미터를 설정하면 목적을 달성할 수 있다. 이 매개변수의 기본값
은 FALSE입니다. 이는 모든 SGA가 실제 메모리에 배치되지 않음을 의미합니다. TRUE로 설정하면 인스턴스 시작 시 모든 SGA가 물리적 에 배치됩니다.
추억에. 인스턴스를 최대 성능 상태까지 시작할 수 있지만 시작 시간도 더 길어집니다(왜냐하면 모든 SGA를
물리적 메모리에 배치되며 Oracle 프로세스는 모든 SGA 페이지를 터치해야 합니다. 2.7 LOCK_SGA SGA가 페이지 인/아웃 없이 물리적 메모리에 잠겨 있는지 확인하려면 LOCK_SGA 매개변수를 통해 제어할 수 있습니다.
이 매개변수의 기본값은 FALSE입니다. TRUE로 지정하면 모든 SGA가 물리적 메모리에 잠길 수 있습니다. 물론이죠,
일부 시스템은 메모리 잠금을 지원하지 않으므로 이 매개변수는 유효하지 않습니다. 2.8 SGA_TARGET 여기서 소개하고 싶은 것은 Oracle10g에 도입된 매우 중요한 매개변수이다. 10g 이전에는 SGA의 다양한 메모리 영역
의 크기는 해당 매개변수를 통해 지정해야 하며, 그 합은 가 아닐 수 있지만 매개변수에 지정된 크기 값을 초과할 수 없습니다.
SGA의 최대 한도에 도달하지 않았습니다. 또한, 한번 할당되면 각 영역의 메모리는 해당 영역에서만 사용할 수 있으며 서로 공유할 수 없습니다.
SGA에서 가장 중요한 두 가지 메모리 영역인 버퍼 캐시와 공유 풀을 선택하면 인스턴스 성능에 가장 큰 영향을 미칩니다.
하지만 이런 모순이 있습니다. 메모리 리소스가 제한되어 있으면 때로는 캐시할 데이터에 대한 수요가 매우 클 수 있습니다.
버퍼 적중을 개선하려면 버퍼 캐시를 늘려야 합니다. 그러나 제한된 SGA로 인해 공유 풀을 줄이는 등 다른 영역에서만 "강탈"할 수 있습니다.
에 대한 값을 지정하면
当项目的生产环境出现性能问题,我们如何通过判断那些参数需要调整呢? 3.1 检查ORACLE实例的Library Cache命中率: 标准:一般是大于99%
检查方式: 处理措施:
如果Library cache Hit Ratio的值低于99%,应调高shared_pool_size的大小。通过sqlplus连接数据库执行如下命令,调整shared_pool_size的大小:
3.2 检查ORACLE实例的Data Buffer(数据缓冲区)命中率: 标准:一般是大于90%
检查方式:
处理措施:
如果HIT RATIO的值低于90%,应调高db_cache_size的大小。通过sqlplus连接数据库执行如下命令,
调整db_cache_size的大小
3.3 检查ORACLE实例的Dictionary Cache命中率: 标准:一般是大于95% 检查方式: 处理措施: 如果Data Dictionary Hit Ratio的值低于95%,应调高shared_pool_size的大小。通过sqlplus连接数据库执行如下命令,调整shared_pool_size的大小: 3.4 检查ORACLE实例的Log Buffer命中率: 标准:一般是小于1% 检查方式: 处理措施: 如果Ratio高于1%,应调高log_buffer的大小。通过sqlplus连接数据库执行如下命令,调整log_buffer的大小: 3.5 检查undo_retention: 标准:undo_retention 的值必须大于max(maxquerylen)的值 检查方式: 处理措施: 如果不满足要求,需要调高undo_retention 的值。通过sqlplus 连接数据库执行如下命令,调整undo_retention 的大小: 注:
32bit 和 64bit 的问题
对于 oracle 来说,存在着 32bit 与 64bit 的问题。这个问题影响到的主要是 SGA 的大小。在 32bit 的数据库下,通常 oracle 只能使用不超过 1.7G 的内存,即使我们拥有 12G 的内存,但是我们却只能使用 1.7G,这是一个莫大的遗憾。假如我们安装 64bit 的数据库,我们就可以使用很大的内存,我们几乎不可能达到上限。但是 64bit 的数据库必须安装在 64bit 的操作系统上,可惜目前 windows 上只能安装 32bit 的数据库,我们通过下面的方式可以查看数据库是 32bit 还是 64bit 그러나 특정 운영 체제에서는 특정 수단이 제공되어 1.7G 이상의 메모리를 사용하여 2G 이상에 도달할 수 있습니다.
추천 튜토리얼: "Oracle Tutorial" 위 내용은 오라클 학습의 메모리 할당 및 튜닝을 요약하고 정리합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요! 사실적인 누드 사진을 만들기 위한 AI 기반 앱 사진에서 옷을 제거하는 온라인 AI 도구입니다. 무료로 이미지를 벗다 AI 옷 제거제 AI Hentai를 무료로 생성하십시오. 사용하기 쉬운 무료 코드 편집기 중국어 버전, 사용하기 매우 쉽습니다. 강력한 PHP 통합 개발 환경 시각적 웹 개발 도구 신 수준의 코드 편집 소프트웨어(SublimeText3) Oracle 테이블 스페이스 크기를 쿼리하려면 다음 단계를 따르십시오. 쿼리를 실행하여 테이블 스페이스 이름을 결정하십시오. 쿼리를 실행하여 테이블 스페이스 크기를 쿼리하십시오. sum (bytes)을 total_size, sum (bytes_free)으로 sum (bytes_free), sum (bytes) - sum (bytes_free)으로 dba_data_fices where tablespace_. Oracle 테이블 작성에는 다음 단계가 필요합니다. 테이블 작성 구문을 사용하여 테이블 이름, 열 이름, 데이터 유형, 제약 조건 및 기본값을 지정하십시오. 테이블 이름은 간결하고 설명 적이어야하며 30자를 초과해서는 안됩니다. 열 이름은 설명 적이어야하며 데이터 유형은 열에 저장된 데이터 유형을 지정합니다. NOT NULL 제약 조건은 열에서 NULL 값이 허용되지 않도록하고 기본 조항은 열의 기본값을 지정합니다. 테이블의 고유 한 레코드를 식별하기위한 주요 주요 제약. 외국 키 제약 조건은 테이블의 열이 다른 테이블의 기본 키를 지칭하도록 지정합니다. 기본 키, 고유 한 제약 조건 및 기본값이 포함 된 샘플 테이블 학생의 생성을 참조하십시오. 데이터 가져 오기 방법 : 1. SQLLOADER 유틸리티 사용 : 데이터 파일 준비, 제어 파일 작성 및 SQLLOADER 실행; 2. IMP/EXP 도구를 사용하십시오 : 데이터 내보내기, 데이터 가져 오기. 팁 : 1. 빅 데이터 세트에 권장되는 SQL*로더; 2. 대상 테이블이 존재해야하고 열 정의가 일치해야합니다. 3. 가져 오기 후에는 데이터 무결성을 확인해야합니다. Oracle View 암호화를 사용하면보기에서 데이터를 암호화 할 수 있으므로 민감한 정보의 보안을 향상시킬 수 있습니다. 단계에는 다음이 포함됩니다. 1) 마스터 암호화 키 생성 (MEK); 2) 암호화 된 뷰 생성, 암호화 할보기 및 MEK를 지정하는 것; 3) 사용자가 암호화 된보기에 액세스하도록 승인합니다. 암호화 된 뷰 작동 방식 : 사용자가 암호화 된보기를 쿼리 할 때 Oracle은 MEK를 사용하여 데이터를 해독하여 공인 사용자 만 읽기 쉬운 데이터에 액세스 할 수 있도록합니다. Oracle에서 인스턴스 이름을 보는 세 가지 방법이 있습니다. 명령 줄에 명령. "show instance_name"을 사용하십시오. sql*plus의 명령. 운영 체제의 작업 관리자, Oracle Enterprise Manager 또는 운영 체제를 통해 환경 변수 (Linux의 Oracle_Sid)를 확인하십시오. Oracle 설치 실패에 대한 방법 제거 : Oracle Service를 닫고 Oracle Program 파일 및 레지스트리 키 삭제, Oracle 환경 변수를 제거하고 컴퓨터를 다시 시작하십시오. 제거되지 않으면 Oracle 범용 제거 도구를 사용하여 수동으로 제거 할 수 있습니다. Oracle에는 시간을 얻는 방법이 있습니다. current_timestamp : 현재 시스템 시간을 반환합니다. Systimestamp : current_timestamp보다 나노 초보다 더 정확합니다. sysdate : 시간 부분을 제외하고 현재 시스템 날짜를 반환합니다. to_char (sysdate, 'yyy-mm-dd hh24 : mi : ss') : 현재 시스템 날짜와 시간을 특정 형식으로 변환합니다. 추출 : 1 년, 월 또는 시간과 같은 시간 값에서 특정 부분을 추출합니다. AWR 보고서는 데이터베이스 성능 및 활동 스냅 샷을 표시하는 보고서입니다. 해석 단계에는 다음이 포함됩니다 : 활동 스냅 샷의 날짜 및 시간 식별. 활동 및 자원 소비에 대한 개요를 봅니다. 세션 활동을 분석하여 세션 유형, 자원 소비 및 대기 이벤트를 찾으십시오. 느린 SQL 문, 자원 경합 및 I/O 문제와 같은 잠재적 성능 병목 현상을 찾으십시오. 대기 이벤트를보고, 성능을 위해 식별하고 해결하십시오. 래치 및 메모리 사용 패턴을 분석하여 성능 문제를 일으키는 메모리 문제를 식별하십시오.三、oracle 内存调优办法
select 1-(sum(reloads)/sum(pins)) "Library cache Hit Ratio" from v$librarycache;
SQL>alter system flush shared_pool;
SQL>alter system set shared_pool_size=设定值 scope=spfile;
select 1 - (phy.value / (cur.value + con.value)) "HIT RATIO"
from v$sysstat cur, v$sysstat con, v$sysstat phy
where cur.name = 'db block gets'
and con.name = 'consistent gets'
and phy.name = 'physical reads';
SQL>alter system set db_cache_size=设定值 scope=spfile
select 1 - (sum(getmisses) / sum(gets)) "Data Dictionary Hit Ratio"
from v$rowcache;
SQL>alter system flush shared_pool;
SQL>alter system set shared_pool_size=设定值 scope=spfile;
select (req.value * 5000) / entries.value "Ratio"
from v$sysstat req, v$sysstat entries
where req.name = 'redo log space requests'
and entries.name = 'redo entries';
SQL>alter system set log_buffer=设定值 scope=spfile;
col undo_retention format a30
select value "undo_retention" from v$parameter where name='undo_retention';
select max(maxquerylen) From v$undostat Where begin_time>sysdate-(1/4);
SQL>alter system set undo_retention= 设定值 scope=spfile;
핫 AI 도구
Undresser.AI Undress
AI Clothes Remover
Undress AI Tool
Clothoff.io
AI Hentai Generator
인기 기사
뜨거운 도구
메모장++7.3.1
SublimeText3 중국어 버전
스튜디오 13.0.1 보내기
드림위버 CS6
SublimeText3 Mac 버전
뜨거운 주제
7500
15
1377
52
78
11
52
19
19
54
Oracle의 테이블 스페이스 크기를 확인하는 방법
Apr 11, 2025 pm 08:15 PM
Oracle에서 테이블을 만드는 방법
Apr 11, 2025 pm 08:00 PM
Oracle 데이터베이스를 가져 오는 방법
Apr 11, 2025 pm 08:06 PM
Oracle View를 암호화하는 방법
Apr 11, 2025 pm 08:30 PM
Oracle의 인스턴스 이름을 보는 방법
Apr 11, 2025 pm 08:18 PM
Oracle 설치를 제거하는 방법에 실패했습니다
Apr 11, 2025 pm 08:24 PM
오라클에서 시간을 얻는 방법
Apr 11, 2025 pm 08:09 PM
Oracle AWR 보고서를 읽는 방법
Apr 11, 2025 pm 09:45 PM