您现在的位置是:首页>博客详情

Oracle千万级表分区实战(1)问题及需要处理流程

FreshMan2020年03月17日 15:42oracle,分表 分区 local index515

简介Oracle千万级表分区实战,该系列文章将详细讲述一个实际的问题的解决过程,并将讲述在解决该问题中需要积累的知识和注意事项。有目的的学习总是最快的。将分为以下几步:1、问题及需要处理流程;2、基本知识积累;3、解决问题

Oracle千万级表分区实战(1)问题及需要处理流程

       最近在开发中发现一个问题,有一张表的数据足足有3000万,而且没有做分区。数据量的激增造成了严重的问题,那就是在查询的时候会非常的慢,在写入时常常是处理超时,急需要进行优化。但是由于种种原因一直没有人处理,就只有我来开始弄了,我也是个小白,只有一点点的抠了。

        分析下问题点:

        1、数据量太大,在单表中;

        2、数据表存在大量的索引;

        3、数据中存在部分需要删除的数据,可以进行清理无效的数据;

        4、系统中使用SQL查询时常常是使用select * from xxx;

        5、应用系统错综复杂,很难修改在代码上进行修改;

        根据打听和经验,针对以上问题需要处理的点有:

        1、数据表分区,提升查询速度;

        2、针对原有的索引,应该处理对应索引在分区表中的关系,比如新建分区索引,全局索引,或者酌情取消索引(可能性不大,毕竟没有监控哪些索引使用比较多);

        3、对原有数据需要进行清理,将清理之后的数据放入新的分区之中;

        4、由于应用系统复杂,应该在对数据表进行分区后不影响原有的SQL语句的执行;

        5、由于查询的时候多用于select * ,在分区的时候只能采用横向分区;

        6、在分区的时候应该掌握哪些字段不容易改变,哪些字段多用于集体的查询,这是由于容易修改的字段可能会引起数据的跨区变动,只有找到不易变动的字段用作分区键;

        7、最后,将原有数据进行迁移。


        根据以上的分析,需要解决的分部问题:

        第一步:分表

        如果你是表中存储了很多年的数据,会造成严重的数据冗余。那么可以采用按年,按月分表,数据存储到对应的年表,月表中,这样必然后减少很多的数据量。

        第二步:分区

        分表完成后,比如按照年分表,但是表中的数据仍然很大,查询速度虽然有所提升,但是还不能达到理想的状态。便考虑分区,即可以将你的数据以不同的月份分区查询。

        水平分区:就是对行进行分区,举个例子说,一个表中有1000万条数据,每100万条数据划分一个分区,这样就将表中的数据分到10个分区中去。水平分区要通过某个特定的属性列进行分区。

        垂直分区:通过对标垂直划分来减少表的宽度,从而提升查询效率。比如一个学生表中,有他相关的信息列,还有论文列以CLOB存储。这些CLOB存储的论文并不会经常被访问到,这实话就要把这些不经常用的CLOB划分到另一个分区,需要访问时再调用它。

        种的来说,分区的主要目的还是避免全表扫描,从而提升查询速度。

        第三步:索引的处理

        原表的索引有的需要加上,有的不需要,这需要根据分表分区后根据查询的情况来看,不过,对于几千万的大表来说,加索引是必然的。加到哪些字段上,是建立全局索引,还是局部索引都需要进一步的讨论实现。

        第四步:迁移数据

        下一篇,我们就将涉及这几步涉及的基本知识做一些具体的学习,了解。