为Oracle 12c 数据库的 In-Memory 功能做 PoC,其目的在于充分展现 In-Memory 的优势,同时又要尽量少地影响客户环境。今天和大家聊聊做 In-Memory PoC 时应遵循的一些核心步骤。
Oracle Database 12c In-Memory 工作方式:
为展现 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-Memory的12c环境下捕获基线。 这是用来进行比较的值,以验证可以从数据库内存中预期的性能提升。 它还应该真切地反映客户应用当前的性能,如果不能反映客户应用当前的性能,我们就得停下来找原因了。 必须从可接受的基线开始,不然该测试系统就可能有其他问题。
第二步:将表放入 In-Memory
•分配IM列存储
•设置INMEMORY_SIZE参数并重新启动数据库
•将需要测试的表放到IM列存储中
•验证是否全部对象都已经放入IM列存储中
第三步:在启用了In-Memory 的情况下运行工作负载
•运行工作负载
第四步:SQL计划基线进化
•SQL计划基线进化
•这将允许优化器使用性能比当前基线执行计划更好的执行计划
•此乃具有关键意义的一步!
•允许使用最好的执行计划,防止性能下降
•使用dbms_spm包的进化(evolve)任务函数
第五步:最终工作负载执行
•再次运行工作负载
•将新旧已用时进行比较
•最终结果可以展示最佳的性能
最终结果:使用In-Memory,分析型查询性能提高 7 – 128 倍!
【文章来源:Oracle官网】