Oracle 如何提高空间使用率?

这篇具有很好参考价值的文章主要介绍了Oracle 如何提高空间使用率?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一,行迁移和行链接。

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

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

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

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

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

Oracle 如何提高空间使用率?,oracle,数据库

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

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

简称ASSM

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

Oracle 如何提高空间使用率?,oracle,数据库

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

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

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

Oracle 如何提高空间使用率?,oracle,数据库

三,oracle表空间分配类型

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

Oracle 如何提高空间使用率?,oracle,数据库

示例:

自动分配:

Oracle 如何提高空间使用率?,oracle,数据库

固定分配:

Oracle 如何提高空间使用率?,oracle,数据库

四,使用 unusable索引

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

五,使用临时表

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

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

临时表有两种类型:

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

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

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

创建全局临时表:

Oracle 如何提高空间使用率?,oracle,数据库

Oracle 如何提高空间使用率?,oracle,数据库

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

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

创建私有临时表:

Oracle 如何提高空间使用率?,oracle,数据库

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

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

Oracle 如何提高空间使用率?,oracle,数据库

六,表压缩

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

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

压缩原理:

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

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

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

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

Oracle 如何提高空间使用率?,oracle,数据库

basic压缩:

Oracle 如何提高空间使用率?,oracle,数据库

空间大小比较:

Oracle 如何提高空间使用率?,oracle,数据库

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

高级行压缩:

不压缩,插入数据十次:

Oracle 如何提高空间使用率?,oracle,数据库

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

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

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

Oracle 如何提高空间使用率?,oracle,数据库

所占空间对比:

Oracle 如何提高空间使用率?,oracle,数据库

Oracle 如何提高空间使用率?,oracle,数据库

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

表压缩缺陷:

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

Oracle 如何提高空间使用率?,oracle,数据库

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

七,通过 shringking 操作回收空间

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

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

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

Oracle 如何提高空间使用率?,oracle,数据库

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

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

Oracle 如何提高空间使用率?,oracle,数据库

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

Oracle 如何提高空间使用率?,oracle,数据库

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

Oracle 如何提高空间使用率?,oracle,数据库

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

Oracle 如何提高空间使用率?,oracle,数据库

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

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

Oracle 如何提高空间使用率?,oracle,数据库

此时,查看数据字典。

Oracle 如何提高空间使用率?,oracle,数据库

八,可恢复空间分配。

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

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

resumable_timeout = 300;

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

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

Oracle 如何提高空间使用率?,oracle,数据库文章来源地址https://www.toymoban.com/news/detail-833507.html

到了这里,关于Oracle 如何提高空间使用率?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Linux-提高CPU、内存使用率shell脚本

    目录 1、提升CPU利用率 (1)构造CPU达到100% (2) 结束命令 2、提高内存利用率 可以申请的内存 申请内存空间: 完成后释放内存: 3、 使用ChaosBlade工具 cpu注入: 内存注入: (1)构造CPU达到100% for i in `seq 1 $(cat /proc/cpuinfo |grep \\\"physical id\\\" |wc -l)`; do dd if=/dev/zero of=/dev/null done (

    2024年02月04日
    浏览(13)
  • Linux提高CPU及内存使用率的脚本

    测试或运维中,有时会特意提高CPU及内存使用率,观察运行情况,以下脚本供参考。 链接1: Linux tmpfs及消耗内存脚本 链接2: Linux 中的 /dev/null 和 /dev/zero 链接3: Linux 提高CPU占用率的脚本

    2024年02月13日
    浏览(20)
  • Golang 简单的数据对齐可提高程序速度和内存使用率

    Golang 中的结构或 struct 是用户定义的类型,允许将可能不同类型的项分组/组合为单一类型。 可以说是一个不支持继承但支持组合的轻量级类。 我们使用 Golang 编写代码的时候,你肯定使用过 struct 。 但是,你可能不知道的是,通过简单地重新排序结构中的字段,可以极大地

    2024年02月11日
    浏览(9)
  • 大数据之LibrA数据库系统告警处理(ALM-12016 CPU使用率超过阈值)

    大数据之LibrA数据库系统告警处理(ALM-12016 CPU使用率超过阈值)

    告警解释 系统每30秒周期性检测CPU使用率,并把实际CPU使用率和阈值相比较。CPU使用率默认提供一个阈值范围。当检测到CPU使用率连续多次(可配置,默认值为10)超出阈值范围时产生该告警。 平滑次数为1,CPU使用率小于或等于阈值时,告警恢复;平滑次数大于1,CPU使用率

    2024年02月06日
    浏览(8)
  • 云原生之深入解析如何正确计算Kubernetes容器CPU使用率

    使用 Prometheus 配置 kubernetes 环境中 Container 的 CPU 使用率时,会经常遇到 CPU 使用超出 100%,现在来分析一下: container_spec_cpu_period:当对容器进行 CPU 限制时,CFS 调度的时间窗口,又称容器 CPU 的时钟周期通常是 100000 微秒 container_spec_cpu_quota:是指容器的使用 CPU 时间周期总量

    2024年02月10日
    浏览(21)
  • 服务器的cpu如何通过脚本让其使用率变高

    服务器的cpu如何通过脚本让其使用率变高

          最近遇到公司项目上线,在进行红蓝线查验时,由于部分服务器的配置高,但是使用率低,所以需要降配。为了避免降配,如何提高内存和cpu使用率呢?      可以通过脚本来实现。当前的服务器操作系统版本:redhat-7_5。      通过xshell连接服务器后,登录账户。  

    2024年02月04日
    浏览(24)
  • 查询数据库空间(mysql和oracle)

    1.查看数据库表空间文件: 2.查看所有表空间的总容量: 3.查看数据库表空间使用率 4.1.查看表空间总大小、使用率、剩余空间 4.2.查看表空间使用率(包含temp临时表空间) 5.查看具体表的占用空间大小 1.更改表空间的dbf数据文件分配空间大小 2. 为表空间新增一个数据文件(表空间

    2024年02月05日
    浏览(17)
  • python-在系统托盘显示CPU使用率和内存使用率

    python-在系统托盘显示CPU使用率和内存使用率

    一、添加轮子 1.添加托盘区图标库  infi.systray 2.添加图像处理库  Pillow 3.添加  psutil  来获取CPU、内存信息 二、完整代码 三、实际效果展示

    2024年02月05日
    浏览(12)
  • io使用率高运行堵塞怎么解决?linux系统由io使用率高引起的运行堵塞的解决方法

    io使用率高运行堵塞怎么解决?linux系统由io使用率高引起的运行堵塞的解决方法

    1.在宝塔查看服务器负载100%,而cpu和内存使用率都正常 输入top命令查看平均负载:

    2024年02月15日
    浏览(8)
  • Delphi的使用率和前景

    Delphi是一种基于Pascal语言的高级编程语言,由美国Borland公司(后来改名为CodeGear,现在归属于Embarcadero公司)开发。自1995年问世以来,Delphi已经经历了20多年的发展历程,成为了Windows平台上广泛应用的开发工具之一。本文将从Delphi的历史、特点、优缺点和应用实例等方面,探

    2024年02月13日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包