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

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

87

积分

0

好友

5

主题
1#
发表于 2012-4-28 09:54:53 | 查看: 5442| 回复: 3
一直不明白什么时候 leaf node splits,什么时候branch node splits,索引倾斜什么程度会增加index height?

   Thanks a lot for your help!
  anbob
2#
发表于 2012-5-1 19:56:49
存在2种 index block split :

50-50 block split
90-10 block split

当一条记录被插入到索引leaf block中时,该 leaf block可能不具备足够容纳该记录的足够空间; 这造成一个需求 即oracle需要将这个 leaf block 分裂成 2 个 leaf block  且 定义一个合适的 分割键(separator key) ,还需要将 分割键 一侧的数据转移到 新的leaf block中; 这部分的工作由内核函数 kdisle()完成, 该函数负责处理 leaf split

leaf block的 split 将触发 在branch block中加入一条 新的leaf block的记录, 内核函数 kdxbin()负责在 branch block 中插入这样新的一行数据。

kdxbin()执行的在branch block上的插入操作 ,又可能因为 branch block 空间不足 而引发 branch block 的50-50 split ; Server Process会为branch split 分配一个新的索引块, 并重新分布原branch block中的索引记录,将 分割键(separator key)  一侧的数据移动到新的块中, 之后会将该新的branch block的记录插入到同层的合适的branch block中, 之后更新上层的合适的 branch block中(可能是root block)加入该新的branch block的记录。

回复 只看该作者 道具 举报

3#
发表于 2012-5-2 11:11:18
"内核函数 kdxbin()负责在 branch block 中插入这样新的一行数据"

刘老大, kdxbin()这个汉书从哪里查询到的。很多书都没有介绍类似的函数。

回复 只看该作者 道具 举报

4#
发表于 2012-5-2 12:45:15
你可以通过 redo log dump 找到kdxbin这个函数 ,例如

CHANGE #3 TYP:0 CLS: 1 AFN:74 DBA:0x1280ed2d SCN:0x0180.f72a49fa SEQ:  2
OP:10.15
    index redo (kdxbin) :  insert branch block row, count=3
    KTB Redo
    op: 0x01  ver: 0x01
    op: F  xid:  0x000f.011.0000e1a3    uba: 0x074280dc.2c40.04
    REDO itl: 1 insert into slot 122, child dba-0x1280e68c    <-- BLOCK 59020
!!!!
    new key : (2):  ff fe




也可以从INSERT DATA WITH INDEX的STACK CALL中找到 这些相关的函数 例如  kdisle()

INSERT INTO QUEUE_ITEM ( QI_Q_CODE,QI_EXTID,QI_PAGE,QI_PRIORITY,QI_DE_STATUS,QI_STATUS,QI_USER,QI_LABEL,QI_MESSAGE,QI_ID )  VALUES ( :b1,:b2,:b3,:b4,:b5,:b6,:b7,:b8,:b9,QUEUE_ITEM_SEQ.NEXTVAL  )  RETURNING QI_ID  INTO :b1

----- Call Stack -----
ksedmp <- ksfdmp <- kgeasi <- ktbtas <- ktbair        <- kdxlne <- kcoapl <- kcbapl <- kcrfwr <- kcbchg1         <- ktuchg <- ktbchg2 <- kdisnewle <- kdisle <- kdiins0          <- kdiins <- kauxsin <- insidx <- insrow <- insdrv           <- insexe <- opiexe <- opipls <- opiodr <- rpidrus            <- Cannot <- Cannot <- Cannot <- Cannot <- Cannot             <- Cannot <- Cannot <- skgmstack <- rpidru <- rpiswu2              <- rpidrv <- psddr0 <- psdnal <- pfrrun <- peicnt               <- kkxexe <- opiexe <- opiall0 <- opial7 <- opiodr                <- ttcpip <- opitsk <- opiino <- opiodr <- opidrv                 <- sou2o <- main <- libc_start_main <- init

回复 只看该作者 道具 举报

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

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

GMT+8, 2024-12-24 09:59 , Processed in 0.047668 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

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