데이터 이관후 실행계획 변경 문의 - Migration (Korean)

테스트 서버에서 DB를 운영하다고 export 받아서 실 서버로 이관했습니다.
오라클 버전은 동일하게 9i입니다.
오브젝트도 동일하게 이관했습니다.
그런데, 이관한 후에 인덱스를 사용하지 못하고 있습니다.
기존에 잘 되던 쿼리인데 이관 후에는 실행계획이 바뀌면서 Full Scan을 하는데 이유가 뭘까요?
서버는 둘다 Choose 모드라고 나옵니다. 

통계값이 들어가 있나요?
Choose mode에서는 아시다시피 통계값이 존재를 하면 CBO로 움직이기 때문에 어떻게 변경될지 모릅니다. 혹은 통계값은 없는데 Rule을 제외한 Hint를 사용하면 그것 또한 CBO로 움직이죠..
그것도 아니라면 CBO로 무조건 움직이는 함수를 사용했는지 확인해 보세요..(분석함수 등등)... 8i 이상에서 나온 함수들은 거의 통계값이 없다하더라도 CBO로 움직이기 때문에 서버에 따라서 플랜이 틀릴 수도 있습니다.
가능하다면 테스트 서버와 실서버에서 Rule Hint를 줘서 플랜을 보세요.. 동일하게 나오는지요..
그리고 초기 파라메타도 동일하게 주시구요..
글 수정:
jaehpark 

초기화 파라미터가 같은지 확인해보세요...
참고로, 실 서버가 테스트 서버보다
초기화 파라미터값중에 db_file_multiblock_read_count 가
큰 값이면 실행계획이 테스트 서버에서는 Index scan 하던 것을
Table Full 스캔으로 바뀔 수도 있습니다. 

exp/imp를 하면 기존 시스템에서의 통계정보도 가져가기는 합니다.
테스트를 해보기에는 A->B로 옮겼을 경우 통계정보도 같이 가져가는
것을 확인했습니다.
하지만 윗분께서 말씀하셨듯이..
DB파라미터가 다르거나 또는 같은 DB상황이라도 통계정보없이는
잘못된 execution plan을 할 가능성이 높습니다.
통계정보라함은 현 시스템에 대한 파악을 하고 나서 통계정보를
생성하기 때문에 다시 통계정보를 생성하는 것이 필요하다고
생각합니다.
예를들면..
hr유저의 10 percent 통계정보를 parallel 4로 인덱스까지 수행합니다.
exec dbms_stats.gather_schema_stats( -
OWNNAME=>'HR', -
ESTIMATE_PERCENT=>10, -
BLOCK_SAMPLE=>TRUE, -
DEGREE=>4,-
CASCADE=>TRUE -
)

Related

OPS 개념 질문

핵심은 동일한 DB Object를 서로 다른 시스템 DB Instance에서 변경(입력/수정/삭제)을 하고자하는 경우에 발생하는 Instance pinging을 최소할 수 있도록 업무의 분산 및 응응PG분산 그리고 DB설계상의 고려가 최우선 이라는 점을 명심하십시요
OPS 구성에 대해 위와 같이 들었는데요.
그럼, 트랜잭선이 많은 경우에 OPS를 구성할 수 없다는 얘기인가요? 
위의 이야기는 업무를 분리하라는 이야기 같은데요...
하나의 instance에서 동일한 object에 대한 많은 트랜잭션은 큰 의미가 없고 서로 다른 instance에서 동일한 object에 대해 변경작업을 할 경우 ping 현상이 발생하므로 퍼포먼스의 영향이 있다라고 봅니다. 
죄송한데 잘 이해가 안갑니다.
조금만 더 풀어서 알려주세요. 
하나의 instance가 수정하기 위한 블록이 다른 instance에 존재 할 경우 그 블록을 전달해 줘야 하는데 RAC(9i 이후)에서는 캐쉬퓨전이라는 개졈으로 메모리 대 메모리로 블록을 전달합니다. 그런데 OPS(8i 이하)는 블록을 전달 할 때 원래 블록을 가지고 있는 Instance가 Disk에 Write를 하면 필요한 Instace가 읽어가는 형식입니다. 이것을 Ping 현상이라고 합니다.
튜닝의 가장 기본적인 개념은 얼마나 I/O를 일으키지 않고 메모리의 효율성을 높이느냐라고 봤을 때 Ping 현상은 성능저하의 주범이 될 수 있습니다.
예를 들어서 하나의 Table을 2개의 instance가 사용한다면 서로 필요한 블록을 사용하기 위해서 지속적으로 ping 현상을 일으키고 성능에 문제를 일으킵니다. 그래서 업무를 나누어서 하나의 Table은 되도록이면 하나의 instance가 사용하도록 하여 ping 현상을 최소화 하도록 권고하고 있습니다.
RAC에서는 Ping 현상이 없어 졌다고는 하지만 inter connect의 부하 때문에 또한 업무를 나누는 것을 권고 하고 있습니다.
대답이 되었는지 모르겠네요...

