Oracle 如何提高空间使用率?

一,行迁移和行链接。

oracle尽量保证一行的数据能够放在同一个数据块当中,有的时候行会发生行迁移和行链接。

行链接 :有一个列的字段是大对象(long,longlong)一行占的数据一整个块都放不下,则oracle会把这行的数据分为两部分或多部份,存放到不同的数据块,这种现象叫做行链接。

行链接的缺陷显而易见,原本我只需要找到一个块就能找到所有数据,现在可能读更多的块才能够找到数据,增加了io。

行迁移:原本的行在一个数据块中,如果我们在这一行进行了update操作,使得这一行的尺寸变大了

oracle在默认情况下,如果这一行发生了增长,所需的多余空间会从这个块的可用空间里面去获取,这是最好的情况。但是如果这个块可用的空间用满了,则会发生行迁移。oracle会把这一行的数据迁移到一个新的数据块,但是在原来的块中会保留它的row id。

缺陷也是如此,原来只需要一次io,现在需要两次io,降低了性能。

二,自动段空间管理(Auto Segment Space Management)

简称ASSM

段是oracle管理空间的一种机制

如果表空间是自动管理的,则会用到位图管理机制。

BMB(bitmap blocks) 在一个段中会有很多个位图块,在位图中记录了对应块的信息,如(剩余空间,可用空间,这个机制使得管理更加灵活)

总结一下就是:我们给段分配很多数据块,oracle会拿出一些数据块来记录这些数据块的使用情况,这些数据块叫做:BMB(位图块)。

三,oracle表空间分配类型

主要分为两种方式:1.uniform(固定分配)。2.autoallocate(自动分配)

示例:

自动分配:

固定分配:

四,使用 unusable索引

如果把一个索引变成unusable,oracle会把这个索引段删掉,但是保留索引的定义,节省了空间,以后需要时可以用rebuild重建索引。

五,使用临时表

临时表只有在事务和会话过程中存在数据。

如果我们以后为了测试。表中的数据有没有无所谓,我们可以基于有数据的表建一个临时表,我们在临时表上面进行测试,退出会话时oracle会把这个临时表删掉。

临时表有两种类型:

Global:建的临时表的定义所有的会话都可见,内容只有创建临时表的会话看得见,其它会话不可见

Private:只有创建临时表的会话可见,其它会话不可见。

临时表的段只有在进行第一次insert操作时才会分配,

创建全局临时表:

插入数据后当前会话可见,其它会话不可见。

on commit delete 关键字:当事务提交,临时表数据全部删除。

创建私有临时表:

注意:私有临时表 ,表名必须以  ORA$PTT_开头。

私有表前缀由private_temp_table_prefix 指定,可以自己指定

六,表压缩

1.Basic table compression(基础压缩) 压缩率:10倍

2.Advanced row compression(高级行压缩) 压缩率:2-4倍

压缩原理:

Basic table compression 当可用空间 是0 时触发压缩。

Advanced row compression 当可用空间 剩余10% 触发压缩

例如:数据块可用空间只剩下百分十10,触发压缩,把原来块的数据进行压缩,腾出来一部分空间来存放新的数据,再进行insert操作后,可用空间又只剩下百分十10,再一次进行压缩。

总结:oracle的压缩原理是逐步压缩。

basic压缩:

空间大小比较:

注意如果使用 basic压缩方式   使用insert方式进行插入则不会进行压缩。

高级行压缩:

不压缩,插入数据十次:

 insert into EMP_NOCMP select * from emp_nocmp; (重复 10 次)

高级行压缩,插入数据十次:

insert into EMP_CMP select * from emp_cmp; (重复 10 次)

所占空间对比:

比较清晰,高级行压缩所占空间明显减少。

表压缩缺陷:

打开计时器,对表进行update操作,比对压缩表和非压缩表效率:

可见非压缩表 update性能明显高于压缩表。

七,通过 shringking 操作回收空间

