Oracle Database 12c  In-Memory POC指南_Java


为 Oracle 12c 数据库的 In-Memory 功能做 PoC,其目的在于充分展现 In-Memory 的优势,同时又要尽量少地影响客户环境。今天和大家聊聊做 In-Memory PoC 时应遵循的一些核心步骤。


Oracle Database 12c In-Memory 工作方式:

Oracle Database 12c  In-Memory POC指南_Java_02

为展现 In-Memory 的优势同时尽量少地影响客户环境,做 PoC 时应遵循如下基本步骤:

1)确定数据库 In-Memory的最佳工作负载

应用 In-Memory:分析型工作负载获益相对多,OLTP 型工作负载获益相对少。

 2)应用最新的In-Memory补丁包(Bundle Patch)

  • 最好的着手点是去查看 Note:1937782.1中的最新信息

  • 补丁24448103就是最新的20161018补丁包,记录在 Note: 20879108.8 中


3)内存分配

        SGA_TARGET = SGA_TARGET(baseline) + INMEMORY_SIZE

  不要忽略  Program Global Area (PGA)

 

4)数据库参数设置

  • init.ora参数取缺省值入手

  • 不设置任何下划线参数

  • 参数 INMEMORY_SIZE:为设基线而将其初置为 0,然后再根据所需的对象空间进行设置。 注意:正确设置此值可能需要一个迭代的过程

  • 参数 PARALLEL_DEGREE_POLICY 应该设置为 AUTO。对 RAC 环境说来,这是必需的。

 

5)测试开始前的准备工作

        核实内存分配状况:

  • In-MemoryAdvisor – 确定测试对象已经填入

  • Compressionadvisor – 估算需要添加多少内存

 

查看测试对象的统计信息:

  • 最新的统计信息

  • Histograms

  • ColumnGroups

  • ExtendedStatistics


查看 Constraint定义

查看分区状况

查看索引状况

性能史:

  • 确定AWR正在运行并可用于 troubleshooting AWR还可以用于确认初始化

参数和发现异常情况

 

6)测试方法

第一步:创建基线

  • 在不带IM列存储的情况下运行工作负载

  • Set INMEMORY_SIZE = 0

  • OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES = true

  • 12c环境下捕获工作负载

  • 此步骤将允许在没有数据库 In-Memory12c环境下捕获基线。 这是用来进行比较的值,以验证可以从数据库内存中预期的性能提升。 它还应该真切地反映客户应用当前的性能,如果不能反映客户应用当前的性能,我们就得停下来找原因了。 必须从可接受的基线开始,不然该测试系统就可能有其他问题。

 

第二步:将表放入 In-Memory

  • 分配IM列存储

  • 设置INMEMORY_SIZE参数并重新启动数据库

  • 将需要测试的表放到IM列存储中

  • 验证是否全部对象都已经放入IM列存储中


第三步:在启用了In-Memory  的情况下运行工作负载

  • 运行工作负载

 

第四步:SQL计划基线进化

  • SQL计划基线进化

  • 这将允许优化器使用性能比当前基线执行计划更好的执行计划

  • 此乃具有关键意义的一步!

  • 允许使用最好的执行计划,防止性能下降

  • 使用dbms_spm包的进化(evolve)任务函数

 

第五步:最终工作负载执行

  • 再次运行工作负载

  • 将新旧已用时进行比较

  • 最终结果可以展示最佳的性能

 

 

最终结果:使用In-Memory,分析型查询性能提高 7 – 128 倍!

Oracle Database 12c  In-Memory POC指南_Java_03