부팅후 자동실행 하도록 설정하는 법

윈도우 2000에 오라클 8.1.7입니다.
오라클 설치한 후에 부팅후 자동 시작을 위해서는 레지스트리에서 ORA_SID_AUTOSTART 파라미터가 반드시 TRUE여야 하는가요?
관리도구의 서비스에서 오라클 관련 서비스를 다 자동으로 설정하면, 설치후 자동으로 부팅후 오라클이 기동되야 하는것 아닌가요?
어차피 윈도우에서 기동을 해 주는데, 레지스트리에서 ORA_SID_AUTOSTART 파라미터를 TRUE로 설정해 줘야 하는지 이해가 안갑니다. 
서비스를 시작하는 것 하고 DB를 시작하는 것 하고는 틀립니다.
일반적으로 기본 설정으로 서비스도 자동 설정하고 ORA_SID_AUTOSTART를 True로 설정해서 사용하다보니 그런 생각이 듭니다.
그런데 standby db를 구축을 할 때 그렇게 해 버리면 문제가 생깁니다.
그래서 서비스는 자동으로 하더라도 ORA_SID_AUTOSTART=false로 하죠.
테스트를 해 보시면 알겠습니다. 서비스가 자동으로 되어 있다 하더라도 ORA_SID_AUTOSTART=false로 되어 있으면 DB는 직접 올려 주셔야 합니다.

RAC에서 Multi instance ?

오라클에서는 항상 한번에 한개의 데이터베이스만 Open 하는 것으로 알고 있습니다.
그런데 RAC에서는 데이터베이스당 여러개의 Instance를 갖는다고 하던데, 그게 어떤 의미이고 어떻게 가능한 지요? 
일반적으로 많은 시스템에서 single database 를 사용하고 있기 때문에 instance와 database를 같은 의미로 사용하고 있습니다.
하지만 RAC에서는 그 의미가 확연히 틀림니다. 오라클에서 말하는 instance는 SGA 영역 + Background Process 영역을 이야기 하는 것으로 Database File은 이 안에 속하지 않습니다.
오라클에서 말하는 Database는 간단하게 말해서(어려운걸 풀어 쓸려고 하니 저도 잘 모르겠네요..) 물리적인 Database File(Datafile, Control File, Redo Log File)이라고 생각하시는게 이해하시기 편합니다.
여러 시스템에서 존재하는 각각의 Instance가 공유된(어떤 시스템이던 똑같은 Database File을 사용할 수 있다는 뜻입니다.) Database File을 특별한 LOCK 메카니즘(single database에서의 LOCK을 확장시킨거라고 보면 됩니다.)을 가지고 동시에 읽고 쓰게 됩니다.
따라서 Database는 하나지만 Instance가 여러 개이다라는 말을 하는겁니다.
글 수정:
jaehpark 
제가만든 이 문서를 보시면 될 겁니다.
너무 오래 전에 .. 대학생때던가 졸업하고 바로 취직하고 만들었던가..;;
백업 부분이 완전히 틀린 것이라.. 조금 그렇지만..
개념이해에는 도움이 될 겁니다.
9i rac에 대한 정리문서입니다.
http://www.dbguide.net/servlet/com.util.DownloadServlet?file=%2F20060227%2F1140966311018.zip&filename=RAC+%B1%E2%BC%FA%B9%AE%BC%AD%B9%DF%C7%A5_060223.zip
글 수정:
민천사 (민연홍)
생일인 오늘도 새벽5시까지.. otn에서 살다니..;;