只能对段空间管理方式为ASSM方式的表空间使用。

如果块中发生大量的delete操作,导致块中的行不紧凑,浪费了大量块空间,我们可以通过shringking 操作回收空间,降低高水位线,从而高水位线以上的块就会被回收。

示例:创建一个表,表空间段空间管理为自动管理,即ASSM,插入十五次数据。

insert into emp_shr select * from emp_shr;(执行15次)

查看数据字典,该表占用空间情况:

进行删除操作,导致出现空闲空间。

让表允许移动行,否则无法使用shrink:

对表进行shrink整理,查看数据字典。

发现此时空间并没有被释放,原因是我们的高水位线并没有变低,只是把行变的紧凑了,没有块被oracle自动回收。

改变高水位线,让高水位线以上的空闲块被oracle回收。

此时,查看数据字典。

八,可恢复空间分配。

Oracle 数据库服务器提供了一种暂停和稍后恢复执行的方法空间分配失败时的大型数据库 操作。

简而言之:假如我们的表空间大小不够了,正常来说会直接报错,假如我们执行了两个小时的inert操作,到最后因为表空间大小不足而导致操作失败就很崩溃,所以oracle允许我们有补救措施。

resumable_timeout = 300;

假如我们的操作因为表空间大小不足,设置这个参数后不会立即报错,而是会把这个事务挂起,在300s中,如果我们有补救措施,如resize表空间,增加了数据文件,使得表空间足够进行接下来的操作,该操作将继续进行。

如果300s之内没有补救,才会报错,该操作失败。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/260683.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

07 Redis之持久化(RDB+AOF)

4 Redis持久化 Redis 是一个内存数据库,然而内存中的数据是不持久的,若主机宕机或 Redis 关机重启,则内存中的数据全部丢失。 当然,这是不允许的。Redis 具有持久化功能,其会按照设置以快照或操作日志的形式将数据持…

Leetcode刷题笔记题解(C++):83. 删除排序链表中的重复元素

