태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

[오라클 질문] Advanced OWI에서 언급된 PMON의 락 타임아웃에 대해서

기술이야기/Ask 엑셈 2010. 11. 23. 10:56

2010-11-16 10:17:57 에 등록된 질문입니다.  kkabong 님께서 질문해 주셨습니다.

안녕하세요.
Advanced OWI를 가지고 스터디를 하고 있습니다. (71~72 page)
제가 생각하기로는 데드락 시 특정 유저프로세스(process B)가
트랜잭션 중인 상대 프로세스(process A)의 트랜젝션 모드와 리소스에 대한 상태정보를 가지고
데드락이라고 판정가능하다고 이해하고 있었습니다.
그래서 데드락을 감지하고 해당 트랜젝션을 롤백하는 것도 유저프로세스의 역할로 보고 있었는데요.
(PMON의 기본적인 기능인 프로세스의 정리와 트랜잭션과는 별다른 관계가 없을 듯 하지만)
왠지 복잡한 트랜잭션 중의 데드락처리 시 PMON이 어떤 동작을 할 수도 있지 않을까 하는 생각이 들어서 질문드립니다.

1. 책(71 page)에서 PMON 프로세스의 락 타임아웃에 관련한 언급을 하고 있습니다.
  PMON이 DEADLOCK의 발생 시 어떤 동작/역할을 하는지 알고 싶습니다.
2. 그리고 PMON이 락 및 락 타임아웃을 대기하는 경우는 어떤 상황들이 있는지 알고 싶습니다.

감사합니다.



[오라클 질문] table_a를 select 권한 없이, view v_table_a로 만든 다음 view만 select 권한으로

기술이야기/Ask 엑셈 2010. 11. 23. 10:53
2010-10-20 11:27:02 에 등록된 질문입니다.  윤치권 님께서 질문해 주셨습니다.

먼저 성능 적인 부분 보다 기능적은 가능 여부를 문의코자 이렇게 글을 남기오니,
양해를 부탁드리겠습니다.

table_a를 select 권한 없이, view v_table_a로 만든 다음 view만 select 권한으로

특정 User에게 부여하면, 실행계획이나 스키마에 대한 조회가 불가능 합니다.

원 테이블에 대한 조회 권한이 없는 경우,

실행계획을 볼 수 없는걸까요? 아니면 다른 있는지요?

순서를 다시 정리 해 보겠습니다.

1. user_a의 table TBL1 -> user_a의 View V_TBL1으로 생성

2. user_a의 View V_TBL1 -> user_b의 synonym TBL1으로 생성

3. user_b는 user_a의 select 권한 없음 (있다면 회수)

이 때의 실행계획을 보고자 한다면 가능할까요.

감사합니다.


[오라클 질문] RAC - GRD에 대한 추가설명 부탁드립니다

기술이야기/Ask 엑셈 2010. 11. 23. 10:50
2010-10-13 16:59:04 에 등록된 질문입니다.  onsider 님께서 질문해 주셨습니다.


안녕하세요?
엑셈에서 출간한 '그림으로 명쾌하게 풀어쓴 Practical OWI in Oracle 10g'의 책으로 스터디를 하고 있는데 책 내용 중 궁금한게 있어서 문의드립니다.

'Chapter-8 : RAC & OWI' 258p에서 GRD 에 대하여 "Global Buffer목록을 관리를 위한 분산 Database" 라고 표현하였습니다.
1. 그럼 실제 GRD는 물리적(?) 인 Level(Process or Memory Layer)에서 어디에 동작하는것인가 ?
  253p의 전체적인 그림이나 256p, 259p의 그림을 확인해도 GRD라는 이름으로 표현만 되고 있어 개념적으로 이해가 잘되지 않습니다.
  예를 들어 GCS:Global Cache Service 는 물리적(?)으로는 LMS라는 프로세스로 관리됩니다. 이런식으로 예를 들어 설명가능 한지요 ?

2. GRD정보를 확인할수 있는 VIEW(V$, X$, GV$)는 있는지요 ?

