[20141008]使用bbed查看索引结构.txt

[20141008]使用bbed查看索引结构.txt

--今天使用bbed查看索引结构,发现一些问题.链接如下:
http://blog.itpub.net/267265/viewspace-1291526/

--那scott.dept表做一个测试看看.

SCOTT@test> @ver
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

SCOTT@test> select * from dept ;
    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS1
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
        50 aaa            bbb
        60 cc             aaa
        70 aaaa           BBBB

7 rows selected.

SCOTT@test> select segment_name,header_file,header_block from dba_segments where owner=user and segment_name='PK_DEPT';

SEGMENT_NAME         HEADER_FILE HEADER_BLOCK
-------------------- ----------- ------------
PK_DEPT                        4          130

-- pk_dept的root节点在4,131,通过bbed观察:

BBED> set dba 4,131
        DBA             0x01000083 (16777347 4,131)

BBED> p kd_off
sb2 kd_off[0]                               @132      8032
sb2 kd_off[1]                               @134      0
sb2 kd_off[2]                               @136      8021
sb2 kd_off[3]                               @138      8010
sb2 kd_off[4]                               @140      7999
sb2 kd_off[5]                               @142      7988
sb2 kd_off[6]                               @144      7955

--kd_off保存的信息如何确定偏移位置呢?

p *kd_off[6]
x /rn
p *kd_off[5]
x /rn
p *kd_off[4]
x /rn
p *kd_off[3]
x /rn
p *kd_off[2]
x /rn
p *kd_off[1]
x /rn
p *kd_off[0]
x /rn

p *kd_off[6]
rowdata[37]
-----------
ub1 rowdata[37]                             @8055     0x00

x /rn
rowdata[37]                                 @8055
-----------
flag@8055:     0x00 (NONE)
lock@8056:     0x00
keydata[6]:    0x01  0x00  0x05  0x84  0x00  0x00
data key:
col    0[2] @8064: 50

--索引因为是主键索引,rowid信息在前面,并且没有长度指示器.

p *kd_off[5]
rowdata[70]
-----------
ub1 rowdata[70]                             @8088     0x00

x /rn
rowdata[70]                                 @8088
-----------
flag@8088:     0x00 (NONE)
lock@8089:     0x00
keydata[6]:    0x01  0x00  0x05  0x83  0x00  0x04
data key:
col    0[2] @8097: 40

p *kd_off[4]
rowdata[81]
-----------
ub1 rowdata[81]                             @8099     0x00

x /rn
rowdata[81]                                 @8099
-----------
flag@8099:     0x00 (NONE)
lock@8100:     0x00
keydata[6]:    0x01  0x00  0x05  0x83  0x00  0x03
data key:
col    0[2] @8108: 30

p *kd_off[3]
rowdata[92]
-----------
ub1 rowdata[92]                             @8110     0x00

x /rn
rowdata[92]                                 @8110
-----------
flag@8110:     0x00 (NONE)
lock@8111:     0x00
keydata[6]:    0x01  0x00  0x05  0x83  0x00  0x02
data key:
col    0[2] @8119: 20

p *kd_off[2]
rowdata[103]
------------
ub1 rowdata[103]                            @8121     0x00

x /rn
rowdata[103]                                @8121
------------
flag@8121:     0x00 (NONE)
lock@8122:     0x00
keydata[6]:    0x01  0x00  0x05  0x83  0x00  0x01
data key: col    0[2] @8130: 10

p *kd_off[1]
kdxle.kdxlexco.kdxcolev
-----------------------
ub1 kdxcolev                                @100      0x00

x /rn
kdxle.kdxlexco.kdxcolev                     @100
-----------------------
BBED-00210: no row at this offset

p *kd_off[0]
pad
---
ub1 pad                                     @8132     0x00

BBED> x /rn
pad                                         @8132
---
flag@8132:     0x00 (NONE)
lock@8133:     0x00
keydata[6]:    0x00  0x00  0x00  0x00  0x00  0x00
data key:
BBED-00210: no row at this offset

--后面2个出现错误,后面的偏移如何确定呢?对应的是deptno=60,deptno=70的索引.

--想起以前写的一篇"[20111223]索引键值在B tree索引块中的顺序.txt"
http://blog.itpub.net/267265/viewspace-713847/

--索引的存储是块内无序,块间有序.从前面的输出可以看出kd_off[3]开始的偏移指向的键值(10)是有序的.可以猜测在kd_off[6]后面应
--该还有两个.前面的kd_off[0],kd_off[1]或许是其他信息.

BBED> dump /v offset 146 count 2
File: /u01/app/oracle11g/oradata/test/users01.dbf (4)
Block: 131                                                         Offsets:  146 to  147                                                      Dba:0x01000083
---------------------------------------------------------------------------------------------------------------------------------------------------------------
fd1e                                                                                                        l ..

BBED> dump /v offset 148 count 2
File: /u01/app/oracle11g/oradata/test/users01.dbf (4)
Block: 131                                                         Offsets:  148 to  149                                                      Dba:0x01000083
---------------------------------------------------------------------------------------------------------------------------------------------------------------
f21e                                                                                                        l ..

--对应16进制如下:(顺序要颠倒1下)
SCOTT@test> @16to10 1ef2
16 to 10 DEC
------------
        7922

SCOTT@test> @16to10 1efd
16 to 10 DEC
------------
        7933

BBED> set offset 8022
        OFFSET          8022

