SHOUG成员 – ORACLE ACS高级顾问罗敏
本章首先将以自己一个与11g相关的尴尬经历开始,然后对11g新技术和新特性进行一番总体介绍,再围绕一个具体技术话题,讲述11g新技术使用策略的重要性,最后针对11g新技术/新功能的总体使用策略提供自己的具体建议,希望这些内容对广大读者在11g平台的设计、开发和运维等方面工作有所裨意。
5.1 我被客户“打懵”了
故做镇定
2012年2月的某一天,应某国有大型银行的要求,来到了该银行的南方开发基地,为其正在进行的11g升级项目提供技术支持和咨询服务工作。那天上午一踏入会议室,与该行一群新老朋友简短地寒暄之后,便很快进入了正题:
“罗工,你先帮我们梳理一下这张表格,11g这些新特性到底用还是不用?”
我快速扫描了一下大屏幕上投影的表格,以下是片断内容:
维护项 | 11g对应的功能点 | 是否使用 | 使用说明 |
数据库及补丁安装 | 联机热补丁 | 待确认 | 1、HOT PATCH是否只能联机安装,2、联机安装时对数据库的影响,3、通过OPATCH命令查询补丁是否为HOT PATCH,4、目前同业中HOT PATCH的使用情况 |
Time Stamp With Time Zone数据的自动补丁安装* | 待确认 | 确认该新特性功能 | |
零停机时间的Clusterware补丁安装* | 推荐使用 | 工程师确认联机安装对RAC的影响 | |
故障管理 | 自动诊断信息库框架 | 必须使用 | 日常维护中要熟悉文件存放结构 |
命令行故障管理工具adrci | 推荐使用 | 日志信息诊断扩展功能 | |
支持工作台 | 不使用 | 由于需要配置外网连接,故部分功能不可用 | |
健康监控工具Health Monitor | 待确认 | 手动启用或者在严重错误时自动触发,在严重故障时运行该功能对数据库的影响需评估,AB类关闭,CD类开启, | |
意外事件打包服务IPS | 推荐使用 | 相关日志打包提供给ORACLE技术支持 | |
数据恢复向导Data Recovery Advisor | 推荐使用 | 手工触发,提供辅助诊断功能 | |
SQL测试用例构造器SQL Test Case Builder | 推荐使用 | 手工触发, | |
SQL修复指导SQL Repair Advisor | 推荐使用 | 手工触发,用于处理执行失败的SQL语句 | |
检测数据损坏控制参数DB_ULTRA_SAFE | 不使用 | DB_ULTRA_SAFE=OFF(默认值),同时显式设置DB_BLOCK_CHECKING=FULL、DB_BLOCK_CHECKSUM=FULL和DB_LOST_WRITE_PROTECT=TYPICAL三个参数 | |
内存管理 | 自动内存管理 | 不使用 | memory_target不使用,memory_target主要调整sga和pga相互间的大小。若启用sga_target,必须设置各个内存区域的最小值 |
Database Smart Flash Cache* | 不使用 | 仅适用于EXADATA | |
… | … | … | … |
这都什么东西啊?我的妈呀,表格里好多新特性我听都没听说过。尽管开发基地位于气候宜人的南海之滨,但分明感觉到后背一股凉气袭人。好歹在IT行业也混了20余年,在Oracle公司也有10多年了,更是奔五的人了,可不能在客户面前表现地惊慌失措。经验告诉我,首先应该故做镇定,先在表格里挑我熟悉的一些新特性进行一番研讨,并通过不断的交流,了解客户的项目背景和进展情况,再寻找合适的对策。知己知彼,百战不殆啊。
尽管如此,后来精明的客户还是发现老罗同志一上来就被他们“打懵”了,呵呵。
经验之谈:引导客户
原来,该行在11g升级项目中,为充分考虑11g新特性如何使用,特别成立了一个由开发、测试、运维等多个部门7、8位技术专家组成的项目组,专题开展11g新特性研究工作。当时已经进行了2、3个月的工作,并写出了厚厚的200多页的《Oracle 11g与10g功能差异分析》研究报告,给我看的表格只是该报告的汇总版。我的天哪,你们这么多人都研究了那么长时间,虽然我是原厂技术人员,但以我个人的时间、精力,研究的深度和广度,绝对无法和他们一个团队相提并论。
如果我一直这么按客户的思路走下去,我不仅很快会被各种技术细节困住,而且也无法发挥我作为原厂商技术人员的真正作用和优势,更对整个项目不利。于是经验又告诉我,在初步了解客户情况,特别是发现相关问题之后,应尽快提出自己的技术思路,去引导客户。
于是,我很快发现客户项目组工作的局限:他们太过于注重细节了,对11g新技术/新特性使用总体策略研究并不够。另外,他们虽然研究很系统、很全面,但更多的是研究文档,其实缺乏实际的11g使用经验。例如,他们只研究11g相关新技术/新特性是否应该使用,而并不知道在11g实际运行过程中,很多新特性是缺省打开的。也就是说,不管你决定用不用,Oracle都是强制你使用某些新特性。殊不知,这就是问题和风险。作为原厂技术人员,我们吃过太多这样的苦头。
接下来,轮到我讲述自己的观点了:“我们先别着急每个细节的讨论,先研究一下11g新技术、新特性使用的总体策略吧。”同时,我马上根据自己在11g的实施经验,给客户提出这样的具体建议:“我们应该在表格上增加两列,一列表示该新特性是否是缺省打开的,另一列是该新特性的关闭方法。”—- 这些内容正是本章要讲述的重要内容。
这就是本人从事Oracle服务工作10余年的经验总结:不要完全被客户牵着走。我们是为客户服务的,尽管在某些技术细节上我们可能不如客户,但我们应该具有更高的视野,更应该将不同行业的案例经验及时与其他客户分享。否则,不仅我们工作上会陷入细节上的被动,更无从发挥自身优势,也最终导致客户项目实施质量大打折扣。
更多的感慨
那天中饭之后,与销售经理同事在风光旖旎的开发基地园区散步,也一同感慨上午的研讨情况。首先感慨的是客户的工作成果不仅让我个人,更让我们Oracle服务部门感到汗颜。11g新特性专题研究工作,本来应该是我们Oracle服务部门展开的工作,并为客户提供相关服务,现在却让客户抢在前面。事实上,当我们后来回到北京,与相关实施团队介绍交流情况时,也的确让他们感到震撼了一把。
其次,感慨的是该银行IT系统建设能力和科研队伍的强大,的确是我们在国内见识过的首屈一指的客户了。该行的IT系统建设不仅指导思想上以自我为主,而且确实锻炼成长了一大批充满锐气的年轻科技人员。上述项目组的7、8个人基本都是80后的,充满朝气和活力,而国内很多客户则缺乏这种强烈的进取和钻研精神。例如,我参与、了解过国内不同行业众多11g升级项目,但只有该银行对11g新特性在进行这么有组织、系统而全面的研究工作。
还想起该行一位部门领导对我们的一席话:你们原厂商不要埋怨我们对你们提出的很多富有挑战、甚至有点苛刻的服务需求,因为这些需求都是来自于我们实际工作的问题,而且正是这些需求,迫使你们自己能力也得到提高了。—– 的确是这样,作为服务人员,应善待、包容客户提出的每个需求。
“向客户学习、与客户共成长”,永远是一句不过时的口号。
5.2 11g 新技术/新特性一瞥
11g以其网格集群计算、自动和智能化管理、更好的高可用性和可伸缩性等理念和技术,引领着数据库产业高速向前发展。11g更是为解决IT系统所存在的相关问题,提供了大量新技术和新特性。以下先从总体上对11g若干新特性进行简要介绍,本书其它章节还将就相关技术专题进行深入讨论。
上图外围一圈可代表IT系统的相关需求或技术专题,而内圈则代表11g相关技术和特性。例如:
- 高可用性(High Availability)
长期以来,Oracle一直在高可用性技术方面处于领先地位。例如为防范各种意外故障和计划内的停机而提供了多种解决方案,如RAC、Data Guard等技术。
到了11g,Oracle继续在高可用性领域不断发展。例如,Data Guard在11g中得到了很多方面的增强,特别是Active Data Guard能够在物理备库模式下,在日志应用的同时,可以只读方式打开容灾库。这样Active Data Guard不仅具备常规意义上的容灾功能,而且可以提供查询、报表和物理备份等负载分离功能,从而有效降低主业务系统压力和风险,并提高容灾系统的投资回报率。
- 网格计算和交易系统领域(Grid & OLTP)
该领域的典型技术包括Oracle 11g集群数据库RAC技术。在11g中为适应网格计算和云计算发展需求,RAC增强了很多新技术,例如:RAC中Service技术的增强、基于策略的RAC管理技术(Policy-managed Oracle RAC)、网格即插即用技术(Grid Plug and Play)、实例隔离(Instance Caging)技术等。
另外该领域也包括内存数据库的增强技术(TimesTen In-Memory Database)等。
- 海量数据管理和信息生命周期管理(VLDB & ILM)
该领域的典型技术包括分区技术的增强和新的压缩技术。在分区方面,11g增加了间隔分区、系统分区、引用分区、虚拟列分区,以及多种组合分区等。Oracle自1996年的8版就开始提供分区技术,但到了11g又提供那么多新功能,可以说是老树发新芽,将分区技术又推向一个新的高峰,为我们开展VLDB数据库设计和开发打下一个非常良好的技术基础。
11g在原有压缩技术基础上,提供了针对OLTP应用的大并发量随机DML操作的压缩技术,以及针对Exadata的混合列压缩技术,大大拓展了压缩技术的应用场景和空间。本书后面将专题介绍11g压缩技术。
- 数据仓库和商务智能领域(DW & BI)
为用户提供简单集成、强大的数据仓库和商务智能,满足各种数据分析需求,是Oracle公司多年来一直努力追求的目标。例如,11g集成了ETL工具(Oracle Warehouse Builder)并提供多种ETL内置功能,提供了适合数据仓库的自动并行处理功能,统计分析语句和函数也得到了进一步增强,上述各种新的分区技术等。
- 安全性(Security)
在11g中,数据安全性得到了进一步的增强。例如,针对数据库访问权限控制的Database Vault得到了进一步增强,通过范围域(Realm)划分、要素(Factors)、命令规则(Command Rules)等设计,可以有效加强数据库访问权限控制。
11g中的集中审计产品Audit Vault也得到了显著增强。通过该产品的部署,可以实现一点对多套数据库的集中审计和智能分析,有效保障了审计信息的安全性,提高了审计部署的效率,也加深了审计信息分析层次。
另外,为满足企业长久甚至永久保持和利用历史记录的目的,11g提供了基于新的Flashback Data Archive(FDA)技术的Total Recall产品,通过该产品,企业可加强对历史数据的安全审计,并进行市场和客户行为分析,从而全面提升自身竞争力。本书后面也将专题介绍基于FDA的Total Recall技术。
- 可管理性和变更管理(Management & Change)
易管理性是Oracle自10g开始发展的一个重要方面。10g/11g将先进的、自动管理特性直接内嵌在数据库内部,并通过完全基于Web风格的GUI图形界面方式以及大量实用工具,为数据库管理的高质量提供了良好的使用环境。例如,Oracle 10g/11g提供了大量A打头的内嵌的、自动化的智能管理产品和特性:自动存储管理(Automatic Storage Management)、自动内存管理(Automatic Memory Management)、优化器统计信息自动采集功能(Automatic Optimizer Statistics Collection)、SQL语句自动优化功能(Automatic SQL Tuning)…
变更管理是11g一个全新的领域。11g的Real Application Testing(RAT)通过捕获实际的生产数据库工作负载,并在变更的测试环境中重演。RAT能够分析和报告所发现的任何差异,例如性能改善或退化、数据差异和错误。与仿真测试软件截然不同的是,RAT不必开发仿真工作负载或脚本,RAT可以提高测试效率和测试真实性,为变更管理提供了良好的技术手段。
换几个角度的一瞥
以下我们再换几个角度对Oracle 11g相关产品特别是新技术进行一番俯瞰。
- 产品布局角度
以下就是11g相关产品的总体布局:
其中RAC和Cluster集群技术作为整个生产环境的数据库核心技术,将为客户IT系统带来高可用性、高性能、可扩展性等功能。
数据库的ASM存储管理技术不仅为海量数据处理带来了更好的性能和可管理性,而且也是未来Oracle数据库存储技术的事实上标准和发展方向。
SecurefFiles作为新一代的大对象(LOB)处理技术,将比传统LOB技术处理更简化,也将带来压缩、去重、加密等新功能。
XML作为统一的数据模型语言,Oracle公司的支持一直不遗余力,例如,Oracle 10g就成为了第一个支持XML Query标准的商业化产品。
数据库高级压缩(Advanced Compression)技术给客户带来的不仅是存储资源开销的下降,而且也将带来性能的提升。
作为数据屏蔽技术产品,Data Masking不仅能为客户关键和敏感业务数据进行漂白,供开发测试之用,而且对应用透明,确保数据之间依赖关系。
Total Recall和Flashback技术为防范各种人为错误和历史数据安全审计提供了良好的技术手段。
Data Guard,特别是Active Data Guard不仅为Oracle数据库提供了健壮、经济的容灾技术,而且为容灾库的利用提供了技术基础。
而作为Oracle集中运行维护管理平台产品,Grid Control在11g中无论在功能,还是在产品的集成性和易用性方面,都有显著提升。
- 客户回报角度
以下就是从几个客户回报角度俯瞰的Oracle 11g相关产品和技术:
首先,在节省软硬件和人工成本方面,高级压缩(Advanced Compression)、ASM、RAT、EM等技术在数据库存储、测试和运行维护等方面都将起到重要作用。
其次,从性能角度看,高级压缩(Advanced Compression)、ASM、Flash Cache、ADDM for RAC、自动并行处理(Automated Degree of Parallism)、新的分区技术等,为11g应用的高性能提供了广阔的技术运用空间。
再者,在提高业务连续性方面,Active Data Guard、ASM、Total Recall等产品和技术也是作用显著。
最后,从简化管理、提高生产率方面,RAT、ADDM for RAC以及更全面的智能工具的使用,也是测试、故障诊断和性能优化等方面的重要手段。
一个纠结的话题
为深入讨论11g相关技术和使用策略,我们先讨论一个纠结的话题:绑定变量的使用,并讨论这个话题在11g的最新技术进展。通过这个话题的讨论,来作为制定11g新技术实施总体策略进行铺垫。
影响性能的一个重要问题
所谓绑定变量的使用,或者说语句共享性问题,是指在应用开发过程中,SQL语句的条件编写方式。例如:
SELECT * FROM aueic.T_REAL_TIME_POWER rtp WHERE rtp.id=90102601 AND rtp.d_date >= to_date('20111205','yyyymmdd') ORDER BY rtp.d_date DESC SELECT * FROM aueic.T_REAL_TIME_POWER rtp WHERE rtp.id=90102657 AND rtp.d_date >= to_date('20111205','yyyymmdd') ORDER BY rtp.d_date DESC … …
上述两个语句除了条件不同(rtp.id和rtp.d_date字段条件值不同),其实语句是相同的。但Oracle优化器在执行时,认为是两条不同的语句,不得不进行所谓的硬解析(Hard Parse),也就是进行一次完整的解析操作,消耗了大量CPU和shared pool内存资源。这也是导致系统应用性能差,特别是联机交易系统性能差的一个重要原因。
按下葫芦起了瓢
解决上述问题的主要办法有如下两种:
- 应用级绑定变量的使用:即将SQL语句中的条件值修改为变量。
- 系统级绑定变量的使用:即通过设置CURSOR_SHARING参数为SIMILAR/FORCE,由Oracle强制将常量条件修改为系统绑定变量,例如:SYS_B0,SYS_B1等。
上述两种策略都可显著降低系统硬解析次数,从而有效降低Oracle在语句解析过程中对CPU和内存的开销。但是新的问题出来了:针对使用绑定变量的语句,Oracle将产生相同的执行计划,而有些SQL语句需要根据绑定变量的不同值产生不同的最优执行计划。例如:
SELECT * FROM jobs WHERE min_salary > 12000;
SELECT * FROM jobs WHERE min_salary > 18000;
SELECT * FROM jobs WHERE min_salary > 7500;
假设min_salary > 18000的记录很少,而min_salary > 12000和min_salary > 7500的记录很多,则上述第1条和第3条语句的最优执行计划应该是全表扫描,而第2条语句的最优执行计划应该是按索引访问。但是,如果使用了如下方式的绑定变量:
SELECT * FROM jobs WHERE min_salary > :min_sal;
则Oracle将采用相同的执行计划,无论是全表扫描还是按索引访问,显然对某些变量值的执行路径不是最优的。
大家知道,一个SQL语句的执行过程通常分为Parse->Bind->Excute->Fetch等阶段,每个阶段都应该考虑优化。使用绑定变量,是为了提高语句共享性,降低语句Parse的次数。而执行计划的最优化是提高语句Execute效率。现在,二者遇到了冲突和矛盾,真纠结啊!
另外,Oracle自9i开始提供了绑定变量窥视功能(Bind Peeking),但该功能只是偷看了绑定变量的第一个真实值来辅助优化器产生执行计划,以后针对不同变量值,均采用相同的执行路径。显然,该功能并不能解决上述纠结的问题。
11g的自适应游标共享功能
11g出来了,很快发现有了个所谓的自适应游标共享功能(Adaptive Cursor Sharing)功能,能有效解决上述问题。例如,针对上述绑定变量语句,Oracle 11g通过该功能,可以为第1条和第3条语句产生全表扫描的执行计划,为第2条语句产生按索引访问的执行计划。太牛了!
下图就是其工作流程示意图:
- 语句在第一次执行时,按正常情况进行硬解析,并且将两个条件的可选性值域(15,0.0025)记录在该语句的游标之中。
- 语句在第二次执行时,分析两个条件的可选性值域(18,0.003),依然位于现有的可选性值域(0.15,0.0025)之中,因此继续采用现有的执行计划。
- 语句在第三次执行时,分析两个条件的可选性值域(3,0.009),已经不在现有的可选性值域(0.18,0.003)之中了,因此Oracle重新进行硬解析,产生新的更优化的执行计划了。
- 语句在第四次执行时,分析两个条件的可选性值域(28,0.004),又不在现有的任何一个可选性值域了,因此Oracle又重新进行硬解析并产生新的执行计划。假设这次产生的执行计划与第一次相同,于是Oracle将本次可选性值域与第一次可选性值域进行合并(Merge)操作,形成更大的可选性值域。
用户可通过V$SQL、V$SQL_CS_HISTOGRAM、V$SQL_CS_SELECTIVITY、V$SQL_CS_STATISTICS等新老视图去监控该功能的使用情况。
如何谨慎使用自适应游标共享功能?
11g自适应游标共享功能(Adaptive Cursor Sharing),似乎非常美妙,但你敢不假思索就用吗?
首先,就象任何新生事物都比较稚嫩一样,11g自适应游标共享功能同样存在这样那样的Bug。例如,以下就是Oracle在11.2.0.3中修复的与Adaptive Cursor Sharing相关的Bug:
9532657 | Adaptive cursor sharing ignores SELECTs which are not fully fetched |
10182051 | Extended cursor sharing generates many shareable child cursors |
11657468 | Excessive mutex waits with adaptive cursor sharing |
进一步分析Bug 11657468,我们知道受该Bug影响的版本包括11.2.0.2、11.1.0.7,该Bug最终将在11.2.0.3和未来的12.1中被修复。
其次,我们再深入分析一下自己的应用,假设我们的应用语句的绑定变量值不存在畸形变化的情况,也就是说可选性值域比较固定,例如账号、手机号等字段的可选性比较高,Oracle有必要象上述原理图一样,为每个变量值都进行可选性值域的计算吗?这不反而增加了系统负担吗?
总之,是否该使用绑定变量,还是最了解应用和数据的开发人员最有发言权,Oracle你就别费心了。
Oracle也太自信了,居然将该功能设置为自动打开的,而且一般用户无法通过公开参数去关闭。如何关闭?需要设置如下隐含参数:
_optimizer_adaptive_cursor_sharing = false
_optimizer_extended_cursor_sharing_rel = “none”
11g还有多少这样缺省打开但可能存在风险的新特性?如何酌情关闭?如何合理运用11g新特性?这就是后面要继续展开的内容了。
11g新技术实施总体策略
如前所述,Oracle 11g的新技术和新特性林林总总不下好几百。在上述银行客户系统研究11g新特性的刺激下,结合其它客户的需求,我们服务团队后来也专门组织人员进行了专题研究工作,涵盖应用开发、高可用性提升、高可用性的整合和简化、性能提升、DB工具、DW和BI、Cluster提升、内容管理服务、诊断和修复、扩展性和集成性、系统管理、安全性等诸多领域。
但就象任何新生事物都有个成长过程一样,这些新东西也难免有这样、那样的问题。如何根据IT系统的实际需要,有针对性地使用11g相关新技术,特别是规避相关问题,的确是考虑IT系统建设者智慧的一个重要话题。
根据在国内相关行业实施11g的经验,我们建议采取这样的总体原则:积极稳妥,分阶段实施。以下就是示意图:
- 第一阶段为慎用阶段。即尽量慎用甚至禁止使用11g新特性。例如对11g所有缺省的自动功能进行一次排查,研究这些新特性的适用场景,结合相关系统的实际情况,确定是否需要关闭,并研究如何关闭的技术,以及可能导致的影响。
例如,可先设置compatible参数为原来的10g甚至为9i状态,将优化器运行在原有模式下。针对不同系统,对11g缺省打开的auto optimizer stats collection、auto space advisor、SQL tuning advisor等作业研究是否需要关闭,或采取其它客户化技术方案。对Adaptive Cursor Sharing等隐含特性研究是否存在Bug,如何关闭等。
- 第二阶段为逐步深入使用阶段。即确定从外围到核心技术,从后台业务到前台业务、从非关键业务系统到关键业务系统等原则,在充分进行需求分析基础上,合理采用相关新技术,并组织全面深入的测试,以及结合版本和补丁管理服务等,逐步投入到生产环境。
例如,先从数据备份、统计信息采集等外围、后台技术的运用开始,逐步深入到诸如SQL Automatic Tuning、空间自动分析、SecureFiles、Flashback等核心技术。
这个阶段的工作均围绕数据库本身已带的新特性的应用,不涉及数据库的各种选项。
- 第三阶段为全面推广阶段。即结合相关需求,开展围绕数据库选项方面的技术实施。例如:围绕新分区技术、Total-Recall技术、数据压缩、Database Replay、安全性等方面技术,全面推广11g相关新技术/新特性的运用。
下面几个章节,我们将围绕11g中数据压缩、SQL Query Result Cache、SPM、SecureFiles等技术展开专题讨论,希望11g相关技术在大家的实际IT系统中发挥应有作用,也希望给大家的实际设计、开发、测试等工作带来帮助。
5.5本章参考资料及进一步读物
本章的参考资料及进一步读物:
序号 | 资料类别 | 资料名称 | 资料概述 |
1. | Oracle 11g R2联机文档 | 《Oracle® Database New Features Guide》 | Oracle每推出一个新版本,都会同步推出一本“New Features”的书,分门别类、全面系统地介绍了新版本中的新技术和新特性。一旦新版本推出,技术高手往往都会第一时间就去找这本书:“看看Oracle又出了什么新东西?” |
2. | Oracle 11g R2联机文档 | 《Oracle® Database Upgrade Guide》 | 这是一本全面介绍Oracle数据库升级方法论和升级过程的文档。除此之外,该书附录A:“Behavior Changes After Upgrading Oracle Database”专门描述了升级到11g之后的一些变更。 |
3. | Oracle大学教材 | 《Oracle® Database 11g New Features》 | 每次Oracle推出新版本,Oracle大学都会有这样一门介绍新特性的课程,也的确是系统了解和掌握新版本新特性的良好途径,本人也是每次都参加这门课的培训。欲阅读此教材吗?只好报名参加培训了。 |
4. | Oracle白皮书 | 《Oracle Database 11g:The Top New Features for DBAs and Developers》 | 这是Oracle公司针对11g新特性而发布的白皮书。链接如下:
http://www.oracle.com/technetwork/articles/grid/index-099021.html 涵盖了Database Replay、事务管理、SQL执行计划管理(SPM)、SQL Access Advisor等20个领域和主题,值得DBA和开发人员好好学习。 |
5. | My Oracle Support | 《11g New Features – Database Core (Doc ID 1226873.1)》 | 这可是11g若干新特性的集散地。例如:ASM支持4K扇区、临时表空间新特性、外部表新特性、新一代大对象技术SecureFiles…… |
6. | My Oracle Support | 《Oracle Database 11g Release 2 Information Center (Doc ID 988222.1)》 | 又一扇走入11g新特性的大门,去打开这扇大门吧! |
Leave a Reply