감사합니다.



                                                                 엑셈 답변 보기

[오라클 질문] Reverse Key Indexes 와 인덱스 생성시에 Descending 조건주는것과 차이점?

기술이야기/Ask 엑셈 2010. 10. 19. 13:56

2010-09-14 11:59:25 에 등록된 질문입니다. 김창두 님께서 질문해 주셨습니다.

안녕하세요...

인덱스의 생성시에 컬럼에

Descending 조건을 주는경우가 있는데요.

이런 경우
Reverse Key Indexes 와 인덱스 생성시에 Descending 조건주는것은 근본적으로 다른 것인가요?


Reverse Key Indexes는 index range scan를 못한다고 하는데요..
인덱스 생성시에 컬럼에 Descending 조건을 준 경우가 많이 있는데요..

혹시나 해서요?





A:                                        엑셈 답변 보기







[오라클 질문] trace 분석시 disk수치 관련

기술이야기/Ask 엑셈 2010. 10. 19. 13:54

2010-09-15 12:14:10 에 등록된 질문입니다. 엄정훈 님께서 질문해 주셨습니다.

쿼리를 튜닝하는 경우 힌트나 조회조건을 추가하거나 빼면서 trace를 확인하게 되는데,
처음 trace를 실행하는 경우 disk(disk에서 읽어오는 블럭수)의 량보다 얼마 시간이 흐른 후 trace를 하고 나서 얻은 disk 수치가 낮습니다.


1. 이건 아무래도 이전에 읽어온 쿼리가 버퍼에 그대로 있어서 메모리에서 읽어오지 않는 거 같은데 맞는건가요?

2. 정확한 trace를 해보기 위해서는 버퍼에 올라가 있지 않은 쿼리를 disk에서 읽어오게끔 해야 하는데 매번 시간이 흐른 다음에 trace를 실행을 해야 하는건지요.. 그리고, 쿼리가 변형이 되면(힌트절 추가나 삭제도 변경에 포함된다고 생각하는데...?) 해당 쿼리는 버퍼에 있는 걸 쓰는게 아니라 다시 새로 버퍼에 올려야 하는 거 아닌가요 아래 trace 내용만 봐서는 disk의 수치가 변경이 안 되는 걸로 봐서 쿼리변형도 계속 버퍼에 남아 있는 것처럼 보이는데...
답변 부탁드리겠습니다.


-- 변경 전
Call     Count CPU Time Elapsed Time       Disk      Query    Current       Rows
------- ------ -------- ------------ ---------- ---------- ---------- ----------
Parse        1    0.010        0.013          0          0          0          0
Execute      1    0.290        0.291          0          0          0          0
Fetch        1    0.010        0.163         34        156          0          0
------- ------ -------- ------------ ---------- ---------- ---------- ----------
Total        3    0.310        0.466         34        156          0          0

-- 변경 후 : 10초 후 힌트만 삭제하고 쿼리 실행
Call     Count CPU Time Elapsed Time       Disk      Query    Current       Rows
------- ------ -------- ------------ ---------- ---------- ---------- ----------
Parse        1    0.000        0.001          0          0          0          0
Execute      1    0.000        0.000          0          0          0          0
Fetch        1    0.010        0.001          0        156          0          0
------- ------ -------- ------------ ---------- ---------- ---------- ----------
Total        3    0.010        0.002          0        156          0          0



-- 변경 전
Call     Count CPU Time Elapsed Time       Disk      Query    Current       Rows
------- ------ -------- ------------ ---------- ---------- ---------- ----------
Parse        1    0.000        0.001          0          0          0          0
Execute      1    0.000        0.000          0          0          0          0
Fetch        1    0.000        0.022          3          3          0          0
------- ------ -------- ------------ ---------- ---------- ---------- ----------
Total        3    0.000        0.023          3          3          0          0

