v$session 조회 시 sql id와 sql address 불일치에 대한 원인 규명

11
2016-05-23 1 Oracle Deep Internal report no. 005 (2016.05.23) Research & Contents Team v$session 조회 시 sql id와 sql address 불일치에 대한 원인 규명

Upload: exem

Post on 16-Apr-2017

123 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: V$session 조회 시 sql id와 sql address 불일치에 대한 원인 규명

2016-05-23 1

Oracle Deep Internal report no. 005 (2016.05.23)

Research & Contents Team

v$session 조회 시 sql id와 sql address 불일치에 대한 원인 규명

Page 2: V$session 조회 시 sql id와 sql address 불일치에 대한 원인 규명

© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.

Sql id 할당되는 과정 (video)

Page 3: V$session 조회 시 sql id와 sql address 불일치에 대한 원인 규명

© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.

Sql id 할당되는 과정 (excel)

Session Information Function Library Cache Dump

s1> SESSION_INFO kksParseCursor()

s1> --------------------------

s1> SID : 93

s1> STATUS : ACTIVE

s1> MODULE : ODIV100

s1> SQL_ADDRESS : 00

s1> SQL_HASH_VALUE : 0

s1> SQL_ID :

s2> SESSION_INFO kxsSsaSetSqlid() s2> Bucket: #=61018 Mutex=0x68bfd6f0(0, 18, 0, 6)

s2> -------------------------- s2> LibraryHandle: Address=0x6b5548b8 Hash=142aee5a LockMode=N PinMode=0 LoadLockMode=0 Status=VALD

s2> SID : 93 s2> ObjectName: Name=UPDATE /*+ ODIV100 */T1 SET C2= 'K'

s2> STATUS : ACTIVE s2> FullHashValue=1c7e88444cf9d8e7d57b2a7a142aee5a Namespace=SQL AREA(00) Type=CURSOR(00) Identifier=338357850 OwnerIdn=5

s2> MODULE : ODIV100 s2> Statistics: InvalidationCount=0 ExecutionCount=0 LoadCount=1 ActiveLocks=1 TotalLockCount=1 TotalPinCount=1

s2> SQL_ADDRESS : 00 s2> Counters: BrokenCount=1 RevocablePointer=1 KeepDependency=0 Version=0 BucketInUse=0 HandleInUse=0 HandleReferenceCount=0

s2> SQL_HASH_VALUE : 0 s2> Concurrency: DependencyMutex=0x6b554968(0, 0, 0, 0) Mutex=0x6b5549f8(7, 12, 0, 6)

s2> SQL_ID : s2> Flags=RON/PIN/TIM/PN0/DBN/[10012841]

s2> WaitersLists:

s2> Lock=0x6b554948[0x6b554948,0x6b554948]

s2> Pin=0x6b554928[0x6b554928,0x6b554928]

s2> LoadLock=0x6b5549a0[0x6b5549a0,0x6b5549a0]

s2> Timestamp: Current=04-28-2016 10:01:43

s2> HandleReference: Address=0x6b554a88 Handle=(nil) Flags=[00]

s2> LibraryObject: Address=0x609c7c70 HeapMask=0000-0001-0001-0000 Flags=EXS[0000] Flags2=[0000] PublicFlags=[0000]

s2> NamespaceDump:

s2> Parent Cursor: sql_id=daytag8a2pvku parent=0x609c7d10 maxchild=0 plk=y ppn=n

s3> SESSION_INFO kxsSsaSetSqlid() + 91 s3> Bucket: #=61018 Mutex=0x68bfd6f0(0, 19, 0, 6)

s3> -------------------------- s3> LibraryHandle: Address=0x6b5548b8 Hash=142aee5a LockMode=N PinMode=0 LoadLockMode=0 Status=VALD

s3> SID : 93 s3> ObjectName: Name=UPDATE /*+ ODIV100 */T1 SET C2= 'K'

s3> STATUS : ACTIVE s3> FullHashValue=1c7e88444cf9d8e7d57b2a7a142aee5a Namespace=SQL AREA(00) Type=CURSOR(00) Identifier=338357850 OwnerIdn=5

s3> MODULE : ODIV100 s3> Statistics: InvalidationCount=0 ExecutionCount=0 LoadCount=1 ActiveLocks=1 TotalLockCount=1 TotalPinCount=1

s3> SQL_ADDRESS : 000000006B5548B8 s3> Counters: BrokenCount=1 RevocablePointer=1 KeepDependency=0 Version=0 BucketInUse=0 HandleInUse=0 HandleReferenceCount=0

s3> SQL_HASH_VALUE : 0 s3> Concurrency: DependencyMutex=0x6b554968(0, 0, 0, 0) Mutex=0x6b5549f8(7, 13, 0, 6)

s3> SQL_ID : 0000000000000 s3> Flags=RON/PIN/TIM/PN0/DBN/[10012841]

s3> WaitersLists:

s3> Lock=0x6b554948[0x6b554948,0x6b554948]

s3> Pin=0x6b554928[0x6b554928,0x6b554928]

