分享
 
 
 

oracle大表分区的一点点心得

王朝oracle·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

最近在做一个客户关系治理系统,项目做的到不是非常成功,可还是学到了不少的知识,由于数据量很大,没有专门的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.

以上写的很乱也很差,希望大家多多谅解和指点。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有