-- 변경 후 : 10초 후 조회조건 1개를 막고서 쿼리 실행 
Call     Count CPU Time Elapsed Time       Disk      Query    Current       Rows
------- ------ -------- ------------ ---------- ---------- ---------- ----------
Parse        1    0.000        0.001          0          0          0          0
Execute      1    0.000        0.000          0          0          0          0
Fetch        1    0.000        0.022          3          3          0          0
------- ------ -------- ------------ ---------- ---------- ---------- ----------
Total        3    0.000        0.023          3          3          0          0


A:                                        엑셈 답변 보기

 

[오라클 질문] SQL 플랜 변경 감지

기술이야기/Ask 엑셈 2010. 10. 19. 13:52
2010-10-05 12:54:25 에 등록된 질문입니다.  김도윤 님께서 질문해 주셨습니다.

운영 중에 주요 SQL의 경우 플랜이 변경되었을 때 큰영향이 있을 수 있습니다.

이와 같이 SQL의 플랜이 변경된 것을 감지하기 위한 방법이 무엇이 있을까요?

플랜 변경을 확인할 수 없다면 이를 대체할 수 있는 방안이 있을까요? (구체적으로)

답변 부탁드립니다.











A:                                        엑셈 답변 보기

[오라클 질문]sqlldr를 통해 data insert 시 성능문제에 관해

기술이야기/Ask 엑셈 2010. 9. 15. 09:40
2010-09-06 08:17:15 에 등록된 질문입니다. 윤상원 님께서 질문해 주셨습니다.

안녕하세요. sqlldr를 통해 데이타를 insert를 과정중에 성능문제가 있어 이렇게 질문 드립니다.

제가 사용하고 있는 버전입니다.

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE  10.2.0.4.0  Production
TNS for IBM/AIX RISC System/6000: Version 10.2.0.4.0 - Productio
NLSRTL Version 10.2.0.4.0 - Production


부득이 하게 다른 방법(direct path load, nologging, parallel dml 등)을 쓰지 못하고 sqlldr를 통해서만 3,500만건 정도의 data를 insert를 해야 하는 경우인데요.

control 파일과 data파일을 생성 후
sqlldr 를 통해 데이타를 인서트 하면

커밋 시점에 도달 - 논리 레코드 개수 27
커밋 시점에 도달 - 논리 레코드 개수 54
커밋 시점에 도달 - 논리 레코드 개수 108
..
..

이렇게 27개 단위로 commit이 수행이 되는데요.
이렇게 수행될 경우 전체 데이타 로드까지 13시간 정도가 소요가 되는데요.

제 생각은 커밋개수를 늘릴 경우 어느 정도(약간) 성능 향상이 있지 않을까 생각이
드는데요.

sqlldr 명령어 도움말을 보고 해당 keyword 를 찾으려고 했는데. 찾는데 찾기가 힘드네요.

sqlldr 에서 커밋개수를 변경할려면 어떻게 해야 하는건가요?

혹시 sqlldr 를 통해 다른 성능향상 방법이 있다면 그것도 답변 부탁드립니다.


그럼, 수고하세요~

A:                                        엑셈 답변 보기
  • 2012.07.03 17:39 ADDR 수정/삭제 답글

    sqlldr 옵션의 rows=값 을 변경해보세요

[오라클 질문] DBLink를 사용한 SQL 실행시

기술이야기/Ask 엑셈 2010. 9. 15. 09:37
2010-09-02 22:36:11 에 등록된 질문입니다. 김보미 님께서 질문해 주셨습니다.

안녕하세요.
"cursor: pin S wait on X" 이벤트로 인해 특정 뷰/시노님 테이블 조회가 안 되는 경우가 벌써 4번째 발생을 하였습니다. 이과 관련해서 문의드리려고 합니다.

이 문제를 메타링크에서 찾아보면 주로 10g 자동 통계수집 기능이나,
SGA영역 RESIZE 때 문제가 된다고 했는데, 문제발생시간과 통계수집,RESIZE시간을 조합해봤을 때, 맞지 않아서 이 문제는 아니라 생각되었습니다.
그나마 유사한게 아래 노트가 아닌가 싶어서,, 고민해봤는데..
개발디비라도 맘대로 패치할 수 있는게 아니라서 아직 적용은 못 해본 상태입니다.

