`
nlslzf
  • 浏览: 1046523 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle大表分区的一点点心得

阅读更多
http://www.knowsky.com/388420.html

最近在做一个客户关系治理系统,项目做的到不是非常成功,可还是学到了不少的知识,由于数据量很大,没有专门的Oracle数据库人员支持,对数据库优化治理等也只有我这个约懂一点的人上了。在对数据库优化上有一点点心得写出来希望能同大家一起学习和交流。

数据库大表的优化:采用蔟表(clustered tables)及蔟索引(Clustered Index)
蔟表和蔟索引是oracle所提供的一种技术,其基本思想是将几张具有相同数据项、并且经常性一起使用的表通过共享数据块(data block)的模式存放在一起。各表间的共同字段作为蔟键值(cluster key),数据库在访问数据时,首先找到蔟键值,以此同时获得若干张表的相关数据。蔟表所能带来的好处是可以减少I/O和减少存储空间,其中我更看重前者。采用表分区(partition)
表分区技术是在超大型数据库(VLDB)中将大表及其索引通过分区(patition)的形式分割为若干较小、可治理的小块,并且每一分区可进一步划分为更小的子分区(sub partition)。而这种分区对于应用来说是透明的。通过对表进行分区,可以获得以下的好处:
1)减少数据损坏的可能性。
2)各分区可以独立备份和恢复,增强了数据库的可治理性。
3)可以控制分区在硬盘上的分布,以均衡IO,改善了数据库的性能。
蔟表与表分区技术的侧重点各有不同,前者侧重于改进关联表间查询的效率,而表分区侧重于大表的可治理性及局部查询的性能。而这两项对于我的系统来说都是极为重要。由于本人技术限制,目前尚不确定两者是否可以同时实现,有那位在这方面有经验的给点指导将不胜感激。 
在两者无法同时实现的情况下,应依照需实现的功能有所取舍。综合两种模式的优缺点,我认为采用表分区技术较为适用于我们的应用。
Oracle的表分区有以下几种类型:
1)范围分区:将表按某一字段或若干个字段的取值范围分区。
2)hash分区:将表按某一字段的值均匀地分布到若干个指定的分区。
3)复合分区:结合了前面两种分区类型的优点,首先通过值范围将表进行分区,然后以hash模式将数据进一步均匀分配至物理存储位置。
综合考虑各项因素,以第三种类型最为优越。(本人实在技术有限仅采用了第1种范围分区,因为比较简单,便于治理)
优化的具体步骤:
1.确定需要优化分区的表:
经过对系统数据库表结构和字段,应用程序的分析,现在确定那些大表需要进行分区:
如帐户交易明细表acct_detail.
2.确定表分区的方法和分区键:
分区类型:采用范围分区。
分 区 键:
按trans_date(交易时间)字段进行范围分区.
3.确定分区键的分区范围,及打算分多少分区:
如:帐户交易明细表acct_detail.
根据字段(trans_date)分成一下分区:
1).分区1:09/01/2003   
2).分区2:10/01/2003   
3).分区3:11/01/2003   
4).分区4:12/01/2003   
5).分区5:01/01/2004 
6).分区6:02/01/2004 
   该表明显需要在以后增加分区。
4.建立分区表空间和分区索引空间
  1).建立表的各个分区的表空间: 
   1.分区1:crm_detail_200309
   CREATE TABLESPACE crm_detail_200309  DATAFILE  
   ‘/u1/oradata/orcl/crm_detail_20030901.dbf’ 
   SIZE 2000M EXTENT MANAGEMENT LOCAL UNIFORM size 16M;
   其它月份以后同以上(我在此采用oracle的表空间本地治理的方法)。

  2). 建立分区索引表空间
   1.分区1:index_detail_200309
   CREATE TABLESPACE index_detail_200309  DATAFILE  
   ‘/u3/oradata/orcl/index_detail_20030901.dbf’ 
   SIZE 2000M  EXTENT MANAGEMENT LOCAL UNIFORM size 16M;
5.建立基于分区的表:
   create  table  table name
   (

    ........
    )
    enable row movment               --此语句是能修改行分区键值,也就是如不添加该                                     句不能修改记录的分区键值,不能使记录分区迁移
    PARTITION   BY   RANGE  (TRANS_DATE)
    (
       PARTITION     crm_detail_200309  VALUES  LESS THAN 
(TO_DATE (‘09/01/2003’,’mm/dd/yyyy’ ) )
TABLESPACE   crm_detail_200309,
       其他分区.....
     );
6.建立基于分区的索引:
  create  index   index_name  on table_name (分区键+…)
   global                                  --这里是全局分区索引,也可以建本地索引
   PARTITION   BY   RANGE  (TRANS_DATE)
   (
     PARTITION     index_detail_200309  VALUES  LESS THAN 
     (TO_DATE ('09/01/2003','mm/dd/yyyy' )) 
     TABLESPACE   index_detail_200309,
     其他索引分区...
    );
   
对表的分区就这样完成了,第一次主要确定表分区的分区策约是最重要的,可我觉得对表分区难在以后对表分区的治理上面,因为随着数据量的增加,表分区必然存在删除,扩容,增加等。在这些过程中还牵涉到全局等索引,因为对分区表进行ddl操作为破坏全局索引,故全局索引必须在ddl后要重rebuild.

以上写的很乱也很差,希望大家多多谅解和指点。
分享到:
评论

相关推荐

    ORACLE大表分区

    -- 手动运行示例: 自动对800M以上的非分区大表PM_RAW_B_RESTEST进行分区,一天一分区; -- 手动运行示例: SQL> EXEC AGGRE_PM_PARTITIONF('PM_RAW_B_RESTEST',800,1,10,3600,'SUN','DCTIME','0','FALSE','FALSE','...

    Oracle大表分区的技术

    Oracle大表分区是一种高效的数据管理策略,用于处理大型数据集,提高查询性能并简化数据库维护。在Oracle数据库系统中,分区技术允许将一个大表分解为较小、更易管理的部分,每个部分称为一个分区。这样做有多种好处...

    oracle分区表之hash分区表的使用及扩展

    Oracle分区表中的Hash分区是一种基于哈希算法的分区策略,适用于处理无法清晰定义分区范围的大型数据表。这种分区方式通过计算分区键的哈希值来决定数据存储在哪个分区,以此达到数据分散和负载均衡的目的。Hash分区...

    Oracle分区表详解

    Oracle 的分区技术是一种用于管理和优化超大型表和索引的有效手段。通过将一个大型的表或者索引分割成多个较小且可管理的部分,分区技术能够显著提升数据库的性能、可用性和可维护性。 ##### 分区的作用: 1. **...

    Oracle表分区详解(优缺点)

    Oracle 表分区是一种高效的数据管理策略,用于处理大数据量的表,以提升查询性能和数据库的可维护性。本文将详细介绍Oracle表分区的概念、作用、优缺点,以及各种类型的分区和操作方法。 首先,理解表空间和分区表...

    oracle表分区详解

    Oracle数据库中的表分区是一种高级组织技术,它通过将表的大数据集划分为较小的、更易于管理的部分(即分区),从而提高查询性能和可管理性。表分区可以按照不同的策略进行划分,如范围分区、列表分区等。 #### 二...

    oracle数据库表分区实例

    #### 一、Oracle表分区简介 在Oracle数据库中,表分区是一种将大型表物理地划分为多个较小部分的技术。通过合理地利用分区技术,可以显著提高查询性能,简化数据管理任务,并加快数据加载速度。本文档提供了一个...

    oracle数据表分区知识

    - **大表分区**:当表大小超过 2GB 时,考虑对其进行分区。 - **历史数据管理**:对于包含大量历史数据的表,新数据通常被添加到最新的分区中。例如,只有当前月份的数据是可更新的,而其他 11 个月的数据只读。 **...

    oracle普通表转化为分区表的方法

    Oracle数据库中的分区表是一种高级的表组织形式,它将大表分成多个较小的部分,每个部分称为一个分区,以提高查询性能和管理效率。当表的大小超过2GB时,官方推荐使用分区表,因为它们在处理大量数据时具有显著优势...

    利用kettle自动创建oracle表分区

    Oracle表分区是指将一个大型表分割成多个小的独立表,每个小表称为一个分区。通过分区,可以将大型表分割成多个小的独立表,从而提高查询效率和数据管理效率。Oracle表分区可以按照不同的方式进行分区,例如按照日期...

    Oracle 分区表 分区索引

    通过将一个大的表或索引分成多个较小的部分(分区),可以显著提高查询性能,并简化表和索引的管理。 #### 二、何时使用分区 在决定是否对表进行分区时,需要考虑以下几个因素: - **数据量大小**:当表中的数据量...

    ORACLE表自动按月分区步骤

    Oracle数据库提供了丰富的表分区功能,其中按月分区是一种常见的应用场景。本文将以具体的实例——报单表`USER_ORDER`为例,详细介绍如何实现Oracle表的自动按月分区,并创建相应的本地索引。 #### 二、准备工作 在...

    oracle分区表分区索引.docx

    Oracle 分区表分区索引是 Oracle 数据库中的一种重要机制,它可以提高数据的存储和查询效率。下面将详细介绍 Oracle 分区表分区索引的类型、分类、创建方法和维护方式。 一、分区表和分区索引的概念 分区表是指将...

    Oracle表分区 建表空间 创建用户

    ### Oracle表分区、建表空间与用户管理 #### 一、表空间的创建与管理 在Oracle数据库中,**表空间**(Tablespace)是物理存储的逻辑容器,它由一个或多个数据文件组成。创建一个新的表空间对于数据库的管理非常重要...

    Oracle表分区详解

    Oracle数据库中的表分区是数据库管理的一种高级技术,它允许我们将大型表分解成更小、更易管理和查询的部分,从而提高数据存储和检索的效率。在本文中,我们将深入探讨Oracle表分区的各个方面,包括其重要性、类型、...

    Oracle分区表用法

    Oracle分区表是一种高级的数据库管理技术,它将大型表的数据分散存储在不同的物理区域,以提升查询效率和系统的整体性能。本文将详细介绍分区表的概念、作用、优缺点,以及各种类型的分区表及其创建方法。 1. **表...

    oracle自动建立表分区脚本

    在Oracle数据库管理中,表分区是一项重要的优化技术,它能够提高大数据量表的查询性能、管理和维护效率。Oracle DBA(数据库管理员)经常需要对大表进行分区操作,以优化数据库的性能。"Oracle自动建立表分区脚本...

    Oracle 分区表 分区索引 索引分区详解

    虽然存储介质和数据处理技术的发展也很快,但是仍然不能满足用户的需求,为了使用户的大量的数据在读写操作和查询中速度更快,Oracle提供了对表和索引进行分区的技术,以改善大型应用系统的性能。

    Oracle分区表培训

    Oracle分区表是数据库管理系统Oracle中的一个高级特性,用于将大表分成较小、更易管理的部分,从而提高查询性能,优化存储管理和数据维护。在大型企业级应用中,尤其是在处理大量数据时,分区表是不可或缺的技术手段...

Global site tag (gtag.js) - Google Analytics