여러 Oracle 인스턴스-이것이 좋은 습관입니까?


9

내 고객 중 하나가 제품의 db를 이미 3 개의 Oracle 인스턴스가있는 Solaris 시스템에 배포했습니다. 따라서 현재 동일한 머신에서 4 개의 Oracle 인스턴스가 실행되고 있습니다. 그리고 지금 우리는 성능 문제를 겪고 있습니다.

다른 인스턴스 나 시스템에 액세스 할 수 없으며 내가 가진 모든 도구는 alert.log, AWR 및 ADDM입니다. 여러 인스턴스와 관련이 있다는 것을 알고 있지만 증명할 수는 없습니다.

제 질문은 비슷한 상황을 경험 한 것입니까? 어떻게 처리해야합니까? 여러 인스턴스와 관련된 성능 문제의 원인을 어떻게 식별 할 수 있습니까?

답변:


8

Isaac, 바람직하게는 하나의 서버에서 하나의 인스턴스를 실행하고 해당 단일 데이터베이스에서 다른 애플리케이션을 스키마 및 서비스로 구현합니다. 서버에 충분한 메모리가 있으면 응용 프로그램이 모두 훌륭한 오라클 시민처럼 행동하면 문제가 없습니다. 바인드 변수를 사용하지 않는 응용 프로그램이있는 즉시 호스트에 고통이 커지고 있습니다. 기존 연결을 재사용하는 대신 몇 초마다 새 연결을 계속 생성하는 응용 프로그램의 경우와 동일합니다. 자동 커밋과 같은 것도 상황을 개선하는 데 도움이되지 않습니다. 응용 프로그램의 정상적인 동작은 무엇입니까? 큰 업데이트를 수행합니까? 커밋은 언제 이루어 집니까? 생성 / 시간은 얼마나 되나요? 앱이 바인드 변수를 사용합니까? 대부분의 경우 온라인 리두 로그 파일의 위치는 중요합니다. 앱이 많은 리두를 생성하거나 (또는이 작업을 수행하는 다른 앱과 경쟁하는 경우) 세션이 로그 파일 쓰기가 완료되기를 기다리기 때문에 로그 라이터가 느려지고 성능이 크게 저하됩니다. 고객에게 redo가 전용 RAID 10 디스크에있는 디스크 레이아웃을 제공하고 이것이 얼마나 도움이되는지 확인하십시오. 또한 메모리 할당 상황을 찾으십시오. 사용 가능한 메모리를 공정하게 재배포해야 할 수도 있습니다.

이게 도움이 되길 바란다


당신이 올바른지. 인스턴스를 모니터링하고 가능한 모든 곳에서 최적화를 수행합니다. 그러나 성능은 안정적이지 않으며 때로는 설명 할만한 이유없이 떨어집니다
.

Isaac, 데이터베이스는 얼마나 자주 다시 시작되고 어떤 버전이며 자동 통계 프로세스에 의해 생성 된 열에 히스토그램이 있습니까? 바인드 변수 및 옵티 마이저 사전 엿보기를 사용합니까?
ik_zelf

2

동일한 서버에서 여러 인스턴스를 실행할 수 있으며 경우에 따라 필요합니다. oratab은 여러 인스턴스 관리를 처리하도록 특별히 설계되었습니다. 독립 응용 프로그램이 여러 개인 경우 각 응용 프로그램마다 인스턴스를 두는 것이 좋습니다.

충분한 메모리를 확보하는 것이 중요합니다. 오라클은 공유 메모리에 SGA를 구축합니다. 메모리가 충분하지 않으면 SGA 또는 프로세스가 스왑 인 및 아웃을 시작합니다. 이를 스레 싱이라고하며 성능이 크게 저하됩니다.

더 작은 SGA로 실행되도록 인스턴스를 조정할 수 있습니다. Oracle은 SGA 크기 조정을 돕는 도구를 제공합니다. 인스턴스 중 SGA가 너무 큰 인스턴스가 있으면 모든 인스턴스에 불이익을줍니다.

중요한 메모리의 또 다른 용도는 버퍼 공간입니다. 이는 보조 캐시 역할을하며 중요한 읽기 I / O를 제거 할 수 있습니다.

sar(Unix bases O / S라고 가정) 실행 하면 문제가있는 곳을 진단 할 수 있습니다. 스왑 또는 디스크 I / O 포화 문제가있을 수 있습니다. RAM을 추가하면 이러한 문제 중 하나를 해결할 수 있습니다.

디스크 I / O 포화도 일부 테이블 스페이스를 다른 디스크로 이동하여 처리 할 수 ​​있습니다. 일반적으로 I / O가 가능한 많은 디스크에 분산되도록 Oracle을 구성합니다.

편집 : 이들은 별도의 인스턴스가 필요할 수있는 몇 가지 경우입니다.

  • 동일한 서버에서 다른 버전의 Oracle을 실행하는 경우 항상 필요합니다. 응용 프로그램이 항상 최신 버전으로 인증되거나 작동하지는 않습니다.
  • 특정 시점으로 자동 롤백 할 수있는 인스턴스를 원할 수 있습니다. (추천하지는 않지만 이것을 자동화 된 테스트 환경에 사용했습니다.)
  • 애플리케이션에 하드 코딩 된 스키마 참조가있는 경우 네임 스페이스 충돌을 처리하기 위해 다른 인스턴스가 필요할 수 있습니다.
  • 별도의 인스턴스를 사용하면 보안 요구 사항을보다 쉽게 ​​처리 할 수 ​​있습니다. 이 경우 다른 서버를 사용하는 것이 적절할 수 있습니다.
  • 동일한 서버에서 서로 다른 버전의 동일한 데이터베이스 (개발, 테스트, 사용자 승인, 교육 및 프로덕션)를 실행하는 것이 별도의 인스턴스로 더 안전합니다. 이 모든 환경을 동일한 서버에서 실행하지는 않지만 종종 동일한 서버에서 둘 이상을 실행합니다.

여러 인스턴스를 실행하는 데 필요한 예제를 제공 할 수 있습니까?
ScottCher

1
@ScottCher 일부 사례를 제공하기 위해 답장을 수정했습니다.
BillThor

1

가장 중요한 리소스는 RAM입니다.

실행중인 각 Oracle 인스턴스는로드되지 않은 상태에서 시작했을 때 자체적으로 일부 RAM을 할당합니다.

8 개의 인스턴스가있는 10g 및 11g의 10g를 실행하고 있지만 개발 서버입니다. OS를 다시 시작한 후 일부 Oracle 서비스는 자동으로 시작되지 않으며 수동으로 시작해야합니다 (Oradim -startup -sid xxx).

우리는 자동 메모리 관리를 사용하기 시작했지만 디스크 공간만큼 데이터베이스를 추가 할 수있는 SQL Server와는 상황이 다릅니다.

귀하의 경우, 하나의 머신에 더 많은 인스턴스 가 있으면 각 인스턴스에 대한 SGA 가 작아지고 사전 컴파일 된 SQL을 캐시 할 수 없으며 머신은 더 많은 SQL 컴파일을 수행해야하므로 성능이 저하됩니다.

RAM을 추가하면 상황에 도움이 될 수 있습니다.


2
SQL 서버가 다른 이유는 명명법에 가깝습니다. 프로세스 그룹과 전용 메모리는 인스턴스입니다. SQL Server 데이터베이스를 추가했는데 새 프로세스가 추가되지 않으면 이는 인스턴스가 아닙니다. 이 경우 스키마를 추가하는 것이 훨씬 더 가깝습니다.
Stephanie 페이지
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.