Upload
exem
View
127
Download
5
Embed Size (px)
Citation preview
2016-05-23 1
Oracle Deep Internal report no. 005 (2016.05.23)
Research & Contents Team
v$session 조회 시 sql id와 sql address 불일치에 대한 원인 규명
© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.
Sql id 할당되는 과정 (video)
© 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 덤프 :
© 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 실행하면 세션을 할당 받음
© 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가 나타남
© 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() 함수가 시작실행 직후에도 여전히 할당되지 않은 상태
© 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가 나타남
© 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자리가 나타남
© 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가 나타남
© 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가 불일치하여 오류 발생
Oracle Deep Internal
Blog
Video
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/
© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.