BTree索引dump

SQL索引结构与转储技术详解
一,创建测试表并且收集统计信息。
SQL> create table test as select*from sales;
Table created.
SQL> create index test_inx1 on test(prod_id,cust_id,time_id,channel_id);
Index created.
SQL> begin
2 dbms_stats.gather_table_stats(ownname =>'SH',
3 tabname =>'TEST',
[@more@]
4 estimate_percent =>40,
5 method_opt =>'for all columns size auto',
6 cascade =>TRUE);
7 end;
8 /
二,索引的统计信息。
PL/SQL procedure successfully completed.
NAME BLEVEL LEAF_BLKS DST_KEYS NUM_ROWS CLUST_FACT LEAF_PER_KEY DATA_PER_KEY
---------- ------- ---------- ---------- ---------- ---------- ------------ ------------
TEST_INX1 2 3935 950705 950705 782420 1 1
三,转储BTree结构信息
SQL> select object_id from dba_objects where object_Name='TEST_INX1';
OBJECT_ID
----------
71042
SQL>alter session set events'immediate trace name treedump level 71042';
------------------------------------------------------------------------
215 branch: 0x1000334 16778036 (0: nrow: 10, level: 2)
216 branch: 0x1001548 16782664 (-1: nrow: 429, level: 1)
217 leaf: 0x1000335 16778037 (-1: nrow: 248 rrow: 248)
218 leaf: 0x1000336 16778038 (0: nrow: 247 rrow: 247)
...
646 branch: 0x10016f7 16783095 (0: nrow: 424, level: 1)
647 leaf: 0x1001547 16782663 (-1: nrow: 247 rrow: 247)
648 leaf: 0x1001549 16782665 (0: nrow: 247 rrow: 247)
649 leaf: 0x100154a 16782666 (1: nrow: 247 rrow: 247)
...
1071 branch: 0x10018b4 16783540 (1: nrow: 436, level: 1)
1072 leaf: 0x10016f6 16783094 (-1: nrow: 239 rrow: 239)
1073 leaf: 0x10016f8 16783096 (0: nrow: 239 rrow: 239)
1074 leaf: 0x10016f9 16783097 (1: nrow: 239 rrow: 239)
...
1508 branch: 0x1001a75 16783989 (2: nrow: 442, level: 1)
1509 leaf: 0x10018b3 16783539 (-1: nrow: 247 rrow: 247)
1510 leaf: 0x10018b5 16783541 (0: nrow: 247 rrow: 247)
...
1951 branch: 0x1001c1f 16784415 (3: nrow: 417, level: 1)
1952 leaf: 0x1001a74 16783988 (-1: nrow: 248 rrow: 248)
1953 leaf: 0x1001a76 16783990 (0: nrow: 247 rrow: 247)
1954 leaf: 0x1001a77 16783991 (1: nrow: 247 rrow: 247)
...
2369 branch: 0x1001dbf 16784831 (4: nrow: 409, level: 1)
2370 leaf: 0x1001c1e 16784414 (-1: nrow: 239 rrow: 239)
2371 leaf: 0x1001c20 16784416 (0: nrow: 239 rrow: 239)
2372 leaf: 0x1001c21 16784417 (1: nrow: 239 rrow: 239)
...
2779 branch: 0x1001f55 16785237 (5: nrow: 399, level: 1)
2780 leaf: 0x1001dbe 16784830 (-1: nrow: 239 rrow: 239)
2781 leaf: 0x1001dc0 16784832 (0: nrow: 239 rrow: 239)
2782 leaf: 0x1001dc1 16784833 (1: nrow: 237 rrow: 237)
...
3179 branch: 0x10020fa 16785658 (6: nrow: 414, level: 1)
3180 leaf: 0x1001f54 16785236 (-1: nrow: 239 rrow: 239)
3181 leaf: 0x1001f56 16785238 (0: nrow: 239 rrow: 239)
3182 leaf: 0x1001f57 16785239 (1: nrow: 239 rrow: 239)
3183 leaf: 0x1001f58 16785240 (2: nrow: 239 rrow: 239)
...
3594 branch: 0x10022af 16786095 (7: nrow: 428, level: 1)
3595 leaf: 0x10020f9 16785657 (-1: nrow: 239 rrow: 239)
3596 leaf: 0x10020fb 16785659 (0: nrow: 239 rrow: 239)
3597 leaf: 0x10020fc 16785660 (1: nrow: 239 rrow: 239)
...
4023 branch: 0x10022b7 16786103 (8: nrow: 8, level: 1)
4024 leaf: 0x10022ae 16786094 (-1: nrow: 231 rrow: 231)
4025 leaf: 0x10022b0 16786096 (0: nrow: 231 rrow: 231)
4026 leaf: 0x10022b1 16786097 (1: nrow: 231 rrow: 231)
--------------------------------------------------------------
1.此索引有三个层次,每个leaf block大约有231-248行。
2.每一行的第一列表示节点类型:branch表示分支节点(包括根节点),而leaf则表示叶子节点;
3.第二列表示十六进制表示的节点的地址;第三列表示十进制表示的节点的地址;
4.第四列表示相对于前一个节点的位置,根节点从0开始计算,其他分支节点和叶子节点从-1开始计算;
5.第五列的nrow表示当前节点中所含有的索引条目的数量。
比如我们可以看到根节点中含有的nrow为10,表示根节点中含有10个索引条目,分别指向10个分支节点;
6.第六列中的level表示分支节点的层级,对于叶子节点来说level都是0。第六列中的rrow表示有效的索引条目
(因为索引条目如果被删除,不会立即被清除出索引块中。所以nrow减rrow的数量就表示已经被删除的索引条目数量)的数量,
比如对于第一个leaf来说,其rrow为248,也就是说该叶子节点中存放了248个可用索引条目,分别指向表test的248条记录。
四.转储一个索引节点
上面索引中根节点的address是16778036
利用如下SQL转换成file#和block#
select dbms_utility.data_block_address_file(16783095) as file#,
dbms_utility.data_block_address_block(16778095) as block# from dual;
FILE# BLOCK#
---------- ----------
4 820
SQL> alter system dump datafile 4 block 820;
System altered.
摘取trace文件:
1055 Branch block dump
1056 =================
1057 header address 67465804=0x405724c
1058 kdxcolev 2
1059 KDXCOLEV Flags = - - -
1060 kdxcolok 0
1061 kdxcoopc 0x80: opcode=0: iot flags=--- is converted=Y
1062 kdxconco 5
1063 kdxcosdc 0
1064 kdxconro 9
1065 kdxcofbo 46=0x2e
1066 kdxcofeo 7882=0x1eca
1067 kdxcoavs 7836
1068 kdxbrlmc 16782664=0x1001548
1069 kdxbrsno 0
1070 kdxbrbksz 8056
1071 kdxbr2urrc 0
其中kdxcolev表示索引层级号,由于转储的是根节点,所以其层级号为2。
对叶子节点来说该值为0;kdxcolok表示该索引上是否正在发生修改块结构的事务;
kdxcoopc表示内部操作代码;kdxconco表示索引条目中列的数量;
kdxcosdc表示索引结构发生变化的数量,当修改表里的某个索引键值时,该值增加;
kdxconro表示当前索引节点中索引条目的数量,但是不包括kdxbrlmc指针;
kdxcofbo表示当前索引节点中可用空间的起始点相对当前块的位移量;
kdxcofeo表示当前索引节点中可用空间的最尾端的相对当前块的位移量;
kdxcoavs表示当前索引块中的可用空间总量,也就是用kdxcofeo减去kdxcofbo得到的。
kdxbrlmc表示分支节点的地址,该分支节点存放了索引键值小于row#0(在转储文档后半部分显示)所含有的最小值的所有节点信息;
kdxbrsno表示最后一个被修改的索引条目号,这里看到是0,表示该索引是新建的索引;
kdxbrbksz表示可用数据块的空间大小。
1072 row#0[8042] dba: 16783095=0x10016f7
1073 col 0; len 2; (2): c1 19
1074 col 1; len 3; (3): c2 57 1e
1075 col 2; len 1; (1): 78
1076 col 3; TERM
1077 row#1[8029] dba: 16783540=0x10018b4
1078 col 0; len 2; (2): c1 1f
1079 col 1; len 4; (4): c3 02 33 60
1080 col 2; TERM
1081 row#2[8015] dba: 16783989=0x1001a75
1082 col 0; len 2; (2): c1 26
1083 col 1; len 3; (3): c2 1a 3a
1084 col 2; len 1; (1): 78
1085 col 3; TERM
1086 row#3[7992] dba: 16784415=0x1001c1f
1087 col 0; len 2; (2): c1 2e
1088 col 1; len 3; (3): c2 46 3c
1089 col 2; len 7; (7): 78 65 05 07 01 01 01
1090 col 3; len 2; (2): c1 04
1091 col 4; TERM
1092 row#4[7968] dba: 16784831=0x1001dbf
1093 col 0; len 3; (3): c2 02 11
1094 col 1; len 3; (3): c2 20 4f
1095 col 2; len 7; (7): 78 64 08 0b 01 01 01
1096 col 3; len 2; (2): c1 04
1097 col 4; TERM
1098 row#5[7955] dba: 16785237=0x1001f55
1099 col 0; len 3; (3): c2 02 17
1100 col 1; len 3; (3): c2 44 3a
1101 col 2; TERM
1102 row#6[7931] dba: 16785658=0x10020fa
1103 col 0; len 3; (3): c2 02 1e
1104 col 1; len 3; (3): c2 0f 55
1105 col 2; len 7; (7): 78 65 0c 10 01 01 01
1106 col 3; len 2; (2): c1 04
1107 col 4; TERM
1108 row#7[7907] dba: 16786095=0x10022af
1109 col 0; len 3; (3): c2 02 26
1110 col 1; len 3; (3): c2 23 39
1111 col 2; len 7; (7): 78 65 0a 12 01 01 01
1112 col 3; len 2; (2): c1 05
1113 col 4; TERM
1114 row#8[7882] dba: 16786103=0x10022b7
1115 col 0; len 3; (3): c2 02 31
1116 col 1; len 4; (4): c3 02 1c 58
1117 col 2; len 7; (7): 78 65 08 08 01 01 01
1118 col 3; len 2; (2): c1 05
1119 col 4; TERM
1120 ----- end of branch block dump -----
1121 End dump data blocks tsn: 4 file#: 4 minblk 820 maxblk 820
以上9个索引条目加上kdxbrlmc所指向的第一个分支节点共是10个索引条目。每个条目指向索引的一个branch节点。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25586587/viewspace-1053509/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25586587/viewspace-1053509/

