读书笔记:白话解读:Oracle并行加载与空间管理的艺术

news/2025/11/11 15:27:54/文章来源:https://www.cnblogs.com/www-htz-pw/p/19210531

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。

本文为个人学习《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一书过程中的笔记与理解分享,仅用于学习与交流,部分内容参考原书观点并结合>实际经验进行整理。若涉及版权问题,请联系删除或沟通处理。也请大家支持购买原版书籍。

白话解读:Oracle并行加载与空间管理的艺术

想象一下,你要把一座山那么多的货物(数据)从A点快速搬到B点(数据库表里)。最笨的方法是找一个人一箱一箱地搬(单进程处理)。而Oracle提供了一个超级武器:并行直接路径加载


第一部分:什么是并行直接路径加载?

简单来说,它就是:

  1. 呼叫一支搬运队:同时启动多个“搬运工”(并行执行会话)。
  2. 开辟专用通道:每个搬运工都绕过仓库的临时堆放区(缓冲区缓存)和物流记录中心(重做日志,某些情况下),直接把货物运到最终仓库。
  3. 各自负责一片区域:每个搬运工在仓库里划出自己的专属区域(区,Extent),只往自己的区域里堆放货物,不跟别人抢地盘。

这样做的好处是什么?
极致的速度!因为省去了中间环节,直接写入磁盘,所以加载海量数据时速度飞快。

怎么实现呢?
用两句简单的SQL就能搞定:

  • CREATE TABLE new_table PARALLEL AS SELECT ... (建新表并加载)
  • INSERT /*+ APPEND */ INTO ... SELECT ... (向现有表追加数据)

第二部分:带来的问题——“奢侈”的空间浪费

这种高效的方法也带来了一个副作用:空间浪费。我们用一个比喻来理解:

  • 场景:你有1010MB(约1GB)的货物要入库。仓库规定,每个货架(区)标准大小是100MB。你雇了10个搬运工。
  • 过程
    • 每个搬运工先申请一个100MB的货架,开始往上堆货物。
    • 很快,第一个货架都堆满了(10个100MB货架用掉了1000MB空间)。
    • 但每个搬运工手里还有1MB的货没地方放。于是,他们每人又去申请了一个全新的100MB货架,只用了上面1MB的空间,剩下的99MB就空在那儿了。
  • 结果:你最终用了20个货架,总共2000MB空间,但实际只存放了1010MB的货物。有将近一半的空间被“占着茅坑不拉屎”了。

这个问题在Oracle里被称为 “区修剪” 问题。理想情况下,Oracle应该能把最后一个没装满的区“修剪”一下,只保留使用的部分,把多余的空间释放出来。


第三部分:解决方案——两种仓库管理员的较量

Oracle的“仓库”(表空间)有两种管理模式,对应了两种解决空间浪费的思路:

1. 刻板的“规则管理员” - UNIFORM SIZE(统一大小)

  • 工作方式:他规定,这个仓库里所有的货架必须一模一样大,比如全是100MB。
  • 优点:管理简单,分配速度快。
  • 缺点完全无法进行“区修剪”。上面例子中最后那个只用了1MB的100MB货架,他绝不会给你缩小。空间浪费是永久性的。如果你反复进行并行加载,浪费的空间会累积起来,非常可观。

2. 灵活的“智能管家” - AUTOALLOCATE(自动分配)

  • 工作方式:他没有固定尺寸的货架,而是准备了一套不同大小的货架(比如8MB, 64MB, 256MB等),根据需要智能分配。
  • 优点支持智能的“区修剪”
    • 当搬运工快干完活时,智能管家会看他最后一个货架用了多少。如果只用了1MB,管家可能会找一个更小的、合适的空货架(比如8MB的)来替换,或者标记出剩余空间可供其他搬运工使用。
  • 结果:空间利用率远高于UNIFORM方式。虽然可能会产生更多不同大小的区(货架),但几乎没有浪费的空间。

总结与建议

通过实际的测试对比发现:

  • 使用 AUTOALLOCATE 模式创建的表,在加载相同数据后,占用的总空间始终比 UNIFORM 模式要少。
  • 随着多次并行加载,UNIFORM 模式的空间浪费会越来越严重,而 AUTOALLOCATE 模式则能始终保持高效的空间利用。

所以,给你的最终建议是:

如果你经常进行大规模的并行直接路径加载(这在数据仓库中非常常见),请优先选择使用 AUTOALLOCATE 方式来管理你的表空间。

它就像那位聪明的管家,虽然管理起来稍微复杂一点(多了几种尺寸的区),但他能为你省下大量的“仓库”空间,从长远看,这对性能和成本都大有裨益。而那位刻板的“规则管理员”(UNIFORM),只适合在一些对区大小有严格一致性要求的特殊场景下使用。

------------------作者介绍-----------------------
姓名:黄廷忠
个人博客: (http://www.htz.pw)
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)

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

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

相关文章

1-2-4-集合框架

Java集合框架是面试中的重点考察领域。下面我为你梳理一份涵盖机制、底层原理与应用场景的全面总结,并附上典型面试问题深度解析。 一、集合框架总体概述 Java集合框架(Java Collections Framework)提供了一套性能优…

1-3-1-知识图谱

Java并发编程的知识体系确实庞大且环环相扣。下面我为你梳理一个结构清晰的知识图谱,并附上核心要点和面试考察方向,希望能帮助你系统性地复习和准备。 🧠 Java并发编程知识图谱:从理论到实战 📚 1. 并发基础与…

USB --- PD协商

