当前位置:  数据库>oracle

Oracle通过分区键值发现性能问题

    来源: 互联网  发布时间:2017-06-09

    本文导语: 在很多应用中如果数据量少有规模,都会有大量的分区表存在,使用比较多的是range partition. 一般的range partition都一时间为键值,或者根据业务绑定的关键id值。 虽然已经做了一些大数据量的数据迁移,但是不管是按照分区抽取...

在很多应用中如果数据量少有规模,都会有大量的分区表存在,使用比较多的是range partition.

一般的range partition都一时间为键值,或者根据业务绑定的关键id值。

虽然已经做了一些大数据量的数据迁移,但是不管是按照分区抽取,还是根据数据条数抽取,发现有一个表比较奇怪,一个100G左右的分区表,80%以上的数据都分布在一个分区里面,而这个大分区表却有180多个分区表。

如下所示,对于表charge,如果分区的大小在200M以内,就标记为1,如果大于200M,则按照200M为单位进行统计,可以看到,如下的分区  P120_C10占用了大量的空间,其他的分区却小的可怜。很明显从业务规划的角度存在一定的问题。


CHARGE                              P120_C100                            1                   
 CHARGE                              P120_C10                            438                   
 CHARGE                              P120_C20                              1                   
 CHARGE                              P120_C30                              1                   
 CHARGE                              P120_C40                              1                   
 CHARGE                              P120_C50                              1                   
 CHARGE                              P120_C60                              1                   
 CHARGE                              P120_C70                              1                   
 CHARGE                              P120_C80                              1                   
 CHARGE                              P120_C90                              1                   
 CHARGE                              P25_C100                              1                   
 CHARGE                              P25_C10                              2                   
 CHARGE                              P25_C20                              1                   
 CHARGE                              P25_C30                              1                   
 CHARGE                              P25_C40                              1                   
 CHARGE                              P25_C50                              1                   
 CHARGE                              P25_C60                              1                   
 CHARGE                              P25_C70                              1                   
 CHARGE                              P25_C80                              1                   
 CHARGE                              P25_C90                              1                   
 CHARGE                              P26_C100                              1                   
 CHARGE                              P26_C10                              1                   
 CHARGE                              P26_C20                              1                   
 CHARGE                              P26_C30                              1                   
 CHARGE                              P26_C40                              1                   
 CHARGE                              P26_C50                              1                   
 CHARGE                              P26_C60                              1                   
 CHARGE                              P26_C70                              1                   
 CHARGE                              P26_C80                              1                   
 CHARGE                              P26_C90                              1                   
 CHARGE                              P27_C100                              1                   
 CHARGE                              P27_C10                              1                   
 CHARGE                              P27_C20                              1                   
 CHARGE                              P27_C30                              1                   
 CHARGE                              P27_C40                              1                   
 CHARGE                              P27_C50                              1 


带着这个疑问,和对应的开发人员进行了沟通,因为这个表已经使用很长时间了,他们想让我们提供一些关键的信息,比如分区的逻辑等,简单抽取了一些信息如下,
 对于最大的分区P120_C10来说,High_value是120,10 直接看也看不出来什么问题。

PARTITION_NAME            HIGH_VALUE      TS_NAME    INI_TRANS LOGGING COMPRESS GLO LAST_ANAL
 ------------------------- --------------- ---------- ---------- ------- -------- --- ---------
 .......
 P41_C90                  41, 90          DATAH01            8 NO      DISABLED YES 15-AUG-14
 P41_C100                  41, 100        DATAH01            8 NO      DISABLED YES 15-AUG-14
P120_C10                  120, 10        DATAH01            8 NO      DISABLED YES 15-AUG-14
 P120_C20                  120, 20        DATAH01            8 NO      DISABLED YES 12-AUG-14
 P120_C30                  120, 30        DATAH01            8 NO      DISABLED YES 12-AUG-14
 P120_C40                  120, 40        DATAH01            8 NO      DISABLED YES 12-AUG-14
 P120_C50                  120, 50        DATAH01            8 NO      DISABLED YES 12-AUG-14
 P120_C60                  120, 60        DATAH01            8 NO      DISABLED YES 12-AUG-14
 P120_C70                  120, 70        DATAH01            8 NO      DISABLED YES 12-AUG-14
 P120_C80                  120, 80        DATAH01            8 NO      DISABLED YES 12-AUG-14
 P120_C90                  120, 90        DATAH01            8 NO      DISABLED YES 12-AUG-14
 P120_C100                120, 100        DATAH01            8 NO      DISABLED YES 12-AUG-14

根据最初的需求,是希望对于键值#1 insert into test values(57,99);

