ORACLE内核解密之表空间管理

ORACLE内核解密之表空间管理一 ORACLE 表空间管理 1 本地表空间管理 tablespace LMT LMT 是通过把 EXTENT MANAGEMENT LOCAL 子句添加到 tablespace 的定义句法而实现的

欢迎大家来到IT世界,在知识的湖畔探索吧!

一、ORACLE表空间管理

1、本地表空间管理tablespace(LMT)

LMT是通过把EXTENT MANAGEMENT LOCAL子句添加到tablespace的定义句法而实现的。和原来由字典管理的tablespace(DMT)不同,LMT会将扩展管理自动化,并保持Oracle DBA不会被用来指定管理扩展大小的NEXT存储参数。这个原则唯一的例外是在NEXT和MINEXTENTS一起用在表格创建的时候。

2、自动区段空间管理(ASSM)

ASSM的tablespace是通过将SEGMENT SPACE MANAGEMENT AUTO子句添加到tablespace的定义句法里而实现的。通过使用位图freelist取代传统单向的链接列表freelist,ASSM的tablespace会将freelist的管理自动化,并取消为独立的表格和索引指定PCTUSED、FREELISTS和FREELIST GROUPS存储参数的能力。

现在ORACLE基本都是ASSM表空间管理,下面我们讨论ASMM表空间管理。

二、自动区段空间管理

1、ASSM结构

ASSM整体结构是由三层位图快和数据块组成。第一层位图块L3块,一块L3块存放多个L2块地址,一个L2块地址存放多个L1块地址,结构示意图如下:

ORACLE内核解密之表空间管理

欢迎大家来到IT世界,在知识的湖畔探索吧!

ORACLE一般通过以下几步将数据插入数据库中块的:

第一步:查找数据字典(DBA_SEGMENTS)定位段头(L3)的位置

第二步:在段头中找到L2的位置

第三步:在L2块中根据进程PID号,做HASH运算得到一个随机数A,然后根据随机数找到对应A的L1块地址信息

第四步:根据对应的L1块信息,再次根据进程PID号,做HASH运算得到一个随机数B,然后根据B找到对应数据库块M地址信息

第五步:向第M块插入数据

以上步骤中L3块一般只有一个,一个L3块中有多个L2块一般只有当一个L2用完才会选择第二个L2块,此处不是随机选择,在L2中选择L1时通过HASH算法就是随机选择了,在L1中选择数据块也是通过HASH算法,所以此处也是随机选择,如果一个L2块中有50个L1块地址信息,一个L1中有50数据块地址信息,那么久可以支持同时2500个进程PID同时插入,这就是ORALCE数据所说的支持高并发的原理。

2、ASSM案例

我们建立一个表空间管理方式为ASSM的表空间为50M区大小为1M

 CREATE TABLESPACE LIUXIAOBIN0724 DATAFILE 'F:\360Downloads\ORACLE\LIUXIAOBIN0724_01.DBF' SIZE 50M REUSE UNIFORM SIZE 1M; CREATE TABLE LUXIAOBIN0724(ID INT,NAME VARCHAR2(20)) TABLESPACE LIUXIAOBIN0724; 

欢迎大家来到IT世界,在知识的湖畔探索吧!

查看区占用情况

欢迎大家来到IT世界,在知识的湖畔探索吧!SELECT EXTENT_ID, --区ID FILE_ID, --文件ID BLOCK_ID, --第一个块ID BLOCKS --块数 FROM DBA_EXTENTS WHERE SEGMENT_NAME = 'LUXIAOBIN0724' --表名 ORDER BY EXTENT_ID 
ORACLE内核解密之表空间管理

我们分别DUMP块128,129,130,131看看块类型(L1,L2,L3)

ALTER SYSTEM DUMP DATAFILE 'F:\360Downloads\ORACLE\LIUXIAOBIN0724_01.DBF' block 128; ALTER SYSTEM DUMP DATAFILE 'F:\360Downloads\ORACLE\LIUXIAOBIN0724_01.DBF' block 129; ALTER SYSTEM DUMP DATAFILE 'F:\360Downloads\ORACLE\LIUXIAOBIN0724_01.DBF' block 130; ALTER SYSTEM DUMP DATAFILE 'F:\360Downloads\ORACLE\LIUXIAOBIN0724_01.DBF' block 131; 
ORACLE内核解密之表空间管理

根据DUMP文件可知128和129号块为L1

ORACLE内核解密之表空间管理

根据DUMP文件可知130号块为L2块131块为段头块L3

此时向表中插入数据:

欢迎大家来到IT世界,在知识的湖畔探索吧!INSERT INTO LUXIAOBIN0724 VALUES(1,'BBBBBB'); COMMIT; SELECT * FROM LUXIAOBIN0724; 
ORACLE内核解密之表空间管理

查看数据插入的那个块

SELECT DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) FILEID, --文件ID DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) BLOCK_ID,--块id DBMS_ROWID.ROWID_ROW_NUMBER(ROWID) ROW_ID,--行ID ID FROM LUXIAOBIN0724; 
ORACLE内核解密之表空间管理

换一个会话插入一行数据;

欢迎大家来到IT世界,在知识的湖畔探索吧!INSERT INTO LUXIAOBIN0724 VALUES(2,'CCCCCC'); COMMIT; 
ORACLE内核解密之表空间管理

查看不同会话插入的块情况:

ORACLE内核解密之表空间管理

再次用第一个会话插入一条数据并查看插入的块情况;

ORACLE内核解密之表空间管理

根据实验我们知道,同一个会话插入的是同一个块,不同会话插入的是不同的,所以ASSM在在同一个会话大量插入数据时可能导致BUFFER BUSY WAITS,

大家可以思考我们搞数据库的常常会遇到一个问题:比如一个应用刚上班的时候,系统经常出现BUFFER BUSY WAITS,到下午了系统使用的人更多了反而不会出现BUFFER BUSY WAITS.这个问题在上面的实验大家深入实验可以找到答案。

我先做结论,大家有兴趣的可以继续深入实验:ASSM的L1中数据块的多少是根据表大小来定的,表越大,L1中数据块越多,越多的话随机插入不同数据块的可能性越大,反之同时插入一个块的可能性就越大,就容易出现BUFFER BUSY WAITS,普通插入数据的时候是在高水位现之下,找空闲数据块插入,高水位线位于L1块最后一个块位置,L1中HASH算法只在高水位线之下找空闲块,所以要高并发,需要提高高水位线,和L1中数据块数。

ORACLE内核解密之表空间管理

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/124311.html

(0)
上一篇 1小时前
下一篇 1小时前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信