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

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

70

积分

0

好友

22

主题
1#
发表于 2013-8-28 10:20:42 | 查看: 4226| 回复: 7
本帖最后由 swgsw 于 2013-8-28 10:22 编辑

数据库版本9i

我的第一种理解:

     数据库启动以后 数据库把buffer cache里的所有的 buffer都经过hash算法算出了 hash bucket的组号,但组号里面的hash chian list 是空的,当oracle会把对数据块请求的锁定模式以及所构造出来的buffer descriptor传入专门搜索数据块的函数中。在该函数中,oracle根据buffer descriptor所记录的信息,应用hash算法以后,得到要找的数据块所处的hash bucket,也就是确定该数据块在哪条hash chain上。然后,oracle进入该hash chain,在上面挂上这一个buffer header


我的第二种理解:
我的理解是 数据库启动以后 数据库把buffer cache里的所有的 buffer都经过hash算法算出了 hash bucket的组号,oracle把所有的buffer cache里的每个buffer对应的buffer header 都挂在对应的hash bucket 的组里面 LRU list 把这些 buffer header 串起来 定义为(free buffer)






如果都不正确请大家指点迷津!
疑问1、请问我的这两种理解 哪个是正确的呢?
疑问2、数据库启动后 cache buffer chain 是空的吗?
疑问3、LRU list 串起来的是 buffer 还是 buffer header ?
2#
发表于 2013-8-28 12:27:20
我一般认为第二种理解 比较简单些

回复 只看该作者 道具 举报

3#
发表于 2013-8-28 12:28:38
疑问2  数据库启动后 cache buffer chain 全满了

疑问3、LRU list 串起来的是 buffer 还是 buffer header ?
  buffer header

回复 只看该作者 道具 举报

4#
发表于 2013-8-28 12:29:46
LRU list 把这些 buffer header 串起来 定义为 不是FREE   而是最近使用

回复 只看该作者 道具 举报

5#
发表于 2013-8-28 12:35:56
SQL> alter system set db_cache_size=16M;

系统已更改。

SQL> show parameter db_cache

NAME                                 TYPE
------------------------------------ ----------------------
VALUE
------------------------------
db_cache_advice                      string
ON
db_cache_size                        big integer
16M
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。


SQL> startup ;
ORACLE 例程已经启动。

Total System Global Area  530345984 bytes
Fixed Size                  2404504 bytes
Variable Size             419434344 bytes
Database Buffers          100663296 bytes
Redo Buffers                7843840 bytes
数据库装载完毕。
数据库已经打开。



SQL> oradebug setmypid
已处理的语句
SQL> oradebug dump buffers 4;
已处理的语句
SQL> oradebug tracefile_name
C:\APP\XIANGBLI\diag\rdbms\maclean\maclean\trace\maclean_ora_5668.trc



先看下什么是cache buffer chain





Found 0 hot buffers in working set 32 as expected
CHAIN: 0 LOC: 0x000007FF1CB25EF8 HEAD: [NULL]
CHAIN: 1 LOC: 0x000007FF1CB25F08 HEAD: [NULL]
CHAIN: 2 LOC: 0x000007FF1CB25F18 HEAD: [NULL]
CHAIN: 3 LOC: 0x000007FF1CB25F28 HEAD: [0x7ff05be4e50,0x7ff05be4e50]
    BH (0x7ff05be4d98) file#: 5 rdba: 0x01400090 (5/144) class: 19 ba: 0x7ff0597e000
      set: 9 pool: 3 bsz: 8192 bsi: 0 sflg: 0 pwc: 0,19
      dbwrid: 0 obj: -1 objn: 0 tsn: [0/2] afn: 5 hint: f
      hash: [0x7ff1cb25f28,0x7ff1cb25f28] lru: [0x7ff05be5248,0x7ff05be4c08]
      lru-flags: debug_dump hot_buffer
      obj-flags: object_ckpt_list
      ckptq: [0x7ff05be4b18,0x7ff1c7c0b58] fileq: [0x7ff05be4b28,0x7ff1c7c0bf8]
      objq: [0x7ff1603adb8,0x7ff05be4c30] objaq: [0x7ff1603ad98,0x7ff05be4d80]
      st: XCURRENT md: NULL fpin: 'ktuwh72: ktugus:ktuswr1' fscn: 0x0.4f6b23 tch: 10
      flags: buffer_dirty
      LRBA: [0x52.3cca9.0] LSCN: [0x0.4f6b46] HSCN: [0x0.4f6f60] HSUB: [1]
CHAIN: 4 LOC: 0x000007FF1CB25F38 HEAD: [0x7ff05be4a90,0x7ff05be4a90]
    BH (0x7ff05be49d8) file#: 1 rdba: 0x004000e9 (1/233) class: 1 ba: 0x7ff05978000
      set: 9 pool: 3 bsz: 8192 bsi: 0 sflg: 0 pwc: 0,19
      dbwrid: 0 obj: 17 objn: 17 tsn: [0/0] afn: 1 hint: f
      hash: [0x7ff1cb25f38,0x7ff1cb25f38] lru: [0x7ff05be4c08,0x7ff05be4848]
      lru-flags: debug_dump hot_buffer
      ckptq: [NULL] fileq: [NULL]
      objq: [0x7ff15836008,0x7ff15836008] objaq: [0x7ff15835ff8,0x7ff15835ff8]
      st: XCURRENT md: NULL fpin: 'kdswh05: kdsgrp' fscn: 0x0.4f6b44 tch: 2
      flags:
      LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN: [0xffff.ffffffff] HSUB: [65535]
CHAIN: 5 LOC: 0x000007FF1CB25F48 HEAD: [NULL]
CHAIN: 6 LOC: 0x000007FF1CB25F58 HEAD: [0x7ff053f68d0,0x7ff057faed0]
    BH (0x7ff053f6818) file#: 5 rdba: 0x0140034b (5/843) class: 24 ba: 0x7ff05342000
      set: 9 pool: 3 bsz: 8192 bsi: 0 sflg: 0 pwc: 0,19
      dbwrid: 0 obj: -1 objn: 0 tsn: [0/2] afn: 5 hint: f
      hash: [0x7ff053da6d0,0x7ff1cb25f58] lru: [0x7ff053fbf48,0x7ff05be5b08]
      lru-flags: debug_dump

回复 只看该作者 道具 举报

6#
发表于 2013-8-28 12:37:21
1、 数据库启动open 需要一个bootstrap过程这个 bootstrap过程需要读取数据文件上的字典 对象到row cache中 , 所以到open阶段 cbc 不可能是空的。 此外 rolling forward 前滚也需要用到buffer cache,所以OPEN DB开始后CBC 不会是空的

回复 只看该作者 道具 举报

7#
发表于 2013-8-28 12:39:35
2、见图:


lru.png

回复 只看该作者 道具 举报

8#
发表于 2013-8-28 16:44:46
首先表示感谢大家的解答

请问有2图 的官方说明吗? 地址链接最好提供我参考一下!

回复 只看该作者 道具 举报

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

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

GMT+8, 2025-1-4 07:16 , Processed in 0.049588 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

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