1 row created.

SQL> insert into test values(57,150);

1 row created.

SQL> insert into test values(120,5);

1 row created.

SQL> insert into test values(119,50);

1 row created.

SQL> insert into test values(120,5);

1 row created.

SQL> insert into test values(120,15);

1 row created.

SQL> insert into test values(120,25);

1 row created.

SQL> insert into test values(120,30);

insert into test values(120,30)

            *

ERROR at line 1:

ORA-14400: inserted partition key does not map to any partition

SQL> insert into test values(121,1);

insert into test values(121,1)

            *

ERROR at line 1:

ORA-14400: inserted partition key does not map to any partition

 

SQL> select *from test partition(p120_c10);

PERIOD_KEY CUSTOMER_KEY

---------- ------------

        57          99

        57          150

      120            5

      119          50

      120            5

 

SQL> select *from test partition(p120_c20);

PERIOD_KEY CUSTOMER_KEY

---------- ------------

      120          15

 

SQL> select *from test partition(p120_c30);

PERIOD_KEY CUSTOMER_KEY

---------- ------------

      120          25

 
对于这个问题,只能根据业务的角度进行重新规划来把数据进一步balance了。

浅谈Oracle分区表之范围分区

Oracle分区表迁移

Oracle分区表使用实例

Oracle分区表 (Partition Table) 的创建及管理


    
 
 

您可能感兴趣的文章:

  • 请教安装oracle9i的分区建议,硬盘只有10-15G
  • Oracle数据库中分区功能详解
  • Oracle移动数据文件到新分区步骤分析
  • Oracle 数据表分区的策略
  • Oracle 间隔分区
  • ORACLE 分区表的设计
  • 深入oracle分区索引的详解
  • Oracle学习:分区表和索引
  • Oracle使用hash分区优化分析函数查询
  • 使用Oracle Partition Table对日志表进行分区
  • ORACLE8的分区管理
  • oracle表空间表分区详解及oracle表分区查询使用方法
  • oracle分区表之hash分区表的使用及扩展
  • Oracle数据表分区的策略
  • oracle存储过程创建表分区实例
  • 在Oracle中手工对任务进行分区的方法
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Oracle收购TimesTen 提高数据库软件性能
  • 关于提高Oracle数据库性能的四个错误认识
  • 用Oracle动态性能视图采集查询调优数
  • Oracle性能究极优化 上第1/2页
  • 用PHP连mysql比oracle数据库性能好
  • Oracle性能究极优化 下
  • 保持Oracle数据优良性能的技巧分享
  • 100分寻求最优化的连接oracle的java程序,请给我讲出理由,我是初学者,在做项目时不想让连接oracle影响我的程序性能
  • Oracle数据库应用程序性能优化探究
  • oracle 使用递归的性能提示测试对比
  • 善用Oracle表空间设计提升数据库性能
  • Oracle性能究极优化
  • Oracle性能究极优化 下 iis7站长之家
  • Oracle SQL性能优化系列学习三
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 哪位大哥奉献一段调试通过的oracle中存取图片的例子oracle8.1.7,resin-2.1.6
  • 怎么直接通过JDBC连接oracle?
  • windows通过TCP/IP怎么连接到solaris上的oracle?
  • 急。。。在servlet如何连接到oracle(不通过odbc)
  • linux下通过对文件读取方式查询oracle的版本信息
  • linux能够通过执行脚本添加oracle数据库的用户吗
  • 如何在UNIX上通过ODBC操纵Oracle等DBMS???
  • Window客户端通过ADO是否能够连接和操作Unix平台下的Oracle数据库?
  • 可否直接通过JDBC 连上Oracle(我并没有装oracle)
  • 通过win2000在linux上安装oracle,需要一个什么工具?在哪有下?
  • windows下通过ie访问不到linux环境下的oracle em
  • Linux/UNIX下,C++程序通过那些步骤访问Oracle或者Sybase SQL数据库?
  • 通过Oracle发送Email的实现方法
  • unix通过crontab 定时启动oracle应用程序??????????
  • 通过进程id号知道一个Oracle会话所占用的内存
  • oracle通过行范围查询取4至10行
  • apache通过php的oci函数读取Oracle(字符集ZHS16GBK)时,显示乱码,如何解决?
  • 通过一晚上.在2000上装了REDHAT9.再装ORACLE9I
  • 我准备装linux 7.3,大家能给点意见吗,我1GB的内存,那么交换区设多大? oracle9i能在7.3上通过吗?
  • 通过libsqlora8-2.2.10--c语言程序连接oracle数据库,需要连接,查询,修改等,急!!!
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,