许多用户希望OLTP 系统和DSS系统放在同一台机器上使用同一个实例。这是可以理解的,因为将数据从
OLTP 系统拷贝到 DSS
系统可能会影响数据的准确性。但是,如果希望将这两个系统放在一起,使它们两全地保持良好的状态,是非常难以做到的,因为这两个应用会竟争使用资源,它们的目标是矛盾的。
Oracle
强烈建议将这两个应用分开,在需要时从OLTP系统向
DSS系统传送数据。
OLTP 与DSS混合系统存在以下问题:
- OLTP 系统的特征是用索引搜索,而 DSS
系统的特征是大量的全表扫描。
- OLTP 系统需要比 DSS系统更多的索引,而且需要的索引类型也不一样。OLTP
需要B-tree 索引和反转键索引,而 DSS需要bitmap
索引和组织索引表。
- OLTP 系统需要多个小尺寸的回退段,而 DSS
系统需要少量的大尺寸的回退段。
- OLTP 不应使用并行查询,而DSS系统需要。
- DSS 系统需要数据紧密存储,从而 PCTFREE
的值应为 0,而 OLTP 系统的 PCTFREE 值决不能是0,否则会产生大量的行迁移和行链。
- OLTP 应当使用共享的代码和捆绑变量,而 DSS
应当使用实际文本(literal variable)和提示。当查询不使用捆绑变量时,基于成本的优化器使用直方图统计来优化。OLTP
应用应当使用捆绑变量,因为对 OLTP
来说,直方图统计数据收集是浪费时间和资源,而
DSS 应用则不然。
对于一定要使用混合应用的系统,应当遵从如下的建议:
1. 在 OLTP 应用的低峰运行大的 DSS
应用,例如周末和夜间等时间。
2. 多线索服务器适合于 OLTP 应用,不适合于 DSS应用。
3. 应当为不同的应用配置不同的回退段。
- 为OLTP 系统配置多个小尺寸的回退段,在切换到
DSS 应用时将其脱机。
- 为DSS
系统配置少量的大尺寸的回退段,在切换到 OLTP应用时将其脱机。
4. 用两套初始化参数文件。一套针对 OLTP
应用,另一套针对 DSS应用,而且应当在这两种应用切换时重新关闭和启动系统,以便使新的参数文件生效。
- 在使用 OLTP 应用时,以下参数需要更高的值:SHARED_POOL_SIZE、LARGE_POOL_SIZE、DB_BLOCK_BUFFERS、以及SORT_AREA_SIZE。
- 在使用 OLTP 应用时,应当将 PARALLEL_MIN_SERVERS 和
PARALLEL_MAX_SERVERS 设为 0 以防止并行处理。
5. 多套profile文件。在使用 OLTP
应用时,应当限制大表的全表扫描。这可以设置
profile 来限制LOGICAL_READS_PER_CALL 或 CPU_PER_CALL,并将这些
profile 赋给用户。在使用 OLTP
应用时,应当将这些值设回恰当的数。
|