2009-09-09 3 views
5

아마 이것은 정상이지만 내 Oracle 11g 데이터베이스에서 오라클 SQL Developer를 사용하는 프로그래머는 정기적으로 100MB 이상의 UGA 및 PGA 결합 메모리를 사용합니다. 나는 이것이 정상적인 지, 그리고 그것에 대해 할 수 있는지 알고 싶다. 우리 데이터베이스는 Windows 2008의 32 비트 버전에 있으므로 메모리 제한이 점차 커지고 있습니다.100MB 이상의 PGA를 사용하는 SQLDeveloper

SELECT e.SID, e.username, e.status, b.PGA_MEMORY 
FROM v$session e 
LEFT JOIN 
    (select y.SID, y.value pga, 
     TO_CHAR(ROUND(y.value/1024/1024),99999999) || ' MB' PGA_MEMORY 
    from v$sesstat y, v$statname z 
    where y.STATISTIC# = z.STATISTIC# and NAME = 'session pga memory') b 
ON e.sid=b.sid 
WHERE (PGA)/1024/1024 > 20 
ORDER BY 4 DESC; 

리소스 사용이 테이블이 SQLDeveloper에서 열립니다 모든 시간을가는 것 같다,하지만 닫더라도 메모리가 사라지지 않는 : 나는 메모리 사용량을 표시하려면 다음 쿼리를 사용하고 있습니다. 더 많은 메모리를 사용하는 것처럼 열리는 동안 테이블을 정렬하면 문제가 더 심해집니다. 나는 그것이 정렬되는 동안 메모리가 어떻게 사용되는지, 그리고 메모리가 열린 상태에서도 메모리를 사용하는 방법을 이해하지만, 닫힌 후에 메모리를 사용하는 것은 나에게 잘못된 것처럼 보인다. 아무도 이것을 확인할 수 있습니까?

업데이트 : the UGA is stored in the PGA under dedicated server mode을 이해하지 못해서 내 번호가 유용하지 않음을 발견했습니다. 이로 인해 숫자가 줄어들지 만 SQL Developer가 과도한 PGA를 사용하는 것으로 보이는 문제는 여전히 남아 있습니다.

답변

3

아마도 SQL Developer는 커서가 열린 커서를 닫지 않습니다. 백만 열을 정렬하는 쿼리를 실행하고 SQL Developer가 처음 20 행 만 가져 오는 경우 아래로 스크롤하고 더 많이 가져 오려면 커서를 열린 상태로 유지해야합니다.

커서가 열려 있고 EOF (끝내기 페치)에 도달하지 않는 한 커서 정렬 영역과 연관된 일부 PGA 메모리를 계속 할당해야합니다 (유지 정렬 영역이라고 함) .

세션을 선택하고 실행

select sql_id,operation_type,actual_mem_used,max_mem_used,tempseg_size 
from v$sql_workarea_active 
where sid = &SID_OF_INTEREST 

일부 커서가 여전히 메모리에 열려 유지 여부를이 표시되어야합니다 ...

+0

+1 정확합니다. SQLDeveloper에서 테이블을 닫은 후에도이 값을 메모리에 유지하는 것으로 보입니다. 버전 3은 곧 출시 될 예정이므로 아마도 문제가 있는지 기다리고, SR이있는 경우 SR을여십시오. 우리는 64 Bit로 업그레이드하고 메모리를 3 배로 늘 렸기 때문에 현재이 문제에 대해 덜 우려하고 있습니다. –

0

자동 메모리 관리를 사용하고 있습니까? 그렇다면 사용 된 PGA 메모리에 대해 걱정하지 않아도됩니다.

참조 문서 :

자동 메모리 관리 : http://download.oracle.com/docs/cd/B28359_01/server.111/b28310/memory003.htm#ADMIN11011

MEMORY_TARGET : http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/initparams133.htm

는 32 비트 오라클을 사용하는 이유가 있나요? 가장 최근의 하드웨어는 64 비트를 지원합니다.

+0

예, 우리는 자동 메모리 관리를 사용하고 있지만, 왜 PGA 사용이 걱정되지 않을지 모르겠다. 필요한 경우 시스템이 SGA의 크기를 조정하여 PGA에 더 많은 메모리를 제공 할 수 있지만 버퍼 캐시, 공유 풀 또는 다른 영역이 너무 작 으면 성능 문제가 발생할 수 있습니다. –

+0

저희 하드웨어는 64 비트를 지원하며 최근에 11g에서 Windows 2008 64 비트로 마이그레이션하려고 시도했지만 오라클이 11g에서 이기종 서비스를 더 이상 지원하지 않으며 대체 dg4odbc가 32 비트 버전에서만 작동한다는 테스트에서 발견되었습니다. 지원은 11.2에 나옵니다. 이것을 설명하고 받아 들일 수없는 해결책을 제시하는 Metalink의 361676.1을 보라. –

+1

>> 그러나 버퍼 캐시, 공유 풀 또는 다른 영역이 너무 작 으면 성능 문제가 발생할 수 있습니다. AMM을 사용하는 경우 Oracle을 관리하여 메모리를 관리해야합니다. 실제 성능 문제가있는 경우 Oracle의 다양한 도구를 사용하여 조사 할 수 있습니다. 호기심이 생기면 개발자 세션을 추적하고 PGA 메모리를 사용하여 수행중인 작업을 파악할 수 있습니다. 11gR2가 HS 문제를 해결하기를 바랍니다. 32 비트로 Oracle을 실행하는 것은 어렵습니다. –

0

특히 AMM을 사용하는 Oracle은 사용자가 지정한 시스템의 모든 메모리를 사용합니다. 메모리를 할당 해제 할 이유가 없다면 그렇게하지 않을 것입니다. 저장 공간과 동일합니다. 20GB의 사용자 데이터를 삭제하면 해당 공간이 OS로 반환되지 않습니다. 오라클은 명시 적으로 테이블 스페이스를 압축하지 않는 이상 유지할 것입니다.

간단한 테스트를 통해 문제를 해결할 수 있다고 생각합니다. 32 비트이고 각 SQL Developer 세션이 100MB + RAM을 사용하는 경우, 메모리가 부족한 문제를 일으키기 위해 열리는 세션이 수 백 개에 불과합니다 ... 실제로 존재하는 경우.

+0

프로세스 메모리 오류가 없어 질 때까지 세션 생성 및 메모리 사용 제안을 테스트했습니다. SQLDeveloper의 첫 번째 세션에서 테이블의 데이터 탭을 열고 테이블을 정렬했습니다. 연결은 65MB의 메모리를 사용했습니다. 그런 다음 테이블을 닫았지만 연결은 65MB를 계속 유지했습니다. ORA-04030 Out of Process 메모리를받을 때까지 다른 세션을 만들고 메모리를 사용하기 시작했습니다. 나의 원래 세션은 여전히 ​​65MB를 사용하고 있었고 내가 닫을 때까지 그렇게했다. –

관련 문제