设为首页 加入收藏

TOP

【oracle11g,17】存储结构:段的类型,数据块(行连接、行迁移,块头),段的管理方式,高水位线(四)
2015-07-24 11:00:51 来源: 作者: 【 】 浏览:5
Tags:oracle11g 存储 结构 段的 类型 数据 连接 迁移 块头 管理 方式 水位
s primary key(class_id)); Table created.
#创建索引组织表,
SQL> create table attendees(stud_id number,class_id number, 2 constraint pk_stud_class primary key(stud_id,class_id), 3 constraint fk_stud foreign key(stud_id) references students(stud_id), 4 constraint fk_class foreign key(class_id) references classes(class_id) 5 ) organization index;

7.分区索引类型:
①.表是分区表,索引不分区: ②.分区表的全局分区索引: 缺点:在truncate表时,这种索引会失效。 优点:global所以在全局是有序的,所以效率高。 ③.分区表的local分区索引: 语法:create index inx_tab_partition_col table_partition(col1) local; 缺点: 分区上的位图索引只能为local索引,不能为global全局索引。 local分区索引在每个分区上有序,但在全局是无序的,索引查询效率没有全局分区索引高。 优点:在olap系统中应用广泛,在truncate表时,这种索引不会失效。易于管理。

二.数据块:(pctfree和pctused,行连接、行迁移、数据块)

1.数据块分为三部分:block header(块头),free space(空闲空间), row data(数据行)。
2.pctfree 和pctused pctfree就是插入数据到数据块中,达到pctfree时就不在插入数据,pctfree就是为update预留的空间。 pctused就是数据块中存放的数据在pctused之下表示数据块为空块,在段空间手工管理的情况下,就会把这些数据块放到链表freelist队列中,用于再次插入数据。
pctfree 太小在update操作时会导致行迁移, pctused 太大在insert操作时会导致行连接。 3.行迁移(row migrate)和行连接(row chain) 行迁移:由于update操作导致原本在该块中的记录放不下了,就保留一个该行记录的地址,然后将该行记录迁移到其他块中,但是rowid不变。 行连接: 就是一行数据insert到一个块时,根本容不下这行数据,该条记录只能把数据分别放到若干个数据块中,使用row chain连接起来。long或long row数据类型的时候容易产生行连接。

4.数据块头: 块头包括表目录,行目录。 表目录: 这部分信息包含了在这个块中该表或该索引的相关信息。 行目录: 包含数据块中的实际行的信息(包括行数据区域中每行的地址) 事务槽 (ITL:interested transaction list): ①. 表初始事务槽是1,索引默认为2,事务表会根据需要动态扩展,用来记录该数据块所有发生的事务。如果事务已经提交,那么这个itl的位置就可以被反复使用了。 ②.多个事务同时修改同一数据块时,就会有多个事务槽,事务槽被占用完了(数据块可用的空间被用完) 当再有事务要操作数据块时,需要等待其他事务提交后,才能进行操作,此时就是事务槽的争用 查看事务槽:
SQL> select table_name ,tablespace_name,blocks,ini_trans,max_trans from dba_tables where table_name like 'EMP%'; TABLE_NAME TABLESPACE_NAME BLOCKS INI_TRANS MAX_TRANS ------------------------------ --------------- ---------- ---------- ---------- EMP1 SYSTEM 44 1 255 EMP USERS 1 1 255
SQL> select index_name,index_type,table_name,tablespace_name,ini_trans,max_trans from dba_indexes where owner='SCOTT'; INDEX_NAME INDEX_TYPE TABLE_NAME TABLESPACE_NAME INI_TRANS MAX_TRANS ---------- ---------- --------------- --------------- ---------- ---------- PK_EMP NORMAL EMP USERS 2 255 PK_DEPT NORMAL DEPT USERS 2 255

三.段的管理方式(两种)
自动段空间管理(ASSM)(数据库默认的管理形式)和手动段空间管理
1.自动段空间管理(ASSM)auto segment space manage 不访问freelist而是访问自己段头的位图,极大地减少了竞争。 连接列表freelist被位图所取代,它是一个二进制的数组,能够快速有效的管理存储扩展和剩余区块(free block),因此能够改善分段存储本质,assm 表空间上创建的段还有另外一个称呼叫bitmap managed segments (BMB段)。

assm优点:减轻缓冲区忙等待(buffer busy waits)的负担,有assm之后,oracle提高了DML并发操作的性能。因为位图的不同部分可以被同时使用,这样就消除了寻找剩余空间的串行化。根据oracle的测试结果,使用位图会消除所用分段头部的争夺,还能获得超快的并发插入操作。消除并发插入的热快问题和buffer busy wait。

assm的局限性: 无法控制tablespace内部的独立表和索引的存储行为 大型对象不能使用assm,而且必须为包含lob数据类型的表创建分离的tablespace。 不能使用assm创建临时表空间,这是由于排序时临时分段的短暂特性所决定的。 只用本地管理的tablespace才能使用位图分段管理。 使用超高容量的dml的时候可能会出现性能上的问题。

注意:不要与内存分配自动管理(asmm)混淆。

2.手动段空间管理(MSSM) 系统会在段头建立一个fresslist链表,我们会把有空闲空间的块,放到列表中。当块中的数据量少于pctused会插入freelist。 然而链表freelist是串行化操作。 在没有多个freelist的时候,当数据缓冲内的数据块由于被另一个dml事务处理锁定而无法使用的时候,缓冲区忙等待就会发生,当你需要将多个任务插入到同一表格里的时候,这些任务就被强制等待,而同时oracle会在同时分派剩余的区块,一次一个(buffer busy wait)。很多用户都访问freelist 形成热块。

3.两种段空间的管理比较: 相同点: 主要是管理已经分配给段的数据块, 不同点: 手工段空间管理方式:pctfree和pctused 都有效。 自动段空间管理方式:只使用pctfree来决定是不是空块,pctused 被位图的四个状态位所取代(如:>75%,50%~75%,50%~25%,<25%)。 assm无法控制tablespace内部的独立表和索引的存储行为。 mssm可以控制tablespace内部的独立表和索引的存储行为。

4.查看段的管理方式 SQL> select tablespace_name ,contents,status,extent_management,seg

首页 上一页 1 2 3 4 5 6 下一页 尾页 4/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Install Goldengate On Oracle Ra.. 下一篇Oracle实践--PL/SQL基础之触发器..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Java 并发工具类:提 (2025-12-25 20:25:44)
·Java面试技巧:如何 (2025-12-25 20:25:41)
·Java并发编程中的线 (2025-12-25 20:25:38)
·C 语言 - cppreferen (2025-12-25 19:50:27)
·《C 语言入门教程》 (2025-12-25 19:50:23)