이번 문제가 [ID 580273.1]가 원인이 아니라고 하더라고, 타사이트에서 빈번히 발생하는 경우이기 때문에 OS레벨에서 패치를 하는게 맞다고 생각하고 PM시간에 적용하긴 할 거지만... 이 원인이 아니라 다른 원인이 있지 않을까 생각해서..... 이렇게 질문 드립니다.

Processes Hang Waiting on 'cursor: pin S wait on X' (and other Wait Events) on HP-UX 11.23 and 11.31 Itanium Systems [ID 580273.1]


- DB 버전 : 10g 10.2.0.4 Single DB (PSU 미적용)
- OS 버전 : HP-UX 11.31 (2009-03), HP-UX 11.23


현업에서 특정 테이블이 조회가 되지 않는다고 해서 세션 WAIT을 조회해 보면,
아래 SQL*Net message from dblink,cursor: pin S wait on X 두 이벤트가 함께 Waiting 중이며, "cursor: pin S wait on X" 이벤트의 Holder 세션이 "SQL*Net message from dblink" 를 Waiting 하고있는 세션으로 나옵니다.

1) SID(2974,ORAEAIADMIN) 세션이 SQL> SELECT * FROM LTBI_STD_RUN_ROUTE@MES; 실행합니다.
-- ORAEAIADMIN 유저의 DB 링크 @MES는 동일DB내에 있는 ORAMESADMIN으로 연결됩니다.

2) @MES 디비링크 세션 SID(2975,ORAMESADMIN)이 생성됩니다.
-- ORAMESADMIN 유저는 LTBI_STD_RUN_ROUTE 가 뷰로 존재합니다.
  LTBI_STD_RUN_ROUTE 뷰는 @IMS 라는 동일DB내에 있는 LOTTOIMSADM으로 연결됩니다. LOTTOIMSADM 유저는 LTBI_STD_RUN_ROUTE 를 실제 테이블로 가지고 있습니다.

3) ORAMESADMIN.LTBI_STD_RUN_ROUTE 뷰 내부 디비링크 @IMS 때문에
  새로운 디비링크 세션 SID(2976)이 생성되면서
  "cursor: pin S wait on X" 이벤트를 대기하게 되며,
  Holder 세션을 찾아보면, SID(2975,ORAMESADMIN) 가 나오게 됩니다.
 
이 상황에서 v$sql, v$sqlarea, v$sqltext, v$sql_shared_cursor
제가 하는 SQL조회 뷰를 SQL_ID='0ny2nsha3cpxv' , '5wvq1j9qm2474' 모두 조회하면 하나도 안 나옵니다.

그래서 systemdump, 해당 프로세스의 errorstack dump를 수행해보면,
SID(2975) 가 SELECT * FROM "LTBI_STD_RUN_ROUTE" 을 Mutex Exclusive 하게 획득하고 잇고, SID(2976) 이 Mutex를 Shared하게 획득하려고 대기하고 있음을 확인할 수 있었습니다..

그래서 제가 한 달 넘게 고민하고 인터넷을 검색하다가..
유추한 원인은 아래와 같습니다... 이게 맞는 건지를 잘 모르겠습니다... ㅜㅜ
1) SID(2974)가 SQL(5wvq1j9qm2474) 을 실행함
2) SID(2975)가 생성되고, Library Cache 에 SELECT * FROM "LTBI_STD_RUN_ROUTE" 가 없으니까 새로 생성하려고 Mutex 를 Exclusive 하게 획득함
3) SID(2976)가 SID(2975)에 의해 새로 생성되고, 이 또한 SELECT * FROM "LTBI_STD_RUN_ROUTE" 을 공유해서 사용하려고 하는데, SID(2975)가 EXCL로 획득하고 있어서 E<-->S 간 호환이 안 되므로 "cursor: pin S wait on X" 이벤트 대기함...
4) 2개 유저간에 뷰, 테이블명 이름이 동일하다 보니,
  파싱을 하는데 있어 동일한 HASH VALUE를 갖게 되므로 동일한 LCO를 공유해서
  사용해야 하는데, Library cache에서 새롭게 LCO가 만들어져야 하는 경우에,
  이렇게 발생할 수도 있는 걸까..
