运维联盟俱乐部

 找回密码
 立即注册
查看: 1516|回复: 0

[技术专题] 分区

[复制链接]
  • TA的每日心情
    开心
    2023-8-9 11:05
  • 发表于 2021-11-11 15:01:03 | 显示全部楼层 |阅读模式
    1 Introduction to Very Large Databases

    1.1 Introduction to Partitioning        

    分区通过将非常大的表和索引细分为更小且更易于管理的部分来支持它们。

    分区通过将非常大的表和索引分解成更小、更易于管理的部分来解决支持非常大的表和索引的关键问题,称为分区,这些部分对应用程序完全透明。无需修改 SQL 查询和数据操作语言 (DML) 语句即可访问分区表。但是,在定义分区之后,数据定义语言 (DDL) 语句可以访问和操作单个分区,而不是整个表或索引。这就是分区如何简化大型数据库对象的可管理性。表或索引的每个分区必须具有相同的逻辑属性,例如列名、数据类型和约束,但每个分区可以具有单独的物理属性,例如启用或禁用压缩、物理存储设置和表空间。
    分区对于许多不同类型的应用程序非常有用,尤其是管理大量数据的应用程序。
    OLTP 系统通常受益于可管理性和可用性的改进,而数据仓库系统则受益于性能和可管理性。

    分区具有以下优点:
    • 它支持数据管理操作,例如数据加载、索引创建和重建以及分区级别的备份和恢复,而不是整个表。这导致这些操作的时间显着减少。
    • 它提高了查询性能。通常可以通过访问分区的子集而不是整个表来获得查询的结果。对于某些查询,这种技术(称为分区修剪)可以提供数量级的性能提升。
    • 它显着减少了计划停机对维护操作的影响。分区维护操作的分区独立性使您可以对同一表或索引的不同分区执行并发维护操作。您还可以对不受维护操作影响的分区运行并发 SELECT 和 DML 操作。
    • 如果将关键表和索引划分为多个分区以减少维护窗口、恢复时间和故障影响,它会提高任务关键型数据库的可用性。
    • 并行执行提供了优化资源利用率和最小化执行时间的特定优势。查询以及 DML 和 DDL 支持并行执行

    分区支持更快地访问 Oracle 数据库中的数据。无论数据库有 10 GB 还是 10 TB 的数据,分区都可以将数据访问提高几个数量级。无需对应用程序进行任何修改即可实现分区。例如,您可以将未分区表转换为分区表,而无需修改访问该表的任何 SELECT 语句或 DML 语句。您无需重写应用程序代码即可利用分区。

    1.2 VLDB and Partitioning   

    分区是管理超大型数据库 (VLDB) 的重要策略。
    一个非常大的数据库没有最小绝对大小。尽管 VLDB 是一种类似于小型数据库的数据库,但在管理 VLDB 方面存在特定挑战。这些挑战与针对这种规模的系统执行操作的庞大规模和成本效益有关。
    数据库规模的稳定增长有几个趋势:
    • 长期以来,系统都是孤立开发的。公司已经开始看到将这些系统结合起来以实现跨部门分析同时降低系统维护成本的好处。数据库和应用程序的整合是数据库规模持续增长的关键因素。
    • 许多公司面临着在最短时间存储数据的规定。这些规定通常会导致更多数据被存储更长的时间。
    • 公司通过扩大销售和运营或通过并购实现增长,从而导致生成和处理的数据量增加。与此同时,依赖数据库进行日常活动的用户数量也在增加。
    分区是管理超大型数据库的关键功能。增长是分区解决超大型数据库的基本挑战,分区支持分治技术来管理数据库中的表和索引,尤其是当这些表和索引增长时。分区功能允许数据库针对非常大的数据集进行扩展,同时保持一致的性能,而不会过度增加管理或硬件资源。

    1.3 Partitioning As the Foundation for Information Lifecycle Management  

    分区为信息生命周期管理 (ILM) 提供支持。

    信息生命周期管理 (ILM) 是一组用于在数据的整个使用寿命期间管理数据的流程和策略。 ILM 策略的一个重要组成部分是确定在数据生命周期中的任何时间点存储数据的最合适且最具成本效益的介质:日常操作中使用的较新数据存储在速度最快、可用性最高的存储层上,而不常访问的较旧数据可能会存储在成本较低且效率较低的存储层上。较旧的数据也可能更新频率较低,因此将数据压缩和存储为只读是有意义的。

    Oracle 数据库为实施 ILM 解决方案提供了理想的环境。 Oracle 支持多个存储层,并且由于所有数据都保留在 Oracle 数据库中,因此多个存储层对应用程序是透明的,并且数据始终是安全的。分区提供了将表中的数据存储在不同分区中的基本技术。

    尽管在企业级系统中最常见的是多个存储层和复杂的 ILM 策略,但大多数公司和大多数数据库都需要某种程度的信息生命周期管理。使用分区时,最基本的 ILM 操作(归档旧数据以及从数据库中清除或删除该数据)可以快几个数量级。

    1.4 Partitioning for All Databases               

    分区为大型和小型数据库提供了好处。

    分区的好处不仅仅适用于非常大的数据库;所有数据库,甚至是小型数据库,都可以从分区中受益。
    即使是大小以兆字节为单位的数据库,也可以从分区中获得与最大的多 TB 系统相同类型的性能和可管理性优势。

    2 Partitioning Concepts            

    分区可增强各种应用程序的性能、可管理性和可用性,并有助于降低存储大量数据的总拥有成本。
    分区允许将表、索引和索引组织表细分为更小的部分,从而能够在更精细的粒度级别管理和访问这些数据库对象。 Oracle 提供了丰富多样的分区策略和扩展来满足每个业务需求。因为它是完全透明的,所以分区几乎可以应用于任何应用程序,而无需对应用程序进行潜在的昂贵和耗时的更改。

    2.1 Partitioning Overview

    分区提供了一种将对象细分为更小的部分的技术。
    分区允许将表、索引或索引组织表细分为更小的部分,其中此类数据库对象的每一部分称为分区。每个分区都有自己的名称,并且可以选择拥有自己的存储特性。

    讨论了以下主题:
    •     分区基础
    •     分区键
    •     分区表
    •     分区索引组织表
    •     系统分区
    •     信息生命周期管理的分区
    •     哈希集群的范围分区
    •     分区和 LOB 数据
    •     外部表分区
    •     XMLType 和对象数据中的集合

    2.1.1 Basics of Partitioning                  


    分区允许集体或单独管理对象。
    从数据库管理员的角度来看,一个分区对象有多个部分,可以集中或单独管理。这为管理员在管理分区对象方面提供了相当大的灵活性。但是,从应用程序的角度来看,分区表与非分区表是相同的;使用 SQL 查询和 DML 语句访问分区表时无需修改。

    2.1.2 Partitioning Key

    分区表中的每一行都使用键明确分配给单个分区。
    分区键由一个或多个列组成,这些列确定存储每一行​​的分区。 Oracle 自动将插入、更新和删除操作定向到具有分区键的相应分区。

    2.1.3 Partitioned Tables                  

    大多数表都可以分区。
    除了那些包含 LONG 或 LONG RAW 数据类型的列的表之外,任何表都可以分区多达一百万个单独的分区。但是,您可以使用包含具有 CLOB 或 BLOB 数据类型的列的表。
    讨论了以下主题:
    • 何时对表进行分区
    • 何时对索引进行分区

    2.1.3.1 When to Partition a Table                     

    在某些情况下,您需要对表进行分区。
    以下是针对应该考虑对表进行分区的情况的一些建议:
    •     大于 2 GB 的表。
    •     这些表应始终被视为分区的候选者。
    •     包含历史数据的表,其中新数据被添加到最新的分区中。
    •     一个典型的例子是一个历史表,其中只有当月的数据是可更新的,其他 11 个月的数据是只读的。
    •     其内容必须分布在不同类型的存储设备上的表。

    2.1.3.2 When to Partition an Index      

    在某些情况下,您需要对索引进行分区。
    以下是有关何时考虑对索引进行分区的一些建议:
    •     删除数据时避免索引维护。
    •     在不使整个索引失效的情况下对部分数据进行维护。
    •     减少索引对值单调递增的列造成的索引倾斜的影响。

    2.1.5 System Partitioning

    系统分区支持应用程序控制的分区,而无需数据库控制数据放置。
    数据库只是提供了将表分解为多个分区的能力,而无需知道各个分区将用于什么。分区的所有方面都必须由应用程序控制。例如,在没有明确指定分区的情况下尝试插入系统分区表会失败。
    系统分区提供了众所周知的分区优势(可扩展性、可用性和可管理性),但分区和实际数据放置由应用程序控制。

    2.1.6 Partitioning for Information Lifecycle Management                  
    信息生命周期管理 (ILM) 关注的是在其生命周期内管理数据。
    分区在 ILM 中起着关键作用,因为它使数据组(即分区)能够分布在不同类型的存储设备上并单独管理。

    2.1.7 Range Partitioning for Hash Clusters                  
    Oracle 数据库支持分区哈希集群。

    分区哈希集群仅支持单级范围分区。

    2.1.8 Partitioning and LOB Data                  
    存储在数据库的 LOB 列中的非结构化数据(例如图像和文档)也可以进行分区。
    对表进行分区时,所有列都驻留在该分区的表空间中,但 LOB 列除外,它们可以存储在自己的表空间中。
    当表包含大型 LOB 时,此技术非常有用,因为它们可以与主数据分开存储。如果主数据经常更新但 LOB 数据不是,这可能是有益的。例如,员工记录可能包含不太可能经常更改的照片。但是,员工人员详细信息(例如地址、部门、经理等)可能会更改。这种方法还意味着您可以使用更便宜的存储来存储 LOB 数据,而使用更昂贵、更快的存储来存储员工记录。

    2.1.9 Partitioning on External Tables                  
    外部表支持分区。
    此功能支持优化,例如静态分区修剪、动态修剪和分区智能连接,用于对分区外部表的查询。此功能还为每个外部表分区提供基于分区的增量统计信息收集,从而支持更好的优化器计划。

    2.1.10 Collections in XMLType and Object Data                  
    在使用 XMLType 和对象表和列时进行分区提供了分区的标准优势,例如可以将表和索引细分为更小的部分,从而可以在更精细的粒度级别管理和访问这些数据库对象。
    默认情况下,当您使用列表、范围或散列分区对 XMLType 表或具有 XMLType 列的表进行分区时,数据中的任何有序集合表 (OCT) 都会自动进行相应的分区。这种均分区意味着 OCT 的分区遵循其父(基)表的分区方案。基表的每个分区都有一个对应的集合表分区。子元素存储在与其父元素的基表分区相对应的集合表分区中。
    如果对具有嵌套表的表进行分区,则 Oracle 数据库使用原始基表的分区方案作为嵌套表分区方式的基础。为每个嵌套表分区划分一个基表分区的这种分区称为均分区。默认情况下,嵌套表会在基表分区时自动分区。但是请注意,OCT 或嵌套表不支持复合分区。

    2.2 Benefits of Partitioning               
    通过提高性能、可管理性和可用性,分区可以为各种应用程序提供巨大的好处。
    分区大大提高某些查询或维护操作的性能并不罕见。此外,分区可以大大简化常见的管理任务。
    分区还使数据库设计人员和管理员能够解决一些前沿应用程序带来的难题。分区是构建多 TB 系统或具有极高可用性要求的系统的关键工具。
    讨论了以下主题:
    •     性能分区
    •     可管理性分区
    •     分区可用性

    2.2.1 Partitioning for Performance                  
    通过限制要检查或操作的数据量,并通过为并行执行提供数据分布,分区提供了多种性能优势。分区功能包括:
    • 分区修剪
    • 分区连接

    2.2.1.1 Partition Pruning                     
    分区修剪是使用分区提高性能的最简单也是最重要的手段。
    分区修剪通常可以将查询性能提高几个数量级。例如,假设一个应用程序包含一个包含订单历史记录的 Orders 表,并且该表已按周分区。请求单周订单的查询只会访问 Orders 表的一个分区。如果 Orders 表有 2 年的历史数据,那么这个查询将访问一个分区而不是 104 个分区。由于分区修剪,此查询的执行速度可能快 100 倍。
    分区修剪适用于所有 Oracle 性能特性。 Oracle 将分区修剪与任何索引或连接技术或并行访问方法结合使用。

    2.2.1.2 Partition-Wise Joins                     
    分区还可以通过使用称为分区连接的技术来提高多表连接的性能
    当两个表被连接并且两个表都在连接键上分区时,或者当引用分区表与其父表连接时,可以应用分区连接。 Partition-wise joins 将一个大的 join 分解成在每个分区之间发生的更小的 join,从而在更短的时间内完成整个连接。这为串行和并行执行提供了显着的性能优势。

    2.2.2 Partitioning for Manageability                  
    分区使您能够将表和索引分区为更小、更易于管理的单元,使数据库管理员能够采用分而治之的方法进行数据管理。
    通过分区,维护操作可以集中在表的特定部分。例如,您可以备份表的单个分区,而不是备份整个表。对于跨整个数据库对象的维护操作,可以在每个分区的基础上执行这些操作,从而将维护过程划分为更易于管理的块。
    分区管理的典型用途是支持数据仓库中的滚动窗口加载过程。假设您每周将新数据加载到表中。可以对该表进行分区,以便每个分区包含一周的数据。加载过程只是使用分区交换加载添加新分区。添加单个分区比修改整个表要高效得多,因为您不需要修改任何其他分区。

    2.2.3 Partitioning for Availability                  
    分区数据库对象提供分区独立性。分区独立性的这种特性可以成为高可用性策略的重要组成部分。
    例如,如果分区表的一个分区不可用,则该表的所有其他分区都保持在线且可用。应用程序可以继续针对表的可用分区执行查询和事务,并且这些数据库操作可以成功运行,前提是它们不需要访问不可用分区。
    数据库管理员可以指定每个分区存储在单独的表空间中;最常见的情况是将这些表空间存储在不同的存储层上。将不同的分区存储在不同的表空间中,您可以独立于表中的其他分区对每个单独的分区进行备份和恢复操作。因此,允许更快地使数据库的活动部分可用,以便可以继续访问系统,同时仍在恢复非活动数据。此外,分区可以减少计划停机时间。分区提供的性能提升可能使您能够在相对较小的批处理窗口中完成对大型数据库对象的维护操作。

    2.3 Partitioning Strategies               
    Oracle Partitioning 提供了三种基本的数据分布方法作为控制数据如何放置到各个分区的基本分区策略。
    这些策略是:
    •     范围
    •     哈希
    •     列表
    使用这些数据分布方法,可以将表分区为单级表或复合分区表:
    •     单级分区
    •     复合分区
    每种分区策略都有不同的优势和设计考虑。因此,每种策略更适合特定情况。

















    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    运维联盟俱乐部 ( 冀ICP备19036648号 )

    GMT+8, 2024-5-17 09:42 , Processed in 0.055129 second(s), 21 queries , Gzip On.

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表