分区机制减少管理负担,是因为与在一个大对象上执行操作相比,在小对象上执行同样的操作更为容易,速度更快,而且占用的资源也更少。
假如数据库中有一个10G的索引,如果你需要重建这个索引,而该索引未分区,那就必须将整个10G的索引作为一个工作单元来重建。尽管可以在线重建索引,但是要重建完整的10G B索引,还是需要占用大量的资源。
在线重建索引时,需要至少10GB的空闲存储空间来存放这两套索引,此外你还需要一个临时事物日志表,来记录重建索引期间表上发生的修改。如果将这个索引划分为10个1GB的分区,那就可以一个接一个地单独重建各个索引分区,而且现在所需的空闲存储空间只有原来的10%。此外单个索引分区的重建速度也会更快(可能是原来的10倍),因而需要向新索引合并的事物也会更少。
如果10GB索引的重建在即将完成之时发生了系统或软件故障,那么我们所做的全部努力是不是全部付诸东流了。如果把问题分解,将索引划分为1GB的分区,那么最多只会丢掉重建工作的10%。
分区应用的最后一个重要场景是,有时你可能只需要重建10%的索引,比如只需对最新的数据(活跃数据)进行重组,但是不需要对旧数据(相对静态的数据)重组。
分区的好处它能够增强一些SQL语句(Select,Insert,Update,Delete,Merge)的性能。这些SQL分为两类,一类是修改信息的语句,另一类是读取信息的语句。
并行DML
数据库中的修改数据的语句都能以并行的方式执行。在一个有充足I/O带宽的多CPU主机上,这样的大规模DML操作所带来的速度提升可能会相当显著。
查询性能
在提升只读查询(Select语句)的性能方面,分区会使用下面两种特殊的操作。
分区修剪:处理查询时不考虑某些分区内的数据。
并行操作:并行全表扫描和并行索引区间扫描就是这种操作的例子。
- 分区能降低OLTP系统上的争用,从而增强系统的并发处理能力。我们都知道分区机制会将一个表的数据分散到多个物理分区中去,如果某个未分区的表(也就是某个段)上有着大量争用,那么将单个段打散成多个段也会相应的降低争用。
分区表的方法
- 区间分区
- 散列分区
- 列表分区
- 间隔分区
- 引用分区
- 间隔引用分区
- 虚拟列分区
- 组合分区
- 系统分区