sybase索引物理存储结构分析

----------------------------------------------------------------------------

---- 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;

---- 转载务必注明原始出 : http://blog.csdn.net/andkylee

---- 关键字: 索引 存储结构 分析  非聚簇 index storage non-clustered

----------------------------------------------------------------------------

 

迄今已分析出来了sybase中索引(indid>1)的物理存储结构。

索引结构是B-Tree类型的。最顶部叫做根(root),最底层称为叶子(leaf)。一个表可能建有好几个非聚簇索引,这时indid依次为2,3,。。。递增。

对于一个索引,比如indid=2的那个。索引树状结构是分层次的,在sybase数据存储中用level表示,根部级别最高,叶子的级别最低。叶子(leaf)的级别level为0,往上索引层level为1,再往上位2,。。。最后到达顶部root级别为(N-1,N为所有的层次数)。

 

不管APL还是DOL表,索引的每层(level)上的页面都是前后链接起来的,这一点有点像APL表中的数据页面上的前、后页链(data page link)。

以下简要演示分析索引结构的过程。

1.

设定成在终端显示dbcc结果信息。

2.

查看syspartitions表的信息

表PartitionTestTable是在其上的id列建了4个分区的分区表,它有2个索引。idx_PartitionTestTable_id对id列索引,idx_PartitionTestTable_name对name列索引。

我们就分析idx_PartitionTestTable_id这个索引吧。通过syspartitions表我们可以得到四个比较有用的datoampage,indoampage, firstpage ,rootpage。分别表示数据对象分配页的页号,索引对象分配页的页号,

索引叶子层上的第一页,索引根部的页号。(堆表信息中的firstpage,rootpage意思有些不同。分别表示:数据页的第一个、最后一页。)

有:datoampage=0,indoampage=62465,firstpage= 67256,rootpage=66248.

对于indoampage索引对象分配页,可以这么查看。(PartitionTestTable的objid为: 1223672376)

dbcc listoam(4,1223672376,2)

3.可以看出索引idx_PartitionTestTable_id在14个对象分配页allocation page上的分配情况如下:

(此处,暂时不解释以上结果中的情况!)

 

4.现在回到索引上,先从根部分析。rootpage=66248。

查看66248页上的16进制数据。

dbcc page(4,66248,1)

 

此时,可以看出索引根部的级别level为2。 也就是说索引还有中间层level=1和叶子层level=0.

看第二行数据,

Offset 47 - row length=15 # varlen cols=0 Child page ID=65823
2828702F (     0):  00be8301 00aff000 0041001f 010100    .........A.....
Row-Offset table for variable-length columns:
        [<varcol number>, <offset from start of the row>, <varcol length>]

 

它的子页面号是:65823。

再来查看65823的页面数据。

 

 

此页面65823是索引的中间层level=1.看第一行的数据。

Offset 32 - row length=15 # varlen cols=0 Child page ID=65822
28287020 (     0):  00be8301 00aff000 0041001e 010100    .........A.....
Row-Offset table for variable-length columns:
        [<varcol number>, <offset from start of the row>, <varcol length>]

 

页面:66248上的第二行就是指向该行。

 

继续查看它的子页面上的数据,65822。

 

 

还是分析页面上的第一行。索引叶子层直接指向了数据页面,某一页面上的某一行。

 

Offset 32 - row length=11 # varlen cols=0 Data page RID=(61615, 65)
28287020 (     0):  00be8301 00aff000 004100             .........A.
Row-Offset table for variable-length columns:
        [<varcol number>, <offset from start of the row>, <varcol length>]

 

继续往下,dbcc page(4,61615,1)找到第65行数据。

 

Offset 1072 - row ID=65 row length=16 # varlen cols=1
28287430 (     0):  0141be83 0100 1000 7a68616e 67020d08  .A......zhang...
28287440 (    16):
Row-Offset table for variable-length columns:
        [<varcol number>, <offset from start of the row>, <varcol length>]
        [1, 8, 5]

可以看出00be8301 00 aff000 004100中的be8301 00 和0141be83 01001000 7a68616e 67020d08中的

be83 0100 是一致的。也就是说索引中间层level=1是指向叶子层上的第一页。并且包含索引键的数据99262。

 