오라클 복구 질문입니다. OS 에 따라 달라지나요?

오라클 복구 질문입니다.
현재 각 서버가 RAID 로 묶여있는 상태라 만약 백업 파일들을 ...
서버에 보관할경우 백업의 의미가 없다고 생각됩니다..
그래서 리눅스에서 백업한 데이터 파일을 제 윈도우 로컬에 오라클 XE 로
복구 해볼까 생각중입니다.
가능한 방법인가요?
복구 시 OS 나 오라클 버젼에 따라서 많이 달라지나요?
백업 방법은 가장 단순한...begin backup/end backup 백업입니다. 
오라클 업그레이드를 보면 예를들어 8i -> 9i로 업그레이드를 할 경우에는
redo log의 format이 9i에 맞도록 재설정됩니다. 또한 OS마다 S/W엔진이 다르듯이
복구시에 이기종간 데이터 이동은 불가능합니다.
(복구가 아닌 단순한 이기종간 데이터 이동은 10g transport tablespace,
rman convert 사용시 가능)
그러므로 다른 서버에서 복구시에 DB의 버젼뿐만 아니라 OS가 똑같아야 합니다.
그런데 단지 파일저장용으로는 어디에 두던지 ftp를 통해 binary로 받는다면,
상관없습니다. 하지만 DB를 start해서 기동해서 복구를 하기 위해서는
DB 와 OS버젼이 같아야 합니다.
방법으로는 같은OS 같은DB 버젼의.. 다른 서버에 NFS를 통해서
옮기는 것은 어떤지요? 또는 쉘을 만들어서 tftp로 파일을 다른 서버로
보내고 저장하는 방법도 있습니다. 그러다가 복구상황이 일어났다면
그 백업 데이터가 있는 서버에서 복구를 하면 되겠죠.
만약 같은OS 같은DB버젼이 되지 못해서 다른서버에서 저장만 한다면..
어쩔 수 없지요. 그럴 경우에는 백업본을 restore후에 복구하거나
point time 복구일 경우에는 아래 문서대로 하나의 서버에서 일부만
restore하고 DB이름을 변경한 후 복구하는 방법으로 해야 하겠습니다.
그런데 이 장비에 tape백업은 안하시나요? 
답변 감사합니다~ ^^;;;;
역시 수세9에 설치된 오라클10g는 제 PC에 설치된 윈도우XE에는 복구 가 불가능하네요^^;;;
현재 맡고 있는 서비스 들이 회사내에서는 꼭 필요하지만....
주로 게시판 서비스라서 데이터 자체가 크게 중요하지는 않습니다.
그리고 이 데이터 베이스 자체에 대해서도 회사에서 특별히 신경을 쓰지 않구요.
문제는 ....SCSI스크들이 RAID로 모두 묶여 있어서....
디스크 장애가 발생하면 아카이브든지 ... 데이터 파일이든 ...
모두 못쓰게 될테니까요
좋은 하루보내세요~ 
디스크 장비가 어떤 것인지요?
emc나 히다찌 디스크로 HBA카드 꼽아 광케이블로 연결해서
쓰는 것이라면 이미 디스크 장비 안에서 미러링이 되니 상관없구요.
그러니 비싸겠지요.. 100기가에 몇천만원?정도 합니다.
그런데 emc나 히다찌가 아닌 sun, hp장비로
그저 외장으로 디스크 해둔 거라면.. raid5로 되어 있다면
문제없습니다. 디스크 하나 나가도 뽑아서 끼우기만 하면
자동으로 raid구성을 해주던데요. 제가 테스트로 사용했던
장비는 너무 느려서 raid5를 풀어달라고 했더니 OS담당자가
이건 오히려 푸는게 어렵다고 하더군요..;; 그냥 썼죠.. 
제가 링크를 드린다고 하구선 깜박했네요.
아래 링크를 걸어드리긴 했었는데
다시 올려봅니다.
아래 링크를 복사해서 주소창에 넣어야 다운됩니다.
http://ocmdba.com/pub/부분_데이터만_restore후_복구하는_방법에_대한_기술서v0.2.zip
글 수정:
민천사 (민연홍)