USB PD 从机(Sink)的状态机流程(SNK_STARTUP→DISCOVERY→...→SNK_READY)是从机(Sink)主动发起并主导,配合主机(Source)响应完成的协商过程,每个状态的切换由特定消息交互或超时机制触发。以下是各步骤的详…

T690363 促销活动

使用分块与维护下凸壳解决问题。考虑分块,然后拆贡献。对于所有散块我们直接暴力重构后操作/查询。对于整块的 1 操作,我们考虑打一个标记 \(T_x\),那么之后的查询块 \(x\) 就相当于查询 \[\max((p_i+T_x)q_i)=\max…

1-3-2-线程生命周期与状态转换

提示词: 请你作为一位资深Java技术面试官兼职业导师,专注于帮助用户系统性地准备Java资深开发和架构师岗位的面试。你应具备深厚的技术底蕴、广泛的知识视野(涵盖从基础到高阶、从单体到分布式的一切相关内容)和丰…

1-2-2-异常体系

Java异常体系是面试中的核心考察点,下面我将从机制原理、应用场景和避坑指南三个方面,为你梳理一份全面的面试要点总结。面试要点维度 关键内容核心体系结构 Throwable > Error / Exception > Checked Excepti…

1-5-1-设计模式与OOP

理解23种设计模式如何体现面向对象(OOP)思想,能帮助我们在设计和编码时更好地运用这些模式。下面我将这些设计模式按类型分类,并说明它们如何体现了OOP的核心理念。 一、设计模式及其OOP思想 下面是23种设计模式及…

1-6-0-总纲

以下是网络编程和I/O模型领域的核心知识原理及面试常见考点的详细总结。我将从网络基础、核心协议、Socket编程、I/O模型到高并发设计逐步展开,并穿插面试高频问题与解答思路。一、网络基础与分层模型 1. 核心分层模型…

1-6-2-网络协议基础

一、基础知识 以下是网络编程和I/O模型领域的核心知识原理及面试常见考点的详细总结。我将从网络基础、核心协议、Socket编程、I/O模型到高并发设计逐步展开,并穿插面试高频问题与解答思路。1、网络基础与分层模型 1.…

1-3-5-AQS详解

AQS(AbstractQueuedSynchronizer)详解 一、AQS是什么? AQS(AbstractQueuedSynchronizer)是Java并发包(java.util.concurrent.locks)中的核心同步框架,用于构建锁和同步工具。其核心设计思想是通过一个FIFO队列…

起飞啦,太easy啦!!!小白的神级AI辅助工具,一句话即可搭建超50个节点的工作流~~~~

嗨,我是小华同学,专注解锁高效工作与前沿AI工具!每日精选开源技术、实战技巧,助你省时50%、领先他人一步。👉免费订阅,与10万+技术人共享升级秘籍!n8n-MCP 是 n8n 的“智能中间件”:它向大模型(如 Claude De…

3-1-1-2-MySQL锁机制

MySQL中锁的分类 1、按照实现方式: 乐观锁、悲观锁; 2、按照作用对象: Lock、Latch 3、按照锁定对象: 全局锁、表锁、页锁、行锁 4、按照操作类型: 共享锁、独占锁 5、按照用途场景: 记录锁、间隙锁、临键锁、意…

Debug日志

2025.11.11 今天在做TFT LCD屏幕 4线SPI时,出现屏幕背光打开,但是屏幕无任何显示。软件进行了debug好久一无所获,最终检查硬件连线,发现CS引脚存在虚焊(量电压竟然有,测试阻抗才发现虚焊),补焊后正常。程序后续…

3-1-1-4-ACID特性底层原理

1、ACID的底层保障机制 一、前言:ACID是事务的核心契约 MySQL的ACID(原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability)是事务的基石,其实现依赖InnoDB存储引擎的底层组件协同工作(如日志…

1-6-5-Netty

1、Netty的工作流程和底层机制 要理解Netty的核心价值(高性能、低延迟的异步事件驱动网络框架),必须从其工作流程(业务视角的全链路)和底层机制(技术实现的本质)两方面展开。以下是结构化的拆解: 一、明确Nett…

2025年11月北京离婚房产律师对比榜:五强机构多维评测

当婚姻走到尽头,房产往往成为双方最关切的“硬资产”。在北京,一套房子可能凝聚着两代人积蓄、学区资格、央产政策限制,甚至公司股权与境外信托的交叉安排。用户搜索“北京离婚房产律师”时,通常处于三种场景:一是…

3-1-2-1-MySQL整体架构详解

1、MySQL整体架构 MySQL 整体架构与底层原理详解 MySQL 是一款关系型数据库管理系统(RDBMS),以分层架构为核心设计思想,将功能解耦为多个模块,兼顾扩展性、性能与易维护性。以下从整体架构分层、核心组件底层原理…

3-1-2-2-MySQL分页查询机制

1、MySQL分页查询处理流程 要理解MySQL分页查询的处理流程与底层原理,我们需要从SQL执行生命周期、存储引擎行为、性能瓶颈根源三个维度展开,并结合LIMIT子句的本质展开分析。 一、分页查询的核心语法与本质 MySQL分…

3-1-2-3-MySQL高可用与容灾

1、MySQL高可用与容灾设计全解析 MySQL的高可用(High Availability, HA)聚焦减少服务不可用时间(降低RTO,恢复时间目标),容灾(Disaster Recovery, DR)则关注应对区域性/毁灭性故障(降低RPO,恢复点目标,即数…

打印文件怎么居中,占整个页面

通用核心步骤设置最小页边距:在打印设置中把边距设为0或最小值启用缩放/自适应:让内容自动缩放以填满纸张检查纸张方向:横向/纵向选择能最大化利用空间的方向