思路:链表相关的问题建议就是画图去解决,虽然理解起来很容易,但就是写代码写不出来有时候,依次去遍历第二节点如果与前一个节点相等则跳过,不相等则遍历第三个节点 /*** Definition for singly-linked list.* struct …

uniapp不同平台获取文件内容以及base64编码特征

前言 文件图片上传,客户端预览是很正常的需求,获取文件的md5特征码也是很正常的,那么,在uniapp中三种环境,h5, 小程序以及 app环境下,如何实现的? 参考: 如何在uniapp中读取文件Arr…

Https证书续签-acme.sh-腾讯云之DnsPod

ename 域名切换到 DnsPod 上面解析 可以先看下之前的 acme.sh 介绍文章然后再来次补充更多。 之前说过了 acme.sh 在阿里云下的使用。 这里做个后续补充 之前的域名是在 ename 上的 ,为了自动续签切换到 DnsPod 上面解析 注意事项 可以把原来 ename 上的解析先导出…

多端开发围炉夜话

文章目录 一、多端开发 一、多端开发 uni-app 官网 UNI-APP中的UI框架:介绍常用的UI框架及其特点 uView UIVant WeappColor UIMint UI

python 与 neo4j 交互(py2neo 使用)

参考自:neo4j的python.py2neo操作入门 官方文档:The Py2neo Handbook — py2neo 2021.1 安装:pip install py2neo -i https://pypi.tuna.tsinghua.edu.cn/simple 1 节点 / 关系 / 属性 / 路径 节点(Node)和关系(relationship)是构成图的基础…

Android 7.0以上charles无法抓取部分https包问题

首先保证配置一切正确 手机通过访问chls.pro/ssl下载.pem证书,如无法安装,在文件管理器中将后缀名改为.crt 在设置中安装该证书 Charles-Proxy - SSL Proxying Setting - Include 添加需要抓包的URL:443即可 以上基本配置结束后,看下代码 代…

Java+SpringBoot:滑雪场管理的技术革新

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

Linux挂载磁盘和磁盘分区及设置开机自动挂载_亲测成功

Linux挂载磁盘和磁盘分区及设置开机自动挂载_亲测成功 Linux下磁盘分区命令主要由两个: fdisk :最大支持不超过2T,MBR分区;parted :支持GPT,适用于大容量分区; 如果挂载磁盘超过2T,请使用GPT分区,不然会…

探索水下低光照图像检测性能,基于DETR(DEtection TRansformer)模型开发构建海底生物检测识别分析系统

海底这类特殊数据场景下的检测模型开发相对来说比较少,在前面的博文中也有一些涉及,感兴趣的话可以自行移步阅读即可: 《尝试探索水下目标检测,基于yolov5轻量级系列模型n/s/m开发构建海底生物检测系统》 《基于YOLOv5C3CBAMCBA…

搜维尔科技:OptiTrack探索人类与技术之间关系的开创性表演

另一种蓝色通过 OptiTrack 释放创造力 总部位于荷兰的当代舞蹈团因其探索人类与技术之间关系的开创性表演而受到广泛赞誉。该公司由富有远见的编舞家大卫米登多普创立,不仅利用技术作为探索的主题,而且将其作为表达故事的动态工具。 “我一直对文化与…

超平面介绍

超平面公式 (1) 超平面是指n维线性空间中维度为n-1的子空间。它可以把线性空间分割成不相交的两部分。比如二维空间中,一条直线是一维的,它把平面分成了两部分;三维空间中,一个平面是二维的,它把空间分成了两部分。(2…

五种多目标优化算法(MOAHA、MOGWO、NSWOA、MOPSO、NSGA2)性能对比,包含6种评价指标,9个测试函数(提供MATLAB代码)

一、5种多目标优化算法简介 1.1MOAHA 1.2MOGWO 1.3NSWOA 1.4MOPSO 1.5NSGA2 二、5种多目标优化算法性能对比 为了测试5种算法的性能将其求解9个多目标测试函数(zdt1、zdt2 、zdt3、 zdt4、 zdt6 、Schaffer、 Kursawe 、Viennet2、 Viennet3)&#xff…

iOS整理 - 关于直播 - 搭建服务端

前言 其实本人一直都想自己简单做一套直播(包括移动端和服务端)的开发测试,但是之前一直做得比较迷茫。最近偶然间在来了灵感,瞬间解除了我很多疑惑。我会分享出来,希望大家一起研究下。稍后,我完整做好了…

python在flask中的请求数据“无限流”

文章目录 一、问题描述二、解决方案 一、问题描述 在flask请求中,有个需求是让调用方一直调接口,并立马返回,而接口方缓存请求,依次执行。 二、解决方案 from flask import Flask, request, jsonify from queue import Queue i…

使用C# Net6连接国产达梦数据库记录

达梦官网:http://www.dameng.com/ 1 下载达梦并进行安装 下载地址:官网首页——服务与合作——下载中心(https://www.dameng.com/list_103.html) 根据需要自行下载需要的版本,测试版本为:x86 win64 DM8版…

【C#】List泛型数据集如何循环移动,最后一位移动到第一位,以此类推

欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。…

【Vue3】使用ref与reactive创建响应式对象

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

Java面试题:volatile专题

王有志,一个分享硬核Java技术的互金摸鱼侠 加入Java人的提桶跑路群:共同富裕的Java人 今天是《面霸的自我修养》第4篇文章,我们一起来看看面试中会问到哪些关于volatile的问题吧。数据来源: 大部分来自于各机构(Java之父,Java继父,某灵,某泡,某客)以及各博主整理文档…

攻防世界-web-Training-WWW-Robots

题目信息 In this little training challenge, you are going to learn about the Robots_exclusion_standard. The robots.txt file is used by web crawlers to check if they are allowed to crawl and index your website or only parts of it. Sometimes these files rev…