Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

9

积分

0

好友

0

主题
1#
发表于 2012-7-8 22:32:43 | 查看: 5553| 回复: 7
我经常在AWR里面看到有关library cache objects和row cache objects的等待,从一些note上看,似乎他们有着本质的区别,但是我却难以理解他们。现在我的问题是:

1)如何来跟踪或者捕获它们?(也就是说能让我实实在在的看到他们)
2)二者有什么本质的区别?他们之间有某种关联么?
3)我知道在library cache objects上会经常看到library cache lock和library cache pin的等待,他们有何区别?一般在什么情况下会出现?
4)我经常能看到row cache lock等待,但从未见过row cache pin,是否row cache objects只有lock没有pin?
2#
发表于 2012-7-9 19:54:08
FOR QUESTION 1:

通过 library_cache 和 row_cache dump

SQL> conn / as sysdba
Connected.
SQL> oradebug setmypid;
Statement processed.
SQL> oradebug dump library_cache 10;
Statement processed.
SQL> oradebug dump row_cache 10;
Statement processed.
SQL> oradebug tracefile_name
/s01/admin/G10R25/udump/g10r25_ora_4938.trc

读最后一步生成的TRACE 文件

回复 只看该作者 道具 举报

3#
发表于 2012-7-9 20:02:06
FOR QUESTION 2:

library cache 中有多种 数据结构 例如handle 、object、pin 、 lock, 这些结构的最终目的是为了 SQL和Pl/SQL对象能够高效共享、并行控制
去读一读上面生成的 TRACE,以下是一个library cache handle

  LIBRARY OBJECT HANDLE: handle=9e1f6268 mtx=0x9e1f6398(0) lct=1 pct=1 cdp=0
  name=SYS.DIRTY
  hash=86961df3fe3ab74e60e27ad5ad4c03c0 timestamp=NULL
  namespace=TABL flags=KGHP/TIM/SML/[02000000]
  kkkk-dddd-llll=0000-0001-0001 lock=0 pin=0 latch#=3 hpc=0002 hlc=0002
  lwt=0x9e1f6310[0x9e1f6310,0x9e1f6310] ltm=0x9e1f6320[0x9e1f6320,0x9e1f6320]
  pwt=0x9e1f62d8[0x9e1f62d8,0x9e1f62d8] ptm=0x9e1f62e8[0x9e1f62e8,0x9e1f62e8]
  ref=0x9e1f6340[0x9e1f6340,0x9e1f6340] lnd=0x9e1f6358[0x9e1fad78,0x9e1f8de8]
    LIBRARY OBJECT: object=999792e0
    flags=NEX[0002] pflags=[0000] status=VALD load=0
    DATA BLOCKS:
    data#     heap  pointer    status pins change whr
    ----- -------- -------- --------- ---- ------ ---
        0 9e28f4c0 999793f8 I/-/A/-/-    0 NONE   00


一个library cache handle指向 library cache object ,object指向这个object的其他heap

library cache handle.png




library cache中的部分数据来源于row cache, row cache也叫做dictionary cache 即字典缓存,字典缓存来源于 磁盘上数据字典基表中的记录, row cache 的结构与library cache不同, 采用hash buck+ row stored 以行的形式保存:






示例的row cache记录:

BUCKET 368:
  row cache parent object: address=0x9dae4b40 cid=17(dc_global_oids)
  hash=a4a9ad6f typ=9 transaction=(nil) flags=00000001
  own=0x9dae4c10[0x9dae4c10,0x9dae4c10] wat=0x9dae4c20[0x9dae4c20,0x9dae4c20] mode=N
  status=EMPTY/-/-/-/-/-/-/-/-
  data=
  00000000 00000000 00000000 00000000 04000100 00000000
  BUCKET 368 total object count=1
BUCKET 384:
  row cache parent object: address=0x9da11640 cid=17(dc_global_oids)
  hash=11aae37f typ=9 transaction=(nil) flags=00000001
  own=0x9da11710[0x9da11710,0x9da11710] wat=0x9da11720[0x9da11720,0x9da11720] mode=N
  status=EMPTY/-/-/-/-/-/-/-/-
  data=
  00000023 00000000 00000000 00000000 02000100 00000000
  BUCKET 384 total object count=1
BUCKET 386:
  row cache parent object: address=0x9dae4d70 cid=17(dc_global_oids)
  hash=60dfb381 typ=9 transaction=(nil) flags=00000002
  own=0x9dae4e40[0x9dae4e40,0x9dae4e40] wat=0x9dae4e50[0x9dae4e50,0x9dae4e50] mode=N
  status=VALID/-/-/-/-/-/-/-/-
  data=
  00000001 00000000 00000000 00000000 11000200 00001098
  BUCKET 386 total object count=1
BUCKET 480:
  row cache parent object: address=0x9db88828 cid=17(dc_global_oids)
  hash=3accafdf typ=9 transaction=(nil) flags=00000001
  own=0x9db888f8[0x9db888f8,0x9db888f8] wat=0x9db88908[0x9db88908,0x9db88908] mode=N
  status=EMPTY/-/-/-/-/-/-/-/-
  data=
  00000000 00000000 00000000 00000000 01000100 00000000



缩写DC 意为dictionary cache


SQL> select distinct cache_name from v$rowcache_parent;

CACHE_NAME
----------------------------------------------------------------
dc_tablespaces
dc_awr_control
dc_rollback_segments
dc_usernames
dc_sequences
dc_segments
dc_objects
dc_database_links
dc_histogram_defs
dc_users
outstanding_alerts

CACHE_NAME
----------------------------------------------------------------
dc_object_ids
dc_profiles
dc_global_oids

14 rows selected


DC  字典缓存按照功能的不同 可以分成 许多种 如上,

dc_sequences sequence 序列的字典缓存
dc_usernames  用户名的字典缓存


字典缓存的信息 一般都是数据库实例频繁访问的, 所以ORACLE特殊区别这部分meta源数据 并以row data的形式缓存在共享池中,这样避免了频繁的递归调用去buffer cache中访问这些源数据

row cache.png (333.83 KB, 下载次数: 392)

row cache.png

回复 只看该作者 道具 举报

4#
发表于 2012-7-9 20:06:39
FOR QUESTION 3

请参考管理版的 指定帖子 先library cache pin还是先library cache lock??  http://t.askmaclean.com/thread-440-1-1.html

回复 只看该作者 道具 举报

5#
发表于 2012-7-9 20:07:48
FOR QUESTION 4

row cache对比library cache是完全2样的 数据结构,  确实没有row cache pin , 但即使是row cache lock 这种锁 也和 library cache lock完全不同

回复 只看该作者 道具 举报

6#
发表于 2012-7-9 20:39:31
解释得太好了,学习了

回复 只看该作者 道具 举报

7#
发表于 2012-7-9 21:05:52
谢谢,不过能告诉我两张图的出处么?还有更多的有关解释library cache和row cache的图么?

回复 只看该作者 道具 举报

8#
发表于 2012-7-9 21:21:26
来源于  《understanding shared pool memory structures》 官方的白皮书 可以自己搜索一下

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-16 00:20 , Processed in 0.058251 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569