当前位置: 首页 > wzjs >正文

wordpress 工作室seo搜索

wordpress 工作室,seo搜索,烟台网站建设科技公司,做网站需要空间Oracle 的SHRINK 操作实现原理 Oracle 的 SHRINK 操作是一种在线重组表空间的技术,它可以在不重建表的情况下减少高水位线(HWM)并回收空闲空间。 基本实现原理 核心目标: 降低高水位线(HWM)回收未使用的空间消除行迁移和行链接在线操作(允许…

Oracle 的SHRINK 操作实现原理

Oracle 的 SHRINK 操作是一种在线重组表空间的技术,它可以在不重建表的情况下减少高水位线(HWM)并回收空闲空间。

基本实现原理

  1. 核心目标

    • 降低高水位线(HWM)
    • 回收未使用的空间
    • 消除行迁移和行链接
    • 在线操作(允许DML并发)
  2. 与MOVE的关键区别

    • SHRINK是渐进式重组,MOVE是原子性重建
    • SHRINK保持ROWID不变,MOVE会改变ROWID
    • SHRINK不需要重建索引,MOVE需要

详细工作流程

1. 准备阶段

-- 必须启用行移动功能
ALTER TABLE table_name ENABLE ROW MOVEMENT;

2. 收缩执行阶段

ALTER TABLE table_name SHRINK SPACE [COMPACT] [CASCADE];
两阶段操作机制:
  1. 压缩阶段(COMPACT)

    • 重新组织数据行,填充空闲空间
    • 不立即释放空间给表空间
    • 可中断后继续执行
  2. 空间释放阶段

    • 调整高水位线
    • 将空闲空间归还表空间
    • 需要额外的系统资源

3. 内部操作伪代码

def shrink_table():# 第一阶段:压缩for each block in table_blocks:if block has free_space:move_rows_from_higher_blocks()compact_rows()# 第二阶段:调整HWMnew_hwm = last_used_block + 1update_segment_header(new_hwm)release_free_blocks()

关键技术点

1. 行移动机制

  • 使用临时空间记录行移动映射
  • 保持索引结构不变(不改变ROWID)
  • 通过内部事务保证一致性

2. 空间管理

  • 使用位图跟踪空闲空间
  • 优先填充前半部分数据块
  • 逐步释放末尾的空闲块

3. 并发控制

  • 使用行级锁而非表锁
  • 允许DML操作并发执行
  • 可能短暂阻塞DDL操作

存储变化示意图

收缩前:
[已用块][空闲块][已用块][空闲块][HWM]
收缩后:
[紧凑的已用块][HWM] | 释放的空间

参数与限制

1. 关键参数影响

  • COMPACT:只压缩不释放空间
  • CASCADE:级联收缩相关对象(如索引)
  • SHRINK SPACE:完整执行两阶段

2. 主要限制

  • 必须启用ROW MOVEMENT
  • 不支持含LOB列的表(除非使用特殊选项)
  • 不能用于系统表空间中的对象
  • 集群表、IOT等特殊表有限制

性能优化建议

  1. 分批处理大表

    -- 先压缩多次再最终释放
    ALTER TABLE large_table SHRINK SPACE COMPACT;
    ALTER TABLE large_table SHRINK SPACE COMPACT;
    ALTER TABLE large_table SHRINK SPACE;
    
  2. 最佳执行时机

    • 低业务负载时段
    • 表有大量删除/更新操作后
    • 定期维护窗口期
  3. 监控方法

    -- 查看收缩进度
    SELECT sql_text, sofar, totalwork 
    FROM v$session_longops 
    WHERE opname LIKE '%SHRINK%';-- 评估收缩效果
    SELECT table_name, blocks, empty_blocks 
    FROM user_tables 
    WHERE table_name = 'YOUR_TABLE';
    

内部实现细节

  1. UNDO生成

    • 只为行移动生成UNDO
    • 比MOVE操作生成的UNDO少得多
  2. REDO生成

    • 记录行移动和HWM变更
    • 量级取决于移动的行数
  3. 临时空间使用

    • 需要少量临时空间
    • 主要用于跟踪行移动

与MOVE操作的对比

特性SHRINKMOVE
锁定级别行级锁排他锁
ROWID变化保持不变全部改变
索引状态保持有效需要重建
空间释放渐进式释放完全重组
高水位线处理可能降低但不完全重置完全重置
适用场景日常维护大规模重组

实际案例

-- 1. 准备表
CREATE TABLE sales_data AS SELECT * FROM sales_history;
DELETE FROM sales_data WHERE sale_date < ADD_MONTHS(SYSDATE, -24);-- 2. 检查空间使用
SELECT segment_name, blocks, bytes/1024/1024 MB 
FROM user_segments 
WHERE segment_name = 'SALES_DATA';-- 3. 执行收缩
ALTER TABLE sales_data ENABLE ROW MOVEMENT;
ALTER TABLE sales_data SHRINK SPACE CASCADE;-- 4. 验证结果
SELECT blocks, empty_blocks 
FROM user_tables 
WHERE table_name = 'SALES_DATA';

SHRINK操作是Oracle提供的一种高效在线空间重组工具,特别适合需要最小化停机时间的生产环境维护。理解其实现原理有助于DBA更有效地使用这一功能。

http://www.dtcms.com/wzjs/86624.html

相关文章:

  • 中小型网站建设公司百度广告标识
  • 佛山网站建设永网青岛网站排名提升
  • 网站做su什么意思做seo要投入什么
  • 经营一个网站要怎么做湖南长沙最新情况
  • 深圳建站程序长春网站seo哪家好
  • 平安网站做的太差站长之家产品介绍
  • 网站监控怎么做关键词优化软件
  • 网站联系我们的地图怎么做外链大全
  • 在线做数据图的网站有哪些友情链接交换网站
  • wordpress评测网站神马站长平台
  • 套模板做网站 链接怎么做武汉久都seo
  • 呼和浩特住房和城乡建设部网站怎样优化网站排名靠前
  • 虎门专业网站建设电商培训视频教程
  • 政务网站集约化建设难点与建议企业营销策划是做什么的
  • 南京做网站引流的公司seo报告
  • 一个网站完整的html代码360建站和凡科哪个好
  • 梧州疫情最新消息今天封城了优化大师兑换码
  • 卡盟自助网站建设广州最近爆发什么病毒
  • 网站开发优秀毕业论文360竞价推广怎么做
  • 在微信怎样搞做微视频网站做网站需要什么技术
  • 网站建设中标如何免费搭建自己的网站
  • 成都企业网站维护友缘在线官网
  • 盘锦网站建设热线电话公司网站怎么申请怎么注册
  • 做调查报告的网站网站外贸推广
  • wordpress建站服务器营销推广投放
  • 厦门建设局长是谁优化资源配置
  • 石家庄企业网站建设域名注册优惠
  • 做网站需要加班吗seo关键词找29火星软件
  • 上海网站建设沪icp备刷外链
  • 做地方短租网站厦门网站到首页排名