Oracle表空间的管理方式
解释说明:表空间是一个逻辑概念:=> oracle 逻辑概念段区块管理方式:
number one =》 tablespace
number two=> segments
Oracle新建一个对象,产生一个对象,这有啥需要管理的吗? 使用了一个延时段管理;
所以一般没人会回答表空间的管理是延迟段管理还是非延迟段管理,而是说区的管理方式,就是分配区的方式;
number three A:如何寻找空闲的区域,给新分配的区,安家落户。
Oracle区的分配的方式分两种: directory, local 字典、本地管理,字典管理基本被弃用; 那么Oracle分配区的方式有没有更细节的呢? 例如分配一个区,区分给他多大?
number three B:衍生出,如何对新生成的区,给它分配多大空间,第一种:默认,auto allocative,系统默认分配;第二种uniform size;
首先解释说明,区的空间大小如何衡量? 区是由连续的块组成,最初是8个块*8192Bytes=64kb ytes/
*** 相当于看人口,举例,家族迁移;发生战乱,从北方逃难,来到美丽的江西九江,九江的官员毕竟负责,来住可以,先统计人口,判断出,有500多号人,按照8个房间,一个房间住2个人的美好场景=32间房间左右,按照16个房间好管理的方式,分配了两个街道(区),每个街道16个房间(块);
如果是自动的呢? 官员不负责任,来了500个人,按照每个街道,分配8个房间;需要62个街道分配,分配12次;
但是官府有一套机制,分配到16个街道之后,官府自动增加分配区的大小,分配第16以后,官府决定大方一点,每个街道(区)分配128间房间,(麻烦,减少工作量)这样最少,也需要分配16个街道*8+ 2-3*128个块的方式分配===》也就是说,最少需要分配18次;
以上说明:仅限于理解,手动统一分配与自动的区别,实际还存在大量误差,概念可以先理解;
number four;以上分配空间都说了空间不够,分区;
如果是已经分配了区,但是Insert 一条数据,它去哪里存储呢?,块在哪里找呢? 段空闲管理方式;
number four A: manual手工,特征,并不是手动,而是相比较B,显得笨拙;
特点: 手工段空闲管理,在段的头部,段是逻辑概念,如何真时记录数据,归属于段的一堆块中,前三个块默认,就是管理单位,建立记录了一个free list的列表,存储什么样的数据? 存储记录空闲空间的块的信息;需要使用块时,去空闲列表,读取空闲块;并发访问会导致添加锁,其它事物等待,这种热快容易产生,buffer busy waits热快现象;访问时串行方式
number four B: auto:默认,我们存储数据,一般是无序的,哪个块有空闲,就往哪个块里面存储数据,正是因为没有顺序,所以访问表的数据,需要全表扫描;
自动段空闲块管理,采用的方式是在段的头部建立bitmap位图的方式记录块是否空闲,支持并发访问;
——————————————————————以上是原理,以下通过视图验证查询---
number one;
Aoracle database 11g 默认采用段延迟管理;
SQL> show parameter seg
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
deferred_segment_creation boolean TRUE
--延迟 段 创建=> ture false;
什么是延迟管理,如果你创建的对象没有具体的数据存储,Oracle将不会给你分配存储区域,存储区域的管理是段,不会分配段给你;
---创建测试表,只创建表结构,没有数据
SQL> create table emp1 as select * from emp where 1=2;
---查询表的存储,段、区、块、大小
SQL> select SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME,bytes/1024/1024 "M",BLOCKS,EXTENTS from user_segments where segment_name='EMP1';
no rows selected
--插入数据测试
SQL> insert into emp1 select * from emp where rownum<2;
--再次查询
SQL> select SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME,bytes/1024/1024 "M",BLOCKS,EXTENTS from user_segments where segment_name='EMP1';
SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME,bytes/1024/1024 "M",BLOCKS,EXTENT
EMP1 TABLE USERS .0625 8 1
---修改参数,取消延迟段分配管理,创建测试表,查询结果如下;
---alter system set deferred_segment_creation=false;
EMP2 TABLE USERS .0625 8 1
-------------------------------------------------------------------------------------------------------
number two
空闲区的管理方式:数据字典管理与本地管理
数据字典管理:1.采取两个基表进行管理,free extent记录在数据字典表中的fet$、已经使用的记录在uet$;
2.当表插入数据,需要存储扩大空间存放数据,都需要访问fet$表,获取信息后;
3.需要对fet$、以及uet$两张表进行dml更改操作;
===》这就造成了,如果数据库中,大量的区扩张时,并发去访问修改以上两张表,消耗资源,等待分配;
本地管理:位图管理:权利下放,从两张表的权限放到每一个数据文件的手上;
1.每个表空间对每个数据文件的头部加入一个位图区,记录每个区的使用情况,当存储区发生改变使用或者删除,会对数据文件头部的位图进行修改;
2.因为如上的方式,回收或者分配,只需要在每个表空间的每个数据文件的数据文件头部进行修改,而且还是修改位图,效率高,并且减少了并发
--如何查询是表空间是位图管理:本地还是数据字典管理呢?
SQL> select TABLESPACE_NAME,CONTENTS,EXTENT_MANAGEMENT,ALLOCATION_TYPE,SEGMENT_SPACE_MANAGEMENT from dba_tablespaces;
TABLESPA CONTENTS EXTENT_MAN ALLOCATIO SEGMEN
-------- --------- ---------- --------- ------
SYSTEM PERMANENT DICTIONARY USER MANUAL
SYSAUX PERMANENT LOCAL SYSTEM AUTO
UNDOTBS1 UNDO LOCAL SYSTEM MANUAL
TEMPTS1 TEMPORARY LOCAL UNIFORM MANUAL
USERS PERMANENT LOCAL SYSTEM MANUAL
TBS_DICT PERMANENT DICTIONARY USER MANUAL
extent_management列:directory代表数据字典,local代表本地位图管理;
directory已经被放弃选择了,此查询是因为手工艰苦,控制文件脚本修改了:删除了.EXTENT MANAGEMENT LOCAL 表空间本地管理,造成的效果类似,extent management directory;
.SQL> create tablespace abc datafile '/picclife/app/oracle/abc.dbf' size 10m extent management local/ directory;
-------------------------------------------------------------
number three:
表空间的管理,区分配多大空间:
首先提取测试环境:scott用户,默认是users表空间,对应的区管理分配的大小:
ALLOCATION_TYPE=》system 方式,代表系统自动管理,next_extent空值,最小64K/8K=8个块;
从第 十七个块,开始,每次分配128个数据块;
SQL> select tablespace_name,initial_extent,next_extent,min_extents ,max_extents from dba_tablespaces;
TABLESPA INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS
-------- -------------- ----------- ----------- -----------
SYSTEM 16384 16384 1 505
SYSAUX 65536 1 2147483645
TBS_DICT 40960 40960 1 505
ABC 65536 1 2147483645
YA 65536 1 2147483645
TBSA 1048576 1048576 1 2147483645
TEMPTS1 1048576 1048576 1
SQL> select 1048576/1024/1024 from dual;
1048576/1024/1024 ----------------- 1M
SQL> select 1048576/8192 from dual; 128个块---
1048576/8192 ------------ 128
------------如上查询,tempts1是创建数据库默认选项next_extent对应的是1M大小,128个数据块,Oracle为每个一个区分配一个固定的128个块为单位的一个区;
SYSTEM=>USER: 代表可以控制next_extent的值:
SYSTEM PERMANENT DICTIONARY USER MANUAL
TBS_DICT PERMANENT DICTIONARY USER MANUAL
--只要区的分配方式是数据字典管理,则区大小的分配就是user模式,代表可以自主分配;
数据字典,区大小分配方式;
SQL> select 40960/8192 from dual;
40960/8192 ---------- 5 五个块
SQL> select 40960/1024/1024 from dual;
40960/1024/1024 --------------- .0390625 ---实际多大,给多大,是否
-----------------------------------------------------------------------------------------------------------
number four :
以上说的都是如何寻找空闲的区,用来分配,给一个区分配多大空间;
如今一个现实的问题摆在你面前,直接问你,我爱你你嫁不嫁我,咋整,直接;
我有一条数据,需要存储,存在哪里?如何寻找:
来走进块的空闲区域管理:
段的空闲块管理:segment free block management;
1.manual
2.auto
块什么是空闲? 块分几部分: 块头,存储区域,空闲区域:一般空闲区域预留10%的区域;
1.manual=> segment header 段的前三个块默认块头部,建立一个free list列表记录空闲的块;
使用空闲列表,获取空闲块,并发访问free list ,其它insert事物处于等待状态,在segment header block会经常出现buffer busy waits热快事件,访问串行,存储满了之后,移除列表;
2.auto =》在segment bitmap标识上可用的空闲块,0空闲1非空闲,支持并发访问;
SQL> select TABLESPACE_NAME,SEGMENT_SPACE_MANAGEMENT from dba_tablespaces;
TABLESPA SEGMEN -------- ------
SYSTEM MANUAL
SYSAUX AUTO
SQL> select tablespace_name,SEGMENT_NAME,SEGMENT_TYPE,FREELISTS,FREELIST_GROUPS from dba_segments where tablespace_name='SYSTEM'
SYSTEM SYS_LOB0000000474C00021$$ LOBSEGMENT 1 1
SQL> select tablespace_name,SEGMENT_NAME,SEGMENT_TYPE,FREELISTS,FREELIST_GROUPS from dba_segments where tablespace_name='SYSAUX'
SYSAUX BSLN_TIMEGROUPS_PK INDEX
------以上为查询:
语言描述:当数据对象插入数据,假设为manual管理方式,pctfree=20,代表,数据块空间存储达到80%,数据块将被移除空闲列表,随着数据的删除,当数据块的使用百分比低于参数:pctused参数的设置时,加入空闲列表;空闲链表中,竞争压力强大;ASSM管理
Auto Segment Space Management:
为了解决上述的问题,通过位图有效快速解决存储扩张和剩余区块free block:改善段的存储管理;
ASSM管理模式下,insert 通过扫描位图查找可用的Block:
参数:pctfree还需要,但是低于此数值,也不会从位图删除,而是记录状态,可用为后续的update更改操作保留行数据增长预留使用;
PCTUSED参数,将被废弃,不需要记录使用百分比;
FREELIST FREELIST GROUPS将无效;
新的管理方式使用位图的机制对块进行追踪,没个块的大小,状态使用了:>75%,50%-75%,25%-50%,<25%,四个状态代替以前的pctused;
ASSM管理最大优势,位图减轻缓冲区等待,Buffer busy wait热快的产生;
---更详细内容看大神-如下网址链接
http://book.51cto.com/art/201108/288125.htm
Oracle表空间的管理方式的更多相关文章
- oracle表空间的管理
1.创建表空间 CREATE TABLESPACE TBS_TR_DATA DATAFILE '/oradata/rTBS_TR_DATA_001.dbf' SIZE 64G EXTENT MANAG ...
- Oracle表空间满处理方式
一.查询表空间常规语句 1.查询表空间使用情况 SELECT Upper(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB ...
- ORACLE表空间管理维护
1:表空间概念 在ORACLE数据库中,所有数据从逻辑结构上看都是存放在表空间当中,当然表空间下还有段.区.块等逻辑结构.从物理结构上看是放在数据文件中.一个表空间可由多个数据文件组成. 如下图所示, ...
- oracle 表空间管理
1.创建表空间 03:01:55 sys@ORADB11G> create tablespace TSPITR datafile '/u01/app/oracle/oradata/TSPITR0 ...
- oracle表空间创建及管理
一.数据文件和数据库逻辑存储结构: 一个表空间包含一个或多个数据文件,一个表空间包含一个或多个段,一个段包含一个或多个区,一个区包含一个或多个连续的数据库块,一个数据库块包含一个或多个操作系统块.段是 ...
- 【转】Oracle 表空间与数据文件
--============================== --Oracle 表空间与数据文件 --============================== /* 一.概念 表空间:是一个或 ...
- 【基础】Oracle 表空间和数据文件
多个表空间的优势:1.能够将数据字典与用户数据分离出来,避免由于字典对象和用户对象保存在同一个数据文件中而产生的I/O冲突2.能够将回退数据与用户数据分离出来,避免由于硬盘损坏而导致永久性的数据丢失3 ...
- ORACLE表空间
在ORACLE数据库中,所有数据从逻辑结构上看都是存放在表空间当中,当然表空间下还有段.区.块等逻辑结构.从物理结构上看是放在数据文件中.一个表空间可由多个数据文件组成. 如下图所示,一个数据库由对应 ...
- Oracle 表空间与数据文件
-============================== --Oracle 表空间与数据文件 --============================== /* 一.概念 表空间:是一个或多 ...
随机推荐
- Gitlab - Pull Request
1.概述 今天查看Gmail,有网友私密我Gitlab的Pull Request工作流程,一直以为我写过这片博客,查看<Git和Gitlab协同工作>却发现遗漏了Pull Request这 ...
- 【Python】 文件和操作文件方法
文件 ■ 基本的文件用法 f = open("path","mode") mode有a,w,r,b,+等.默认为r.模式与打开文件时的动作有关系,比如用w打开的 ...
- Sagit.Framework For IOS 开发框架入门教程5:消息弹窗STMsgBox
前言: 昨天刚写了一篇IT连创业的文章:IT连创业系列:产品设计之答题模块,(欢迎大伙关注!) 感觉好久没写IOS的文章了,今天趁机,来补一篇,Sagit的教程. Sagit 开源地址:https:/ ...
- c++ --> static关键字总结
static关键字总结 C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. ...
- QuietHit小Game
根据项目的要求分别建出几个类 有游戏类 玩家类 测试类 等级类 等级时间类 一以下类图: 游戏类: public class Game { private Player player; public ...
- 【Java实现】栈和队列就是这么简单
一.前言 上一篇已经讲过了链表[Java实现单向链表]了,它跟数组都是线性结构的基础,本文主要讲解线性结构的应用:栈和队列 如果写错的地方希望大家能够多多体谅并指正哦,如果有更好的理解的方式也希望能够 ...
- 网络工具nslookup的使用
根据域名查询ip 如下所示: bogon:~ hhh$ nslookup www.baidu.com. Server: 192.168.1.254. #默认的DNS服务器 Address: . #ip ...
- C语言--第二周作业
****学习内容总结**** 1.Git和编辑器截图 2.MOOC截图 3.阅读<提问的智慧>感想 读完<提问的智慧>之后,我认为在提问时,要根据以下步骤: 谨慎明确的描述症状 ...
- LR录制脚本的时候打不开浏览器问题
使用Chrome时,显示开始录制但是Action中无任何脚本,即脚本没成功生成. 使用Firefox(最新版),一直关闭程序,详细信息有StackHash_0a9e. 使用IE11时,也是显示开始录制 ...
- nyoj 非洲小孩
非洲小孩 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 家住非洲的小孩,都很黑.为什么呢?第一,他们地处热带,太阳辐射严重.第二,他们不经常洗澡.(常年缺水,怎么洗 ...