s3> LoadLock=0x6b5549a0[0x6b5549a0,0x6b5549a0]

s3> Timestamp: Current=04-28-2016 10:01:43

s3> HandleReference: Address=0x6b554a88 Handle=(nil) Flags=[00]

s3> LibraryObject: Address=0x609c7c70 HeapMask=0000-0001-0001-0000 Flags=EXS[0000] Flags2=[0000] PublicFlags=[0000]

s3> NamespaceDump:

s3> Parent Cursor: sql_id=daytag8a2pvku parent=0x609c7d10 maxchild=0 plk=y ppn=n

s4> SESSION_INFO kxsSsaSetSqlid() + 5 s4> Bucket: #=61018 Mutex=0x68bfd6f0(0, 20, 0, 6)

s4> -------------------------- s4> LibraryHandle: Address=0x6b5548b8 Hash=142aee5a LockMode=N PinMode=0 LoadLockMode=0 Status=VALD

s4> SID : 93 s4> ObjectName: Name=UPDATE /*+ ODIV100 */T1 SET C2= 'K'

s4> STATUS : ACTIVE s4> FullHashValue=1c7e88444cf9d8e7d57b2a7a142aee5a Namespace=SQL AREA(00) Type=CURSOR(00) Identifier=338357850 OwnerIdn=5

s4> MODULE : ODIV100 s4> Statistics: InvalidationCount=0 ExecutionCount=0 LoadCount=1 ActiveLocks=1 TotalLockCount=1 TotalPinCount=1

s4> SQL_ADDRESS : 000000006B5548B8 s4> Counters: BrokenCount=1 RevocablePointer=1 KeepDependency=0 Version=0 BucketInUse=0 HandleInUse=0 HandleReferenceCount=0

s4> SQL_HASH_VALUE : 338357850 s4> Concurrency: DependencyMutex=0x6b554968(0, 0, 0, 0) Mutex=0x6b5549f8(7, 14, 0, 6)

s4> SQL_ID : 0000000a2pvku s4> Flags=RON/PIN/TIM/PN0/DBN/[10012841]

s4> WaitersLists:

s4> Lock=0x6b554948[0x6b554948,0x6b554948]

s4> Pin=0x6b554928[0x6b554928,0x6b554928]

s4> LoadLock=0x6b5549a0[0x6b5549a0,0x6b5549a0]

s4> Timestamp: Current=04-28-2016 10:01:43

s4> HandleReference: Address=0x6b554a88 Handle=(nil) Flags=[00]

s4> LibraryObject: Address=0x609c7c70 HeapMask=0000-0001-0001-0000 Flags=EXS[0000] Flags2=[0000] PublicFlags=[0000]

s4> NamespaceDump:

s4> Parent Cursor: sql_id=daytag8a2pvku parent=0x609c7d10 maxchild=0 plk=y ppn=n

s5> SESSION_INFO kxsSsaSetSqlid() + 10 s5> Bucket: #=61018 Mutex=0x68bfd6f0(0, 22, 0, 6)

s5> -------------------------- s5> LibraryHandle: Address=0x6b5548b8 Hash=142aee5a LockMode=N PinMode=0 LoadLockMode=0 Status=VALD

step1:

세션정보 : X

Lib 덤프 : X

step2:

세션정보 : X

Lib 덤프 : address(O),hash(O),sql_id(O)

step3:

세션정보 :

address(O),hash(X),

sql_id(X)

step4:

세션정보 :

address(O),hash(O),sql_id(?) -- Lib덤

프와다른 sql_id 셋팅

Lib 덤프 :

Page 4: V$session 조회 시 sql id와 sql address 불일치에 대한 원인 규명

© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.

Sql id 할당되는 과정

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 00 0

1.Update Start

v$session Library Cache

1. Update 실행하면 세션을 할당 받음

Page 5: V$session 조회 시 sql id와 sql address 불일치에 대한 원인 규명

© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.

Sql id 할당되는 과정

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 00 0

1.Update Start

Bucket: #=61018 Mutex=0x68bfd6f0(0, 18, 0, 6)LibraryHandle: Address=0x6b5548b8

Hash=142aee5a LockMode=N ObjectName: Name=UPDATE /*+ ODIV100 */T1

SET C2= 'K'Parent Cursor: sql_id=daytag8a2pvku parent=0x609c7d10

2.kksParseCursor()

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 00 0

v$session Library Cache

2. 시간이 지나서 kksParseCursor() 함수가 시작v$session에는 아무것도 할당되지 않은 상태

반면 라이브러리 캐시에는 sql id와 sql address가 나타남

Page 6: V$session 조회 시 sql id와 sql address 불일치에 대한 원인 규명

© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.

Sql id 할당되는 과정

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 00 0

1.Update Start

Bucket: #=61018 Mutex=0x68bfd6f0(0, 18, 0, 6)LibraryHandle: Address=0x6b5548b8

Hash=142aee5a LockMode=N ObjectName: Name=UPDATE /*+ ODIV100 */T1

SET C2= 'K'Parent Cursor: sql_id=daytag8a2pvku parent=0x609c7d10