하고 생각합니다....

그런데.. 이게 맞는 말인지..제가 유추한 원인이 맞는지요?

그리고,,이 문제가 한 달동안 4번이나 발생해서,, 여러가지 생각해보다가
이 문제를 풀기위한 실마리가 되지않을까해서.. 질문드립니다..

1) SQL문을 처음 실행한 세션은 SID(2974) 인데, '5wvq1j9qm2474' 에 대해서 V$뷰에서 조회가 안 됩니다. v$ 뷰에서 조회가 되려면, 파싱이 완료되고, library cache에 적재되어야 비로서 보이게 되는 것인가요?

2) 그렇다고 하면, SQL_ID(5wvq1j9qm2474)은 SQL 내부에 DB링크를 사용하기 때문에
  DB링크롤 따라가서 (그러니까 여기서는 LOTTOIMSADM 이 될거 같은데)맨 마지막 레벨 DB링크 세션에서 파싱->커서생성이 끝나고 응답을 받아야지만
  SID(2974)세션은 SQL_ID(5wvq1j9qm2474)에 대해서 파싱을 완료하고, 실행계획을 세워서 메모리에 적재할 수있는 건지요?

SQL호출 순서: ORAEAIDADMIN --DB LINK--> ORAMESADMIN --DB LINK --> LOTTOIMSADM
응답순서 : LOTTOIMSADM --파싱완료응답전달--> ORAMESADMIN --파싱완료응답전달--> ORAEAIADMIN --SQL_ID(5wvq1j9qm2474)파싱/실행계획수립완료--> 유저에게 SQL결과 전달
머..이런식으로 되는 건지요?

DB링크를 사용한 SQL문에서 Local DB에서만 실행계획을 세워서 하는건지,,
  아니면 REMOTE DB에서도 실행계획이 세워지고 그거를 응답받아 참고해서 LOCAL DB에 파싱하고 실행계획을 만드는 건지..궁금합니다..

3) Mutex 는 Library cache pin, latch library cache pin 의 대안으로 10g R2부터 나와서 Default 로 사용중인데,,
-- v$system_event 보면,, library cache pin 이벤트도 발생하고,
-- 위 같은 상황에서 library cache dump를 수행해보면 해당 Library object 에 pin owner 리스트도 없었습니다.
  Mutex를 사용하면, 더이상 Library cache에서 pin owner 리스트를 사용안 하는 것인가요?


-- 참고

USERNAME  SID SQL_ID      EVENT                LOGON_TIME
----------------------------------------------------------------------------------
LOTTOIMSADM 2976 0ny2nsha3cpxv cursor: pin S wait on X    2010/09/02 23:52:44
ORAEAIADMIN 2974 5wvq1j9qm2474 SQL*Net message from dblink 2010/09/02 23:51:04
ORAMESADMIN 2975 0ny2nsha3cpxv SQL*Net message from dblink 2010/09/02 23:52:44

-- "cursor: pin S wait on X" 홀더 세션

SELECT P2/POWER(2,32) "BLOCKING-SID", P1 "MUTEX-ID", SID "BLOCKED-SID"
FROM V$SESSION
WHERE EVENT LIKE 'cursor:%'
AND WAIT_TIME=0;

BLOCKING-SID  MUTEX-ID  BLOCKED-SID
-----------------------------------
2975      339105723  2976

PS. 내용설명을 하다 보니,, 글이 너무 길어진 것 같습니다.. 읽어주셔서 감사하고,, 도와주세요.. ㅠㅠ 한 달넘게.. 고민하다보니..너무 힘드네요..

A:                                        엑셈 답변 보기