본문 바로가기
DBMS

OPS(Oracle Parallel Server) 개념의 이해

by 레이루이 2008. 5. 7.
반응형


OPS(Oracle Parallel Server)는 두대이상의 장비가 하나의 디비를 사용하게 됩니다.
여기서 디비가 하나라는 의미는 데이타화일들이 동일하다는 의미이지요.
장비가 두대 이상이라는 의미는 하드웨어와 시스템의 O/S, 그리고 오라클 인스턴스가 둘이상이라는 것이지요.
그러면 여기서 ops(oracle parallel server)을 셧다운하거나 스타트한다면 어떤부분이 셧다운되거나 스타트된다는 것일까요?
당연히 그것은 인스턴스를 말하는것입니다.
인스턴스는 각각 이름이 있지요. 디비의 이름은 동일하지만 인스턴스는 각각 다른 이름을 가지고 있지요.
그것이 바로 SID입니다.
결론을 말하면 오라클유저의 환경에서 원하는 SID로 바꾸고 셧다운하거나 스타트를 하면 되지요.
물론 각각의 장비에 각각의 인스턴스가 돌아가기 때문에 환경설정에서 이미 각각의 장비에 맞게 되어 있으니 그냥 보통때처럼 하시면 되지요.

ops(oracle parallel server)에서 parallel server의 의미가 디비자체를 나타내는게 아니고 시스템과 인스턴스라는 것을 이해한다면 나머지는 스스로 알수가 있을 것입니다.
그럼 이만.


아주 간단 합니다.
서버 두대가 같은 db를 parallel 하게 쓰고 있는 경우 이니깐여..
system1에서 oracle user 로 login
svrmg> startup parallel

system2에서도 마찬가집니다.


오라클 OPS 는 하드웨어적인 CLUSTER랑은 틀립니다.

하나의 물리적인 데이터 베이스에 대해서 여러개의 인스턴스를 별개의

서버에 띄우는 것입니다.(9i 에서 RAC 로 이름 변경 되었죠?)

전체의 인스턴스에 대해 락을 관리하게 되구요.

성능상에 장점이 있지요...각각의 서버가 접속에 대해 처리를 하게 되니...

오라클 회장 말로는 서버를 증가하면 그 수에 비례하게 성능 분담, 향상이

된다고...

100만개의 ROW를 가진 테이블을 두개로 자르는 거랑은 틀리지요...

그건 테이블 싸이즈의 절반크기로 DATAFILE 을 2개로 만들면 가능하겠네요.

도움이 되셨는지...

Q.
ops(oracle parallel server)는 두대이상의 서버가 하나의 디비를 쓰게되있는데 여러대의 서버가 ip도 다르고 한데 외부에서 볼때 이게 하나의 서버처럼 보여야 되지 않나요. 그럼 어떤방식으로 여러대의 서버가 하나의 서버처럼 보일수있는지?

하나의 서버에서 failure가 발생하면 다른 서버에서 이것을 감지해서 그것을 대신 수행하고 결과를 돌려준다고 하면 실패한 서버로 붙은 사용자에게 어떻게 결과를 돌려주죠. 이런게 여러대의 서버가 외부에서 하나의 서버처럼 보이게 시스템을 구축해야 될것 같은데

또 ops상에서는 쿼리 날리는것도 다른가요 .. 질의에 대한 task가 크면 여러 장비에서 나누어 처리한다고 해서,병렬처리는 하나의 장비에 cpu가 여러게 있을때 cpu에서 나누어서 처리하잖아요 그런데 서버를 여러개 붙인경우 각각의 서버가 나누어서 처리하는건가요 ..

너무 기본없이 질문을 올리는것 같은데 무식한 중생 개도한다는 차원에서
좀 자세히 알려주세요. 만약 제가 어뚱한 방향으로 개념을 가지고 질문드린거라면 잘못된 방향도 좀 잡아주시고 책을봐도 ops에대해 제가 궁금하게 여기는 점을 찾을수가 없네요

