有一个相当重要的概念,在DB2和ORACLE中有不同的名字,那就是应用逻辑访问数据的方法或路径,在DB2中这被称为访问路径(Access Path),在ORACLE中称为执行计划(Execution Plan)。相同的是,它们都可以通过EXPLAIN来展现,而且都有被称为plan_table的表来以一定的格式存放访问路径或者执行计划信息。
其实,访问路径也好,执行计划也好,反映的是数据库SQL优化器(Optimizer)对SQL的优化处理方式,因此Optimizer也被称作是RDBMS的大脑。DB2和ORACLE的区别也毫不例外地反映在它们的Optimizer上。DB2和ORACLE经历了那么多版本而发展到今天,它们的Optimizer也已经演化的高度智能。但即便如此,有时候仍然需要人工的干预和优化,特别是当统计信息(Statistics Information)缺失或者不够详细,或者不够准确,出现倾斜/扭曲(Skew)的时候。这就称作优化器提示(Optimization Hint)。
[@more@]说到DB2和ORACLE关于Optimization Hint的区别,首先就是如何使用上的区别,这也是最直观的。
ORACLE的hint必须添加在SQL语句里面,通过使用特定的功能注释(functional comment)的方式,也就是 /*+ [hint text] */ 或者 --+ [hint text] 来实现。而DB2的hint则是脱离SQL语句的,它是以访问路径的形式存放在plan_table中的,在bind时通过指定OPTHINT参数来实现。显而易见,DB2的使用方法更合理一些。假设某个应用程序的一条SQL语句,在运行一段时间后发现因Optimizer的失误而存在效率问题,而这个问题必须通过hint的方式来解决。对于DB2,负责运维的一线DBA可以立即修改plan_table中的相关访问路径信息,把它设置为hint,然后重新bind这个应用程序,在不改变SQL的前提下就可以强制Optimizer选取hint规定的访问路径(通常,这些动作都是由system DBA完成的,问题的解决就在现场)。对于ORACLE,负责运维的一线DBA没有办法现场解决这个问题,必须回溯到上游的程序开发阶段,由编程人员修改这条SQL语句,为它添加hint,可能还会涉及到一些版本测试、封装、发布和管理的工作,然后才能在系统上生效(通常,这些动作是由开发阶段的application DBA完成的,问题的解决被向后移动到二线甚至三线了)。
(未完)
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/45793/viewspace-1016991/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/45793/viewspace-1016991/