返回顶部
首页 > 资讯 > 数据库 >Oracle 数据库整理表碎片
  • 907
分享到

Oracle 数据库整理表碎片

2024-04-02 19:04:59 907人浏览 泡泡鱼
摘要

表碎片的来源当针对一个表的删除操作很多时,表会产生大量碎片。删除操作释放的空间不会被插入操作立即重用,甚至永远也不会被重用。怎样确定是否有表碎片-- 收集表统计信息sql> exec dbms_sta

表碎片的来源

当针对一个表的删除操作很多时,表会产生大量碎片。删除操作释放的空间不会被插入操作立即重用,甚至永远也不会被重用。

怎样确定是否有表碎片

-- 收集表统计信息

sql> exec dbms_stats.gather_table_stats(ownname=>'SCHEMA_NAME',tabname=> 'TABLE_NAME');

[@more@]

-- 确定碎片程度

SQL> 或者使用如下GISt中的脚本找出某个 Schema 中表碎片超过25%的表。使用此脚本前,先确定 Schema 中表统计信息收集完整。

SELECT table_name,

ROUND((blocks * 8), 2) "高水位空间 k",

ROUND((num_rows * avg_row_len / 1024), 2) "真实使用空间 k",

ROUND((blocks * 10 / 100) * 8, 2) "预留空间(pctfree) k",

ROUND((blocks * 8 - (num_rows * avg_row_len / 1024) -

blocks * 8 * 10 / 100),

2) "浪费空间 k"

FROM dba_tables

WHERE table_name = 'BP_RESERVE_ORDERLIST';

-- 查看表上次收集统计信息时间

select table_name,last_analyzed from dba_tables where owner = 'SCHEMA_NAME'

-- 收集整个 Schema 中对象的统计信息

SQL> exec dbms_stats.gather_schema_stats(ownname=>'SCHEMA_NAME');

为什么要整理表碎片

oracle 对数据段的管理有一个高水位(HWM, High Water Mark)的概念。高水位是数据段中使用过和未使用过的数据块的分界线。高水位以下的数据块是曾使用过的,以上的是从未被使用或初始化过的。

当 Oracle 进行全表扫描(FTS, Full table scan)的操作时,它会读高水位下的所有数据块。如果高水位下还有很多空闲空间(碎片),读取这些空闲数据块会降低操作的性能。

行链接和行迁移

  • 行链接 Row Chaining:当插入数据量大的行的,如果一个Block不能存放一条记录,该记录的一部分会存储到同个Extent中的其他Block,这些block形成一个数据块链。
  • 行迁移 Row Migration:当Update的时候导致记录长度增加了,存储的Block已经满了,就会发生行迁移。Oracle会迁移整行数据到一个能够存储下整行数据的Block中,迁移的原始指针指向新的存放行数据的Block,ROWID不变。

当数据行发生链接(chain)或迁移(migrate)时,对其访问将会造成 I/O 性能降低,因为Oracle为获取这些数据行的数据,必须访问更多的数据块(data block)。

表碎片导致的问题

  • 查询响应时间(尤其是全表扫描)变慢
  • 产生大量行迁移
  • 浪费空间

整理表碎片对基于索引的查询不会有太大性能提升。

如何整理表碎片

10g之前

两种方法:

  • 导出表,删除表,再导入表
  • alter table move

一般选择第二种,需要重建索引。

10g后

从 10g 开始,提供一个 shrink 命令,需要表空间是基于自动段管理的。

可以分成两步操作:

-- 整理表,不影响DML操作

SQL> alter table TABLE_NAME shrink space compact;

-- 重置高水位,此时不能有DML操作

SQL> alter table TABLE_NAME shrink space;

也可以一步到位:

-- 整理表,并重置高水位

SQL> alter table TABLE_NAME shrink space;

shrink 的优势:

  • 不需要重建索引。
  • 可以在线操作。
不需要空闲空间,alter move需要跟当前表一样大小的空闲空间。
您可能感兴趣的文档:

--结束END--

本文标题: Oracle 数据库整理表碎片