从16进制数据中分析出来,页61615第65行的数据为:id=99262,name='zhang'。

 

 

暂时就分析这么多。可能有些地方说的不太明白。见谅!

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
本文档详细介绍了sybase ASE的从基本感念到具体的详细的操作,目录如下: 1. 基本概念篇 5 1.1 什么是Sybase Adaptive Server Enterprise (ASE)? 5 1.2 Sybase 具有哪些Server以及这些Server的用途? 5 Backup Server 5 1.3 什么是登录帐户? 5 1.4 什么是角色,Sybase具有哪些常用的系统角色以及这些系统角色的作用? 5 1.5 什么是超级用户,它具有哪些特点? 6 1.6 什么是数据库设备? 7 1.7 什么是数据库? 7 1.8 Sybase具有那些重要和必要的系统数据库,它们的作用分别是什么? 7 1.9 什么是数据库用户,以及登录帐户与数据库用户的区别? 7 1.10 什么是用户定义组? 7 1.11 什么是数据库的属主? 8 1.12 什么是数据库选项,Sybase具有那些常用的数据库选项? 8 1.13 什么是数据库一致性检查,Sybase具有哪些常用的检查命令? 9 1.14 什么是 APL表和DOL表,它们的特点和区别? 9 1.15 什么是Sybase的锁,它具有哪些类型以及这些锁的作用? 9 1.16 什么是数据库备份和恢复? 11 2. 日常维护篇 12 2.1 常规数据库服务器维护的基本要点和步骤? 12 2.2 例行数据库备份恢复策略和必要步骤? 13 2.3 查找定位数据库服务器性能问题的常用工具和方法? 14 2.4 开发数据库应用时需要开发人员重点关注的几个问题? 18 2.5 如何在Windows 平台上启动和关闭Sybase数据库服务器? 18 2.6 如何在UNIX平台上启动和关闭Sybase数据库服务器? 18 2.7 如何使用交互式管理工具isql? 19 2.8 如何在Windows操作系统上安装Open Client12.0 19 2.9 如何使用图形化管理工具Sybase Central? 19 2.10 如何使用图形化管理工具Dsedit实用程序? 22 2.11 如何创建登录帐户? 26 2.12 如何修改自己以及其登录帐户的口令? 26 2.13 如何查看登录帐户的信息? 27 2.14 如何设置登录帐户的缺省数据库? 27 2.15 如何为登录帐户授予系统角色? 27 2.16 如何创建数据库设备? 28 2.17 如何把数据库设备设置为缺省设备? 28 2.18 如何镜像数据库设备和取消数据库设备镜像? 28 2.19 如何创建数据库? 29 2.20 如何在Sybase Central中配置Monitor Server? 30 2.21 如何配置用户自定义命名缓存以及缓冲池? 30 2.22 如何扩展数据库? 31 2.23 如何设置数据库为单用户模式? 31 2.24 如何把数据库设置为自动截断事务日志? 31 2.25 为了可以在用户事务中执行数据定义语言,应如何设置数据库选项? 32 2.26 如何设置数据库选项可以在用户表中自动添加序号生成器? 32 2.27 如何为数据库创建数据库用户? 32 2.28 如何创建用户自定义组? 32 2.29 如何改变用户自定义组中数据库用户? 33 2.30 如何查看数据库空间的大小? 33 2.31 如何改变数据库的属主? 33 2.32 如何执行sp_configure 系统存储过程来查看系统参数? 33 2.33 如何为当前的Sybase数据库服务器设置最大可用内存? 34 2.34 影响数据库服务器内存配置的基本参数 34 2.35 如何为当前的Sybase ASE 12.5设置可用的数据缓存? 35 2.36 如何为当前的Sybase ASE 12.5设置可用的过程缓存? 35 2.37 如何为当前的Sybase数据库服务器设置可用的最大数据库设备数量? 35 2.38 如何为当前的Sybase数据库服务器设置可用的最大锁数? 36 2.39 如何为当前的Sybase数据库服务器设置可用的最大用户连接数? 36 2.40 如何备份数据库? 36 2.41 如何进行数据库的增量备份? 37 2.42 如何恢复数据库? 37 2.43 如何截断数据库的事务日志? 38 2.44 如何恢复数据库到某一具体时间? 38 2.45 如何把表、索引等数据库对象的定义从数据库中导出来? 38 2.46 如何把整个数据库中所有用户表的数据全部导出来? 39 2.47 如何执行快速bcp操作? 39 2.48 如何查看当前数据库中的进程信息? 39 2.49如何查看当前数据库中锁发生的情况? 40 2.50 如何更改用户表的锁模式? 40 2.51 如何执行optdiag命令来监控表和索引物理使用情况? 40 2.52 如何执行reorg 系列命令来优化Dol表及其索引? 41 2.53 如何使用sp_sysmon存储过程来查看当前数据库的性能情况? 41 3. 技术专刊 43 3.1 关于Backup Server 43 3.2 Backup Server的名字 46 3.3 Sybase的数据库设备 47 3.4 数据库选项(dboptions)的使用与管理 48 3.5 Index & Performance 51 3.6 SYBASE ASE 事务日志 55 3.7 阀值管理(Threshold Management) 60 3.8 日常后备数据库 64 3.9 使用dump transaction with no_log的危险性 65 3.10 在ASE 11.9.2版中采用了行级加锁机制以提高性能 65 3.10.1 所支持的加锁机制 66 3.10.2 对小量数据的多次并发访问 70 3.10.3 堆栈表和热点 73 3.10.4 死锁 74 3.10.5 何时使用不同类型的加锁方法 77 3.10.6 结论 79 3.11 DBCC 79 3.12 Sybase ASE的字符集 84 3.12.1 概念 84 3.12.2 配置 89 3.12.3 错误处理 96 3.12.4 附:如何安装cp936字符集 97 4. 提高篇 98 4.1 为什么数据库事务日志满了,使用dump tran with no_log仍不能截断日志? 98 4.2 如何后备数据量大于2GB的数据库 98 4.3 如何更改ASE名称(在UNIX、OPENVMS平台上) 99 4.4 如何在HP平台BCP OUT超过2G的数据 99 4.5 如何将ASE SERVER移植到同种平台(相同操作系统)的系统上 100 4.6 如何扩展master数据库空间 103 4.7 Invalid tdslength value 105 4.8 如何将master设备从UNIX的文件系统移到裸分区 106 4.9 如何生成bcp命令文件(以pubs2为例) 107 4.10 如何动手修改interfaces文件 107 4.11 关于tempdb的优化 108 4.12 ASE12.5.x的一条有用的命令: disk resize 110 4.13 如何更改字符集为cp936 110 5. 灾难恢复篇 111 5.1 数据库服务不能启动 111 5.1.1 如何查找数据库启动失败原因 111 5.1.2 简单故障及排除方法 111 5.1.3 master数据库日志满了,server无法启动,怎么办 (error 1105) 112 5.1.4 SQL Server 10.x配置内存过大、Server不能启动时怎么办? 113 5.2 数据库被挂起 113 5.2.1 如何解决数据库被挂起的问题(error 926) 113 5.2.2 如何做 rebuild log 116 5.3 数据库恢复 118 5.3.1 如何删除坏的用户数据库?(以pubs2为例) 118 5.3.2 如何做Rebuild Master 119 5.3.3 如何恢复master数据库 121 5.3.4 如何移植master设备 123 5.3.5 如何重建sybsystemprocs系统数据库 125 5.3.6 如何挽救 corrupt table 中的数据 126 5.3.7 Recovering the master Database or Master Device under ASE 12.5 128 5.3.8 如何只用数据库设备文件生成新的数据库服务器 136 5.3.9如何单独在备份机上启动Sybase ASE12.5 (ASE HA) 139 5.4 数据库恢复以后的工作 140 5.4.1 如何检查数据库中数据的一致性 140 6. SYBASE培训服务 143 6.1 SYBASE培训概述 143 6.2 SYBASE主要数据库培训班介绍 144 7. 如何获得帮助 145 7.1 热线电话 145 7.2 Sybase技术文档 145 7.3 Sybase网上资源 145 7.4 您的建议 146

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值