OA科学运用表分区

发布于:2019-12-26 15:25:30

科学运用表分区
数据库大表优化
数据库大表的优化:采用蔟表(clustered tables)及蔟索引(Clustered Index)。
蔟表和蔟索引是oracle所提供的一种技术,其基本思想是将几张具有相同数据项、并且经常性一起使用的表通过共享数据块(data block)的模式存放在一起。各表间的共同字段作为蔟键值(cluster key),数据库在访问数据时,首先找到蔟键值,以此同时获得若干张表的相关数据。蔟表所能带来的好处是可以减少I/O和减少存储空间,其中我更看重前者。采用表分区(partition) 
表分区技术是在超大型数据库(VLDB)中将大表及其索引通过分区(patition)的形式分割为若干较小、可管理的小块,并且每一分区可进一步划分为更小的子分区(sub partition)。而这种分区对于应用来说是透明的。通过对表进行分区,可以获得以下的好处: 
减少数据损坏的可能性。 
各分区可以独立备份和恢复,增强了数据库的可管理性。 
可以控制分区在硬盘上的分布,以均衡IO,改善了数据库的性能。 
蔟表与表分区技术的侧重点各有不同,前者侧重于改进关联表间查询的效率,而表分区侧重于大表的可管理性及局部查询的性能。而这两项对于我的系统来说都是极为重要。由于本人技术限制,目前尚不确定两者是否可以同时实现,有那位在这方面有经验的给点指导将不胜感激。
在两者无法同时实现的情况下,应依照需实现的功能有所取舍。综合两种模式的优缺点,我认为采用表分区技术较为适用于我们的应用。
表分区类型
范围分区:将表按某一字段或若干个字段的取值范围分区。
hash分区:将表按某一字段的值均匀地分布到若干个指定的分区。
复合分区:结合了前面两种分区类型的优点,首先通过值范围将表进行分区,然后以hash模式将数据进一步均匀分配至物理存储位置。
分区键的选择
分区键的选择:让查询很快定位,但尽量避免数据库操作集中;使海量数据表拆分成“小表”,并使数据库操作平均分散到表分区中。
分区在单节点数据库上,提高查询定位的速度,不提供查询并行性。
表分区功能优化
分区技术可以改进大型数据库的管理。很多关系新数据库新增了表分区功能,因此对一些大表,我们在关系型数据库中不再需要分拆成小表,再用UNION ALL视图的方式进行设计,而是直接用分区表实现一些这些功能。表分区功能是一种数据组织方案,即,表数据根据一个或多个表列中的值分布到多个存储对象(称为数据分区或范围)中。每个数据分区都是单独存储的。这些存储对象可以在不同的表空间中,也可以在相同表空间中。
很多业务数据的查询包含时间条件,所以时间经常作为分区条件。业务数据在时间上的分布通常是平均的,所以用时间分区的另一个好处是使包含大型数据的表分成大小相当的几个分区,用户还可以针对数据量来制定分区,以控制每个分区的数据量在一个可以接受的范围内。
但是按照时间分区也有弊端。一个业务系统,按时间按分区,当前时间下的分区插入、删除、更新或查询的操作必定比别的分区多。这种集中的操作必定给数据库带来巨大的压力。我们尽量在个个环节中找到最佳平衡点。
分区键的选择:让查询很快定位,但尽量避免数据库操作集中;使海量数据表拆分成小表,并使数据库操作平均分散到表分区中。
对于分区,我们进行了一些列测试,下面就是我们测试的结论。分区在单节点数据库上,提高查询定位的速度,不提供查询并行性。以一年的数据量,月分区为例。首先,考虑查询条件中有分区字段时的情况。当查询条件在一个月内时,DBMS可以直接定位到某个分区,在不考虑其他条件时,查询速度是不分区表的12倍。依此类推,当查询条件跨N(N<=12)个月时,查询速度是不分区表的12/N倍。如果,查询条件中没有分区字段时,分区和不分区查询效率相当。
优化器需要知道索引的相关信息,来判断查询执行的“路径”,运行统计可以告诉优化器。经验:当表中数据量变化达到10%时,需要重新运行统计。
在许多次的更新之后,表会成为碎片状,这导致性能严重下降。若收集了统计信息,但看不出有明显的性能改进,则重组表数据可能会有帮助。重组表数据时,根据指定的索引重新安排数据的物理顺序,并除去碎片数据中的空闲空间。这使该数据可以更快速的被存取,从而改进性能。

上一篇:oa影响系统性能的关键点
下一篇:OA流程审批