本文链接: https://lsjlt.com/news/46352.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Oracle 数据库整理表碎片
    表碎片的来源当针对一个表的删除操作很多时,表会产生大量碎片。删除操作释放的空间不会被插入操作立即重用,甚至永远也不会被重用。怎样确定是否有表碎片-- 收集表统计信息SQL> exec dbms_sta...
    99+
    2024-04-02
  • 整理数据表碎片
    删除数据,发现数据文件没有缩小 此时需要整理这个表,空间 就会回收 #myisam 引擎使用如下语句 OPTIMIZE TABLE   tmp_corp_product #innodb清理碎片...
    99+
    2024-04-02
  • oracle 表碎片整理
    又是一年双11,双十一对从事电商的it人员来说是一场噩梦,这个只是前奏,下面说重点:表碎片整理,首先收集那些表需要做碎片整理:1.1根据统计信息检查表碎片: SELECT table_name,RO...
    99+
    2024-04-02
  • oracle表碎片的整理分析
    本篇文章给大家分享的是有关oracle表碎片的整理分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 数据库在日常...
    99+
    2024-04-02
  • mysql 表碎片整理
    查看数据库中表、索引和碎片大小的大小:select round(sum(data_length/1024/1024),2) as data_length_MB,  round(sum(i...
    99+
    2024-04-02
  • MYSQL优化之数据表碎片整理详解
    目录在MySQL中,我们经常会使用VARCHAR、TEXT、BLOB等可变长度的文本数据类型。不过,当我们使用这些数据类型之后,我们就不得不做一些额外的工作—&mdash...
    99+
    2024-04-02
  • oracle表碎片以及整理是怎样的
    oracle表碎片以及整理是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  确...
    99+
    2024-04-02
  • MySQL数据碎片的整理和分析
    MySQL数据碎片的整理和分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 MySQL具有相当多不同种类的...
    99+
    2024-04-02
  • MySQL - 表空间碎片整理方法
    MySQL数据库中的表在进行了多次delete、update和insert后,表空间会出现碎片。定期进行表空间整理,消除碎片可以提高访问表空间的性能。 检查表空间碎片 下面这个实验用于验证进行表空间整理后对性能的影响,首先检查这个...
    99+
    2023-10-25
    mysql adb android
  • MySQL5.7中如何进行数据碎片整理
    本篇文章给大家分享的是有关MySQL5.7中如何进行数据碎片整理,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 &...
    99+
    2024-04-02
  • 索引碎片整理
    查询是否发生了索引碎片 SELECT object_name(dt.object_id) Tablename,si.name Indexname,dt.avg_fragmentation_in_...
    99+
    2024-04-02
  • Win 2000磁盘碎片整理
    电脑使用久了,磁盘上保存了大量的文件,这些文件并非保存在一个连续的磁盘空间上,而是把一个文件分散的放在许多地方,这些零散的文件被称作“磁盘碎片”,这些碎片会降低整个Windows的性能。于是Win...
    99+
    2023-05-23
    Win 2000 磁盘碎片
  • MySQL InnoDB表的碎片量化和整理(data free能否用来衡量碎片?)
    网络上有很多MySQL表碎片整理的问题,大多数是通过demo一个表然后参考data free来进行碎片整理,这种方式对myisam引擎或者其他引擎可能有效(本人没有做详细的测试).对Innodb引擎是不是准确的,或者data fr...
    99+
    2021-08-24
    MySQL InnoDB表的碎片量化和整理(data free能否用来衡量碎片?)
  • oracle如何查询表碎片
    这篇文章给大家分享的是有关oracle如何查询表碎片的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。SELECT OWNER,      &n...
    99+
    2024-04-02
  • win7磁盘如何整理碎片
    小编给大家分享一下win7磁盘如何整理碎片,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!整理方法:首先点击页面底部的“开始”菜单按钮,在弹出的菜单栏中点击“所有程...
    99+
    2023-06-15
  • win7磁盘碎片怎么整理
    这篇文章主要介绍“win7磁盘碎片怎么整理”,在日常操作中,相信很多人在win7磁盘碎片怎么整理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”win7磁盘碎片怎么整理”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-28
  • win10磁盘碎片如何整理
    这篇文章主要介绍“win10磁盘碎片如何整理”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“win10磁盘碎片如何整理”文章能帮助大家解决问题。 win10磁盘碎片...
    99+
    2023-01-29
    win10
  • win10如何整理磁盘碎片
    本篇内容介绍了“win10如何整理磁盘碎片”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!win10磁盘碎片的整理步骤双击打开“此电脑”,如下...
    99+
    2023-07-01
  • ubuntu磁盘碎片如何整理
    在Ubuntu中,可以使用e4defrag命令来整理磁盘碎片。e4defrag是ext4文件系统的碎片整理工具。首先,打开终端(Ct...
    99+
    2023-08-24
    ubuntu
  • SQL级别索引碎片整理
    SQL级别索引碎片整理是指对数据库中的索引进行整理、优化,以提高数据库查询性能和减少存储空间的过程。索引碎片是指索引中的数据并非按照物理存储顺序排列的情况,造成查询效率低下,整理索引碎片可以提高查询效率和减少存储空间的占用。 索引碎片整理可...
    99+
    2024-08-03
    sql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作