30.若要成功启动数据库实例,则数据目录的权限应设置为 A. 777 B. 744 C. 740 D. 700 31.KES设置密码中至少包含字母个数的参数是什么? A. passwordcheck.password_length B. passwordcheck.PASSWORD_condition_digit C. passwordcheck.PASSWORD_condition_punct D. passwordcheck.PASSWORD_condition_letter 32.在KingbaseESv8中,在8:00使用sys_dump将表t01进行了备份,因该表数据量较大,在10:00成功完成了备份任务。之后业务程序也持续对表t01进行了多次增删改查,如果在12:00使用该备份将表t01进行了恢复,则该表t01中的数据应该是哪个时刻所对应的内容? A. 8:00 B. 10:00 C. 12:00 33.在KingbaseES中,进行逻辑还原某张表之前,首先需要确保什么? A. 待还原的表没有被其它会话修改 B. 数据库正在运行 C. 待还原的表没有被其它会话查询 D. 待还原的表不能存在被其它表引用的主键约束 34.以下哪个SQL命令可用于设置事务的隔离级别? A. SET TRANSACTION ISOLATION LEVEL B. SET ISOLATION LEVEL C. SET TRANSACTION LEVEL D. SET LEVEL 35.在KingbaseES中,关于passwordcheck模块的描述,哪个是正确的(单选)? A. passwordcheck模块允许用户修改相关参数来配置密码检查规则 B. 启用passwordcheck模块后,它将自动拒绝所有预先加密的口令 C. passwordcheck模块默认会检查用户密码是否包含用户名本身 D. passwordcheck模块默认会检查用户密码是否包含系统关键字 36.在KingbaseESv8中设置账户admin永不过期的SQL命令是 A. ALTER ROLE user1 UNLOCK ACCOUNT; B. ALTER USER user1 ACCOUNT UNLOCK; C. ALTER ROLE user1 VALID UNTIL 'infinity'; D. ALTER USER user1 VALID UNTIL infinity; 37.KingbaseESv8数据库在客户端与服务器之间传递数据时,是否会进行字符集的转换? A. 是 B. 否 C. 不确定 38.KingbaseESv8的备份工具sys_dump支持压缩备份模式,你应如何从一个压缩格式的SQL转储文件中恢复一个单独的schema? A. 使用ksql的--schema选项 B. 使用sys_restore的-n选项 C. 使用sys_dump的-s选项 D. 不能从一个全备文件中恢复单独一个schema 39.在kingbaseES中,如果有数据库、模式、对象的属主为用户a,当管理员system执行drop user a cascade;命令时,结果描述正确的是? A. 成功,用户a被删除,对象残留 B. 报错,因为有对象属于用户a C. 成功,用户a和相关对象一并被删除 D. 报错,该SQL语法错误 40.数据库的锁用于提供 A. 改进性能 B. 保证数据完整性和一致性 C. 可用性和易于维护 D. 用户安全 41.KingbaseES的逻辑复制基于以下哪种技术实现? A. 触发器 B. 逻辑解码 C. 触发器 + 规则 D. 物理日志解析 42.KingbaseESv8告警日志信息仅能保留7天,7天前的日志会被覆盖。 A. 正确 B. 错误 C. 不确定 43.在KingbaseES中,如果你有一个非常大的表,并且经常进行范围查询,哪种索引类型可能最适合? A. Hash 索引 B. Btree 索引 C. GiST 索引 D. 唯一索引 44.在KESv8r6中,要想使用sys_rman工具的restore命令把整个数据库恢复到一个新的目录,需要使用哪个选项? A. --target B. --type C. --location D. --kb1-path 45.在KingbaseES中,哪个进程负责管理服务器进程之间的通信? A. 主进程 B. Autovacuum进程 C. 客户端进程 D. 会话服务进程 46.KingbaseES默认的事务隔离级别是什么? A. repeatable read B. serializable C. read uncommitted D. read committed 47.在KingbaseESv8中,是否可以随时改变一个数据库的默认表空间吗? A. 是 B. 否 C. 不确定 48.以下哪些不是KES控制文件记录的内容? A. 建库时生成的静态信息。 B. 用户的密码信息。 C. WAL以及checkpoint的动态信息。 D. kingbase.conf中的配置信息。 49.管理员可以使用哪个函数删除指定天数之前的登录信息? A. sys_del_user_logonlog_before_days B. sys_del_user_logonlog_by_name C. sys_del_user_logonlog_by_ip D. sys_del_user_logonlog_by_host 50.在KingbaseESv8中,只限制user01用户登录test数据库时work_mem为8MB,其它用户保留默认值,以下哪条命令是正确的? A. ALTER DATABASE test SET work_mem='8MB'; B. ALTER USER system SET work_mem='32MB'; C. ALTER ROLE user01 IN DATABASE test SET work_mem='8MB'; D. 在主参数配置文件中加入work_mem='8MB',并重启实例。
08-31
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值