A.
외부에서 볼때는 오라클 서버들 앞에 로드벨런싱하는 스위치가 하나 있을겁니다. -_-;;
거기로 리퀘스트를 날리면 이넘이 서버들 중에서 로드벨런싱하는 방법에 따라 다르겠지만... 여하튼...

이중에 한넘한테 다시 날리겠죠?

그리고 failure의 경우 ops는 잘 모르겠구요... -_-;;

RAC의 경우에는 각 서버들은 모든 상태(DBBC, 사용자 세션정보 등...)를 공유합니다.

하나가 실패하면 다른 넘이 모든 정보를 완벽히 처리하니까

사용자는 서버가 죽은지도 모를겁니다. ^^;

혹시 틀린거 있다면 코멘트 달아 주세요.

저도 짧은 영어실력에 메뉴얼 본거니까요. -_-;;;


Q.
로드벨런싱하는 스위치에 리퀘스트를 날리면 이넘이 서버들 중에서 한넘한테 다시 날린다고 하셨는데 ops자료를 보니 (rac나 ops나 거기서 거기겠죠) 하나의 질의에 대해 task가 크면 서버들이 (자료에서는 이것을 노드라고 표현하더라구요 ) 나누어서 처리한다고 했거든요. 병렬처리에서 하나의 작업을 여러 cpu에서 나누어 처리하듯이 .. 하나의 질의를 서버들이 나누어서 처리할수있나요 있다면 어떻게 가능한거죠 ?
병렬처리에 보면 cpu를 3개달아 2개에서 나누어 작업한것을 나머지 하나가 병합하는 작업을하고 이런식으로 한다고 책에서 봤거든요..
ops에서 서버를 여러게 붙였을때 cpu가 여러게 달린것은 그 서버안에서 병렬처리가 가능하겠죠.. 그런데 한서버안에서 병렬처리하는게 아니라, 하나의 질의에 대해 각각의 서버에 작업을 나누어주는 병렬처리가 가능하다고 한거 같거든요..
만약 이게 가능하다면 개발자 입장에서는 질의를 날릴때 고려해야 될사항들이 있나요. (쿼리가 달라지나) 이 점에 대해서 알고 싶어요.

Answer : OPS는 두개 이상의 노드와 두개 이상의 인스턴스로 구성되며 하나의 DB를 가지고 있습니다.
각 노드는 별도 동작을 할 수 있으며 쿼리문은 크게 바뀌지는 않습니다. 다만, 각각의 노드에서 쿼리를 실행코저할 때에는 세션을 맺을 때 SQL*Net을 사용하여 쿼리를 수행하시면 됩니다.
OPS는 DLM이라는 lock 에 대해 관할하는 것이 있습니다. 이를 통해 두개의 인스턴스의 활동을 감사하고 DB의 동일성을 유지하는 메카니즘을 가지고 있습니다.
CPU에 일을 할당하여 처리하는 것은 paralle Query 옵션에 해당하는 것입니다. 이 경우는 CPU 할당을 통해 Query를 병렬 처리할 수 있겠네요.
OPS는 서버의 병렬은 PQ는 CPU의 병렬처리...


오라클에서 parallel로 사용한다는 의미를 파악하시면 되겠군요.
오라클 디비는 두가지로 구성되지요.
인스턴스와 데이타화일
여기서 OPS는 여러개의 인스턴스가 공동으로 데이타화일을 사용하는것이지요.
인스턴스에는 각각의 백그라운드 프로세스가 생성됩니다.
그러니 접속하는 곳에따라 사용하는 인스턴스가 달라지니까 백그라운드 프로세스도 달라질수 밖에 없는 것입니다.
디비는 하나뿐이나 어디서던지 같은 이름인게 당연하구요.
이해하셨는지 모르겠군요.
그럼 이만.

반응형