千家信息网

Oracle 数据库整理表碎片

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,表碎片的来源当针对一个表的删除操作很多时,表会产生大量碎片。删除操作释放的空间不会被插入操作立即重用,甚至永远也不会被重用。怎样确定是否有表碎片-- 收集表统计信息SQL> exec dbms_sta
千家信息网最后更新 2026年11月01日Oracle 数据库整理表碎片

表碎片的来源

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

怎样确定是否有表碎片

-- 收集表统计信息

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需要跟当前表一样大小的空闲空间。
数据 碎片 空间 水位 整理表 信息 空闲 统计 性能 索引 链接 存储 中表 时间 脚本 查询 管理 原始 一步到位 从未 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技企业 科技金融是不是互联网金融 互联网最新的科技 互联网科技有限公司图片 关于新基建和互联网科技 互联网金融 金融科技 礼当家互联网科技 奇酷互联网科技公司 致聘互联网科技 哈尔滨秒房互联网科技有限公司 青海省互联网新科技 科技互联网的估值 互联网系的金融科技公司 荆州市昕露互联网络科技有限公司 哈尔滨屹滨互联网科技有限公司 乌苏新华互联网科技做什么的 合肥互联网科技公司公章图片 互联网科技企业商标注意事项 互联网科技博主张洲 科技互联网专业务虚会材料 互联网科技股 厦门中拓互联网络科技有限公司 深圳互联网科技公司 互联网科技类展会 哈尔滨新华互联网科技 深圳卡尔迅互联网科技有限公司怎么样 互联网科技生活的内容 互联网科技革命什么开始 互联网科技商业 新兴科技互联网创新大赛颁奖典礼
0