分区基本概念
- 分区提供了一种在多个段中存储大型数据库结构(表、索引、物化视图甚至定义为表列的二进制或字符对象)的机制。
- 对绝大多数SQL,与访问非分区的表相比,没有必要转变为访问分区表。
- 如果基于应用程序的访问需求,分区模式进行合理的设计,其结果将是应用程序具有更理想的性能和扩展性。
- DBA和开发人员需要共同确定分区模式。
简单来说就是“分而治之”。
- 当行进入数据库或者当对行进行修改时,根据行在指定为分区键的列中的值,每个行分配至不同的分区。
- SQL查询需要根据位于分区键的值查找记录时,Oracle知道应该搜索那个分区。
- 大数据对象 (表, 索引)被分成小物理段
- 分区字段值可以修改。(row movement enabled)
- 分区可以存储在不同的表空间
- 分区可以有不同的物理存储参数
分区方法
- 范围
- Hash
- 列表
- 组合
范围分区特点:
-最早、最经典的分区算法
-Range分区通过对分区字段值的范围进行分区
-Range分区特别适合于按时间周期进行数据的存储。日、周、月、年等。
-数据管理能力强
- 数据迁移
- 数据备份
- 数据交换
-范围分区的数据可能不均匀
-范围分区与记录值相关,实施难度和可维护性相对较差
Hash分区特点:
- 基于分区字段的HASH值,自动将记录插入到指定分区。
- 分区数一般是2的幂
- 易于实施
- 总体性能最佳
- 适合于静态数据
- HASH分区适合于数据的均匀存储
- 数据管理能力弱
- HASH分区对数据值无法控制,哈希算法Oracle确定
列表分区特点:
- List分区通过对分区字段的离散值进行分区。
- List分区是不排序的,而且分区之间没有关联关系
- List分区适合于对数据离散值进行控制。
- List分区只支持单个字段。
- List分区具有与范围分区相似的优缺点(数据管理能力强、实施和可维护性相对较差、数据可能不均匀)
复合分区特点:
- Oracle支持的Composite分区:Range-Hash, Range-List
- 既适合于历史数据,又适合于数据均匀分布
- 与范围分区一样提供高可用性和管理性
- 实现粒度更细的操作
序列
很多应用程序都有这样的需求:既为类似订单数之类的对象生成唯一的键值。
常见做法是:
创建一个包含一个数值的列和行的表。每当需要一个新值时,应用程序会将该值递增1,然后将该值写回数据库。
在oracle中提供了一种新的对象,在不需要串行化所有事务的条件下,该对象可实现同样的功能。
-序列给内存提供唯一的整数,事务不需锁定,直接从内存获取该唯一的整数。
特点:
- 数百或数千个事务可以在互不干扰的情况下同时请求。只有当保存所生成数字的调整缓冲区需要刷新时,才需要等待。
- 如果刷新过于频繁,则用alter sequence增加该缓冲的大小。
- 其不足是:尽管要确保这些数字是唯一的,但并不要求它们是连续的。一旦访问该序列,则100个值缓存至内存。如果此时数据库实例重启,则这些数字会丢失,而且会为重启的数据库实例生成接下来的100个数字。