Oracle存储结构-段区块
段
一个段建立以后首先会分配一个区,区中包括含8个块,这时执行insert插入数据,当这个区写满后,会在分配一个区
1.一个段建立以后,Oracle如何给段分配区?
2.段分配到区以后,有了空闲空间,应该如何进行使用和管理呢?
段与区的管理方式
区
1.区的管理方式
数据字典
本地--------自动
手动CREATE SMALLFILE TABLESPACE "DATA1" DATAFILE '/ora/oracle/oradata/orcl/data1_01.dbf' SIZE 100M REUSE AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO
区管理---- 本地
2.段管理方式
手工管理方式
自动管理方式
段管理---- 自动
分析表:
SQL> analyze table T2 compute statistics;
SQL> select segment_name,blocks,extents,bytes,segment_type,tablespace_name from dba_segments where segment_name='T2';
对表进行统计分析1
SQL> exec dbms_stats.gather_table_stats('SYS','T2');
SQL> select table_name,NUM_ROWS,BLOCKS,EMPTY_BLOCKS,AVG_SPACE,CHAIN_CNT,AVG_ROW_LEN FROM user_tables where table_name='T2';
索引列的统计信息的SQL语句
SQL>select BLEVEL ,LEAF_BLOCKS,DISTINCT_KEYS,AVG_LEAF_BLOCKS_PER_KEY,AVG_DATA_BLOCKS_PER_KEY,CLUSTERING_FACTOR from USER_INDEXES
列的统计信息
SQL> select NUM_DISTINCT,LOW_VALUE,HIGH_VALUE,DENSITY,NUM_NULLS,NUM_BUCKETS,HISTOGRAM from USER_TAB_COLUMNS;
区管理:本地 段管理:自动
查看表dba_extents的结构
SQL> select * from dba_extents where segment_name='T2';
区的自动管理:当连续的分配了很多区后,Oracle会认为目前处理的数据较大,一次性的分配大的区。
高水位线:一段建立了,分配一个区,区有很多块,在有数据表时,段会使用区中的块,高水位线指的是段使用的最后一个块
高水位线的意义:是Oracle数据库对表进行扫描时,代表最后一个位置
问题:在将数据删除后,高水位线还是在原来的位置,并没有随着数据的删除而下降
例子:假如一共有10万个块,高水位线在1000,删除1000块中保存的数据,高水位线还是在1000的位置。
高水位线影响得是全表扫描(对高水位线以下的)
例子:
先对表进行分析,在查询表相关信息
将表中数据删除后,在进行分析以及查看
降低高水位线
SQL> truncate table T2;
块
块头部信息 8K 块:物理地址
块属于哪个空间
事务槽 ZTL
行目录
块是从底下开始用的
块头是从上面开始用的
中间是空闲空间
行与行之间是串起来用的(所有行是连在一起的)
第一行头部连接第二行尾部,整体看起来貌似是一行,其实是多行
假如需要查找块中3行4列的数据,这是就需要用到块头部的行目录了
首先在行目录中找到第三行的起点,起点后面跟的是第一列的列宽,跳过列宽,就可以找到第四列。
数据库默认大小8k show parameter block;
行链接与行迁移
正常情况下:一个块里放多行,不允许行跨块
PCT_free空间是为了在进行update,增加空间的时候,不至于使块溢出
行链接:一个行10k,一个块8k,块是存不下这一 行,所以一个块存8k另一个块存2k,第一个块儿上写上第二个块的地址,行链接。
行迁移:由于PCT_free空间过小,update在更新的时候,空间不够用,将整个刚迁移出来,在迁移的位置上写上迁移的地址
如果行迁移过多的话,就会导致分为一个数据块实际上访问了两个数据块
如何判断行链接与行迁移?
行的平均长度>块长度---- 块大小的问题
行的平均长度<块长度&&CHAIN_CNT过大---行迁移的问题
这需要对表进行重新的整理,将表导出再导入。
SELECT table_name,NUM_ROWS,BLOCKS, EMPTY_BLOCKS,AVG_SPACE,CHAIN_CNT, AVG_ROW_LEN
FROM USER_TABLES where table_name='TEST2';
从结果看目前
CHAIN_CNT 的值是 0
就是行迁移行链接数量值是0
说明在这方面做得比较好
Oracle存储结构-段区块的更多相关文章
- Oracle存储结构-表空间
表空间 oracle文件注意的问题 控制文件,redolog文件,数据文件----一定要放在存储上 问题:银行用户,集群切换失败,原因是数据库中部分的文件未放到存储上 存储三种组织形式:文件系统.AS ...
- Oracle 存储结构一
了解块中表行数据的存储 Oracle数据存储模型 逻辑结构在左,物理结构在右 有一个关系使用虚线绘制,表示段与数据文件的多对多关系.之所以使用虚线表示关系,是因为这种多对多关系不应存在. 表空间实体消 ...
- Oracle 存储结构
数据库是存储数据的容器,它的主要功能是保存和共享数据. oracle数据库的存储结构可以分为逻辑存储结构和物理存储结构,对于这两种存储结构,oracle是分别进行管理的. 逻辑存储结构:oracle内 ...
- oracle存储结构
数据库的物理存储结构 select * from v$datafile; 数据库的逻辑存储结构,从表空间开始查起一个数据库对象的逻辑存储结构如下表空间-段-区-块 select * from dba_ ...
- Oracle 存储结构三
Oracle数据库服务器自动管理空间的方法 段空间的分配 空间以区间的形式分配给段,区间是一组连续的Oracle块.每个数据文件都有一个位图,来描述文件中块的状态,块可能是空闲的,也可能是区间中已分配 ...
- 【oracle11g,17】存储结构: 段的类型,数据块(行连接、行迁移,块头),段的管理方式,高水位线
一.段的类型: 1.什么是段:段是存储单元. 1.段的类型有: 表 分区表 簇表 索引 索引组织表(IOT表) 分区索引 暂时段 undo段 lob段(blob ,clob) 内嵌表(record类型 ...
- Oracle 存储结构二
创建和管理表空间 创建表空间 典型语句: CREATE SMALLFILE TABLESPACE "JWTS" DATAFILE '/u01/app/oracle/oradata/ ...
- Oracle 逻辑存储结构
一.总述 逻辑存储结构是 Oracle 数据库存储结构的核心内容,对 Oracle 数据库的所有操作都会涉及逻辑存储结构.逻辑存储结构是从逻辑的角度分析数据库的组成,是对数据存储结构在逻辑概念上的划分 ...
- 学习笔记:oracle学习一:oracle11g体系结构之体系结构概述和逻辑存储结构
目录 1.oracle 11g体系结构概述 1.1 三个重要概念 1.2 oracle数据库存储结构 2 逻辑存储结构 2.1 数据块(Data Blocks) 2.2 数据区(Extent) 2.3 ...
随机推荐
- SQL的DDL和DML
DDL:数据定义语言,定义库.表结构用的DML:数据操作语言,增.删.改.查DCL:数据控制语言,权限.事务等控制语句 (一)DDL1.操作数据库的语句(1)查看当前DBMS中的所有数据库show d ...
- Elasticsearch-日期类型
Elasticsearch-日期类型 date类型用于存储日期和时间.它是这样运作的:通常提供一个表示日期的字符串,例如2019-06-25T22:47.然后,ES解析这个字符串,然后将其作为long ...
- java 实现读取某个目录下指定类型的文件
我这里是读取txt类型的文件,在指定的目录下有不同类型的文件 实现代码,读取txt类型的文件并打印出该文件的绝对路径 package com.SBgong.test; import java.io.F ...
- [转帖]全方位掌握OpenStack技术知识
全方位掌握OpenStack技术知识 http://www.itpub.net/2019/06/17/2206/ 架构师技术联盟的文章 相当好呢. 大家好,我是小枣君.最近几年,OpenStack这个 ...
- [转帖]AMD霄龙安全加密虚拟化曝漏洞:已修复
AMD霄龙安全加密虚拟化曝漏洞:已修复 https://www.cnbeta.com/articles/tech/862611.htm 硬件的安全问题 今年初,Google的一位研究人员发现,AMD ...
- C++多线程基础学习笔记(八)
shared_futrue和futrue_status的用法 shared_futrue是一个类模板,类似于futrue,不同的是它的成员函数get()可以使用多次,因为是复制数据,而futrue的g ...
- Django中ajax发送post请求,报403错误CSRF验证失败解决办法
今天学习Django框架,用ajax向后台发送post请求,直接报了403错误,说CSRF验证失败:先前用模板的话都是在里面加一个 {% csrf_token %} 就直接搞定了CSRF的问题了:很显 ...
- 02:linux常用命令
1.1 linux查看系统基本参数常用命令 1.查看磁盘 [root@linux-node1 ~]# df -hl Filesystem Size Used Avail Use% Mounted on ...
- 一步一步带你入门MySQL中的索引和锁 (转)
出处: 一步一步带你入门MySQL中的索引和锁 索引 索引常见的几种类型 索引常见的类型有哈希索引,有序数组索引,二叉树索引,跳表等等.本文主要探讨 MySQL 的默认存储引擎 InnoDB 的索引结 ...
- Codeforces 1194D. 1-2-K Game
传送门 先考虑只能走 $1,2$ 步的情况,设 $p[i]$ 表示当 $n=i$ 时先手是否必胜 自己手玩一下发现 $p$ 就是 $011011011...011$ 这样循环(下标从 $0$ 开始,其 ...