内存为王:DBIMRACShareNothing架构的挑战和解决方案.docx
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
### 内存为王:DBIM RAC Share-Nothing 架构的挑战和解决方案 #### DBIM概述 Database In-Memory (DBIM) 是 Oracle 在 12.1.0.2 版本中推出的一项关键特性,其设计初衷是为了显著提升分析型 SQL 的执行速度。这一特性引入了一个新的内存区域——In-Memory Columnar Store (IM 列式存储),它独立于 Buffer Cache 并驻留在 SGA 中。当设置表的 inmemory 属性后,该表的数据将被加载至 IM 列式存储中。数据可以在 Buffer Cache 和 IM 列式存储之间同时存在,其中传统数据按行组织并以数据块形式存储在 Buffer Cache 和磁盘上,而 IM 列式存储中的数据则按照列式进行组织。传统的 OLTP 应用依旧通过 Buffer Cache 来修改数据,而 Oracle 通过内部机制确保了行式存储与列式存储之间的事务一致性。对于分析型 SQL 查询,数据主要从 IM 列式存储中进行扫描,从而避免了物理读取成为性能瓶颈。 #### IM 列式存储结构 与传统的表空间类似,IM 列式存储也包含多个 In-memory Segments,每个 In-Memory Segment 由 In-Memory Compress Unit (IMCU) 组成。对于大多数 In-memory 压缩格式,默认情况下每个 IMCU 包含大约 512K 行数据。 #### DBIM 性能优势 DBIM 提供的性能提升主要来源于硬件和软件两方面的优化: 1. **硬件方面**: - 列式存储便于利用 CPU 的单指令多数据 (SIMD) 技术来加速数据处理。对于 Intel CPU,Oracle 当前版本使用高级矢量扩展指令集 (AVX)。 - 消除了对数据进行物理 I/O 扫描的需求,避免了大规模数据扫描成为性能瓶颈。值得注意的是,DBIM 对 join 过程中所需的临时表空间 I/O 并无影响。 2. **软件特性方面**: - **In-memory 列压缩**:提供六种不同的压缩级别选项,需要在内存使用和解压缩所需 CPU 资源之间做出平衡。对于默认的 querylow 压缩级别,通常可以达到 2~10 倍的压缩比。 - **In-memory 存储索引**:类似于 Exadata 的特性,维护 IMCU 中每列的最小值和最大值。如果过滤条件中的值不在这些范围之内,则可以跳过当前 IMCU 的扫描,从而提高扫描效率。 - **Bloom Filter**:DBIM 支持 Bloom Filter,可以在扫描 IMCU 时快速排除不符合 join 条件的数据。 - **In-memory 聚合**:即 Vector Group By Transformation,可视为 Bloom Filter 的加强版。对于涉及小表 join 大表且带有 group by 语句的情况,这一特性能够带来显著的性能提升。 #### DBIM RAC Share-Nothing 架构 在 Oracle Real Application Clusters (RAC) 环境中,DBIM 的部署策略有所不同。RAC 通常采用 share-everything 架构,但 DBIM 在 RAC 上采用了 share-nothing 的策略。这意味着每个实例都有自己的 IMCU 副本,而不是通过 Cache Fusion 机制共享数据块。这种分布式的架构对于提升整体系统的可用性和性能具有重要意义。 当前版本中,Oracle 只在 Engineeredsystem (如 Exadata、SuperCluster) 上支持 RAC 多实例实现 IMCU 镜像,由 duplicate 或者 duplicateall 属性控制 IMCU 分布到两个实例或所有实例。而对于非 Engineeredsystem,在 RAC 系统中使用 DBIM 时,duplicate 属性不会生效,所有加载到 IM 列式存储的表或分区,其 IMCU 将会分布到所有的实例上。分布方式可通过 distribute 属性控制,有以下三种方式: 1. **By PARTITION**:根据表的分区进行分布。 2. **By SUBPARTITION**:针对子分区进行分布。 3. **By ROWID RANGE**:依据 ROWID 范围进行分布。 默认情况下,系统将自动选择最合适的分布方式。对于分区表,如果某个分区维度的 cardinality 更大,则会选择按分区分布 (bypartition);反之,则会选择按子分区分布 (bysubpartition)。例如,如果一张表有 64 个分区,每个分区有 32 个子分区,那么会按照分区维度进行分布;如果表有 32 个分区,每个分区包含 64 个子分区,则会按子分区进行分布。为了充分利用 Partition Wise Join,会在连接键上进行 hash 分区,匹配的 hash 分区将被分配到相同的节点上。对于非分区表,则只能选择按 ROWID 范围进行分布。 #### 挑战与解决方案 虽然 DBIM 在 RAC 环境下提供了诸多优势,但仍面临一些挑战: 1. **资源管理**:如何高效地管理和利用每个实例中的内存资源,特别是在不同实例间合理分配 IMCU。 2. **数据一致性**:在分布式环境下保持数据一致性变得更加复杂。 3. **性能调优**:在 RAC 环境下,需要更加精细地调整 DBIM 的配置参数以适应不同的负载类型。 为了解决这些问题,Oracle 提供了一系列工具和技术,包括但不限于: - **内存管理工具**:用于监控和调整每个实例的内存使用情况。 - **数据分布策略**:通过合理选择 distribute 属性来优化数据分布。 - **查询优化器指导**:通过使用提示 (hints) 来引导查询优化器更好地利用 DBIM 特性。 - **故障恢复机制**:确保在实例故障时能够快速恢复服务。 DBIM 在 RAC 环境下的应用不仅为数据分析提供了强大的性能支持,同时也面临着一系列挑战。通过合理的设计和配置,可以充分发挥 DBIM 的潜力,从而在保证高可用性和高性能的同时,满足复杂业务需求。
- 粉丝: 1w+
- 资源: 19万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助