DataBase Adapter 성능향상문제...

Database Adapter를 이용해 다량의 Row를 Select해서 다른 Table에 Merge를
해보았습니다.. 10만건을 test했는데 서버가 다운되더군요...
5만건을 테스트했더니 서버가 엄청 버벅되더니 죽지는 않았는데 속도가
상당히 많이 걸립니다... 이런건 해결할수 있는방법이 없나요?
Polling관련 Tutorial을 보면 Performance관련 예제가 있던데 한번 따라해
봤습니다.. Polling은 Wizard에서 MaxRaiseSize나 NumberOfThreads, MaxTransactionSize 같은 부분을 설정해 주는부분이 있습니다...
polling을 사용하지않고 그냥 Custom Excute SQL을 사용해 DB에서 가져올때는
이런 Performance향상을 위한부분이 Oracle BPEL에 있는지 궁금합니다..
(속도및 OutOfMemory관련)
또한 Polling시 MaxRaiseSize, MaxTransactionSize 이런 부분은 속도와 상관이
있는 부분인지 궁금합니다.
그럼 답변 부탁드릴께요.. 감사합니다.. ^^ 
XML 처리에 있어서 가장 문제가 되는 것은 Node의 Depth와 XML 자체 사이즈입니다. BPEL은 기본적으로 XML 연산을 많이 해야되기 때문에 항상 Variable을 Dom Object로 관리하고 특정 값을 구하거나 바꾸거나 하는 작업을 진행합니다. 따라서 DB의 Data를 가져오는데 있어서 중요한 성능 요인은 XML의 크기(Columns 곱하기 Rows)입니다. Column이야 필요한 것은 모두 가져와야 하니 당연히 Rows의 수를 조절하는 방법이 가장 효과적입니다. MaxRaiseSize가 이를 조절하는 Parameter고요 일반적으로 100 근처의 값을 사용합니다. 즉, 1000Rows가 처리되어야 한다고 가정할 때 MaxRaise가 100이면 10개의 BPEL Instance가 동시에 기동되어 처리되는 것입니다. 참고로 저희가 내부적으로 Notebook을 이용하여 DB2DB(Polling > Transformation > Merge) Test를 하면 분당 2만건 정도를 소화하더군요.
한가지 더 DB Adapter 관련 Tip을 말씀드리면 Merge는 Insert보다 훨씬 비싼 Operation입니다. 따라서 단순 Insert의 경우 Merge 보다 Insert를 사용하시는 것이 성능 측면에서 유리합니다.
마지막으로 DB Adapter가 사용하는 DataSource는 반드시 oc4j-ra.xml에 정확히 setting 되어야 하고 되도록이면 다음과 같이 oc4j가 관리하는 DataSource를 사용하시는 것이 DB Connection 사용 측면에서 유리합니다.
usesExternalTransactionController="true"
usesExternalConnectionPooling="true"
dataSourceName="jdbc/<someDataSourceName>"

Categories

Resources