2.kksParseCursor()

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 00 0

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 00 0

v$session Library Cache

3.kxsSsaSetSqlid()

3. 시간이 지나 kxsSsaSetSqlid() 함수가 시작실행 직후에도 여전히 할당되지 않은 상태

Page 7: V$session 조회 시 sql id와 sql address 불일치에 대한 원인 규명

© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.

Sql id 할당되는 과정

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 000000006B5548B8 0 0000000000000

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 00 0

1.Update Start

Bucket: #=61018 Mutex=0x68bfd6f0(0, 18, 0, 6)LibraryHandle: Address=0x6b5548b8

Hash=142aee5a LockMode=N ObjectName: Name=UPDATE /*+ ODIV100 */T1

SET C2= 'K'Parent Cursor: sql_id=daytag8a2pvku parent=0x609c7d10

2.kksParseCursor()

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 00 0

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 00 0

4.kxsSsaSetSqlid()+91

v$session Library Cache

3.kxsSsaSetSqlid()

4. 어셈블리 명령어(instruction)을 91번 실행하면v$session에서 sql_address가 나타남

Page 8: V$session 조회 시 sql id와 sql address 불일치에 대한 원인 규명

© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.

Sql id 할당되는 과정

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 000000006B5548B8 0 0000000000000

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 000000006B5548B8 338357850 0000000a2pvku

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 00 0

1.Update Start

Bucket: #=61018 Mutex=0x68bfd6f0(0, 18, 0, 6)LibraryHandle: Address=0x6b5548b8

Hash=142aee5a LockMode=N ObjectName: Name=UPDATE /*+ ODIV100 */T1

SET C2= 'K'Parent Cursor: sql_id=daytag8a2pvku parent=0x609c7d10

2.kksParseCursor()

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 00 0

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 00 0

4.kxsSsaSetSqlid()+91

5.kxsSsaSetSqlid()+91+5

v$session Library Cache

3.kxsSsaSetSqlid()

5. 5번을 추가로 실행했을 때, v$session에 hash_value가 보이고, sql_id는 뒤의 6자리가 나타남

Page 9: V$session 조회 시 sql id와 sql address 불일치에 대한 원인 규명

© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.

Sql id 할당되는 과정

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 000000006B5548B8 0 0000000000000

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 000000006B5548B8 338357850 0000000a2pvku

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 000000006B5548B8 338357850 daytag8a2pvku

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 00 0

1.Update Start

Bucket: #=61018 Mutex=0x68bfd6f0(0, 18, 0, 6)LibraryHandle: Address=0x6b5548b8

Hash=142aee5a LockMode=N ObjectName: Name=UPDATE /*+ ODIV100 */T1

SET C2= 'K'Parent Cursor: sql_id=daytag8a2pvku parent=0x609c7d10

2.kksParseCursor()

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 00 0

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 00 0

4.kxsSsaSetSqlid()+91

5.kxsSsaSetSqlid()+91+5

6.kxsSsaSetSqlid()+91+5+10

v$session Library Cache

3.kxsSsaSetSqlid()

6. 10번을 추가적으로 실행했을 때, v$session에 완전한 sql_id가 나타남

Page 10: V$session 조회 시 sql id와 sql address 불일치에 대한 원인 규명

© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.

Sql id 할당되는 과정

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 000000006B5548B8 0 0000000000000

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 000000006B5548B8 338357850 0000000a2pvku

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 000000006B5548B8 338357850 daytag8a2pvku

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 00 0

1.Update Start

Bucket: #=61018 Mutex=0x68bfd6f0(0, 18, 0, 6)LibraryHandle: Address=0x6b5548b8

Hash=142aee5a LockMode=N ObjectName: Name=UPDATE /*+ ODIV100 */T1

SET C2= 'K'Parent Cursor: sql_id=daytag8a2pvku parent=0x609c7d10

2.kksParseCursor()

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 00 0

SID SQL_ADDRESS HASH_VALUE

SQL_ID

93 00 0

4.kxsSsaSetSqlid()+91

5.kxsSsaSetSqlid()+91+5

6.kxsSsaSetSqlid()+91+5+10

v$session Library Cache

ADDRESS ≠ SQL_ID

3.kxsSsaSetSqlid()

만약 4번과 5번 사이에 RTS 로그 수집이 발생하면 최종적인 정보즉, 6번의 결과와 다른 정보가 보이게 됨

이로 인해 sql id와 sql address가 불일치하여 오류 발생

Page 11: V$session 조회 시 sql id와 sql address 불일치에 대한 원인 규명

Oracle Deep Internal

Blog

Video

E-mail

NAVER http://cafe.naver.com/playexem

ITPUB http://blog.itpub.net/31135309/

Wordpress https://playexem.wordpress.com/

Slideshare http://www.slideshare.net/playexem

Youtube https://www.youtube.com/channel/UC5wKR_-A0eL_Pn_EMzoauJg

Tudou http://www.tudou.com/home/maxgauge/

[email protected]

[email protected]

© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.