BBED> x /rn
rowdata[4]                                  @8022
----------
flag@8022:     0x00 (NONE)
lock@8023:     0x00
keydata[6]:    0x01  0x00  0x05  0x85  0x00  0x01
data key:
col    0[2] @8031: 70

BBED> set offset 8033
        OFFSET          8033

BBED> x /rn
rowdata[15]                                 @8033
-----------
flag@8033:     0x00 (NONE)
lock@8034:     0x00
keydata[6]:    0x01  0x00  0x05  0x85  0x00  0x00
data key:
col    0[2] @8042: 60

--这样正好对上.

时间: 2024-08-24 08:09:13

[20141008]使用bbed查看索引结构.txt的相关文章

[20150205]关于位图索引7.txt

[20150205]关于位图索引7.txt --许多人知道在oltp系统不适合使用位图索引.它的索引的记录结构如下是: 字段0:键值 字段1:开始rowid 字段2:结束rowid 字段3:位图信息,指示那行记录,位图1=>表示存在.位图0=>表示不存在. --但是字段4的位图信息,介绍的资料太少,我自己看了链接http://juliandyke.com/Presentations/BitmapIndexInternals.ppt,做一个简单探究. --前面的blog已经讲解了字段3的位图信息

InnoDB 中文参考手册 --- 11 表和索引结构

参考|参考手册|索引|中文 InnoDB 中文参考手册 --- 犬犬(心帆)翻译 11 表和索引结构MySQL 在数据库目录下的 .frm 文件中存储它的数据字典信息.但是每个 InnoDB 类型表也同样在 InnoDB 表空间内的内部的数据字典中存在它自己的进入点.当 MySQL 移除(drop) 一个表或一个数据库时,它将同时删除 .frm 文件,以及在 InnoDB 的数据字典中相对应的进入点.这就是为什么不能通过简单的删除 .frm 文件为移除数据库中的 InnoDB 类型表的原因,以及

oracle的索引结构

顺序文件:几种简单的文件组织,其产生方式是将数据文件按某个查找键排序,并在该文件上建立索引. 稠密索引:这种索引为数据文件的每个记录设一个键-指针对.这些键-指针对按它们的键 值顺序存放. 稀疏索引:这些索引为数据文件的每个存储块设一个键-指针对.与指针相对应的键为该指针所指向的存储块中第一个键值. 多级索引:在索引文件上再建索引,在索引的索引上再建索引,等等,这在有时候是很有用的.高级索引必须是稀疏的. 文件的扩展:随着数据文件和它的索引文件的增长,必须采取一些措施来为文件增加附加的存储块.为

MSSQL索引结构及其使用

一.深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonclustered index,也称非聚类索引.非簇集索引).下面,我们举例来说明一下聚集索引和非聚集索引的区别: 其实,我们的汉语字典的正文本身就是一个聚集索引.比如,我们要查"安"字,就会很自然地翻开字典的前几页,因为"安"的拼音是"an",而按照拼

深入分析MySQL索引结构原理、性能分析与优化详解

第一部分:基础知识: 索引 官方介绍索引是帮助MySQL高效获取数据的数据结构.笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里,不用一页一页查阅找出需要的资料.关键字index --------------------- 唯一索引 强调唯一,就是索引值必须唯一,关键字unique index 创建索引: 1.create unique index 索引名 on 表名(列名); 2.alter table 表名 add unique index 索引名 (列名); 删除索引: 1.

[20150205]关于位图索引6.txt

[20150205]关于位图索引6.txt --许多人知道在oltp系统不适合使用位图索引.它的索引的记录结构如下是: 字段0:键值 字段1:开始rowid 字段2:结束rowid 字段3:位图信息,指示那行记录,位图1=>表示存在.位图0=>表示不存在. --昨天主要学习了解了字段3的相关信息,昨晚想起以前itpub的讨论,讲位图索引很容易出现阻塞,主要是如果事务发生在同一个行片, --如果不在同一个行片,就不会出现阻塞,还是通过例子来说明: 1.建立测试环境: SCOTT@test>

[20150204]关于位图索引5.txt

[20150204]关于位图索引5.txt --许多人知道在oltp系统不适合使用位图索引.它的索引的记录结构如下是: 字段0:键值 字段1:开始rowid 字段2:结束rowid 字段3:位图信息,指示那行记录,位图1=>表示存在.位图0=>表示不存在. --但是字段4的位图信息,介绍的资料太少,我自己看了链接http://juliandyke.com/Presentations/BitmapIndexInternals.ppt,做一个简单探究. --前面的讲解仅仅在1个数据块的情况,如果开

[20170411]bbed计算redo检查和.txt

[20170411]bbed计算redo检查和.txt --前一阵子做测试,需要一个计算器做异或的操作,链接http://blog.itpub.net/267265/viewspace-2134945/ --正好前几天开会遇到熟人,谈起我写的脚本很实用.我说不支持管道操作不是很好,对方讲支持,他自己就是这样用的. $ cat ~/bin/xor.sh #! /bin/bash # just play , calc xor!! s='0' for i in $(cat $1| tr 'a-f' '

[20150203]关于位图索引1.txt

[20150203]关于位图索引1.txt --许多人知道在oltp系统不适合使用位图索引.它的索引的记录结构如下是: 字段0:键值 字段1:开始rowid 字段2:结束rowid 字段3:位图信息,指示那行记录,位图1=>表示存在.位图0=>表示不存在. --但是字段4的位图信息,介绍的资料太少,我自己看了链接http://juliandyke.com/Presentations/BitmapIndexInternals.ppt,做一个简单探究. 1.建立测试环境: SCOTT@test&g