1.Oracle11g新特性动态变量窥视是怎样的?
1。
11g之前的绑定变量窥视 我们都知道,为了能够让SQL语句共享执行计划,oracle始终都是强调在进行应用系统的设计时,必须使用绑定变量,也就是用一个变量来代替原来出现在SQL语句里的字面值。比如,对于下面三条SQL语句来说: select col1 from t where col2 = 1; select col1 from t where col2 = 2; select col1 from t where col2 = 3; 我们可以看到,这三条SQL语句几乎一样,只有最后where条件里的字面值(分别是 1、2、3)不同而已。
但是如果写成这个样子,则oracle是不知道这三条SQL语句是一样的,仍然把它们当作三条完全不同的SQL语句,从而在shared pool里进行硬解析,并生成最终的执行计划。但是我们会发现,这三个执行计划可能都是一样的,因此后面两次生成执行计划的工作可能是完全不必要的,这在典型的OLTP环境中更是如此。
由于解析本身属于CPU密集型操作,因此为了降低对CPU的消耗,oracle建议将这样的SQL写成: select col1 from t where col2 = :v1; 然后,分别将 1、2、3传递给v1,这样的话,只需要第一次传入1时进行解析即可。 而后面执行 2、3时,由于SQL文本本身没有变化,因此直接把执行计划拿来使用即可,不需要再次生成执行计划。
但是,生成执行计划本身是基于概率的理论,在不访问具体表里的数据的前提下,根据你的where条件,来猜测返回的记录数大概是多少,从而判断应该采用怎样的访问路径。 很明显,这是一定要参照具体的where条件里的值才能进行猜测的。
这样就与节省CPU的初衷产生了矛盾,因为节省CPU的关键是使用绑定变量,你一旦使用了绑定变量,则oracle岂不是不知道你具体的字面值了吗? 为了解决这一问题,oracle引入了绑定变量窥视。 所谓绑定变量窥视,就是指oracle在第一次解析SQL语句的时候(也就是说该SQL第一次传入shared pool),会将你输入的绑定变量的值带入SQL语句里,从而参考你的字面值来猜测该SQL大概会返回多少条记录,从而得到优化的执行计划。
然后,以后再次执行相同的SQL语句时,不再考虑你所输入的绑定变量的值,直接取出第一次生成的绑定变量。 但是,很可惜的是,使用绑定变量从而共享游标与SQL优化是两个矛盾的目标。
Oracle使用绑定变量的前提,是oracle认为大部分的列的数据都是分布比较均匀的。从而,使用第一次的绑定变量的值所得到的执行计划,大多数情况下都能适用于该绑定变量的其他的值。
很明显,如果第一次传入的绑定变量的值恰好占整个数据量的百分比较高,从而导致全表扫描的执行计划。而后来传入的绑定变量的值都占整个数据量的百分比都很低,则应该走索引扫描会更好的,但是由于使用了绑定变量,从而oracle并不会再去看你的绑定变量的值,而是直接拿全表扫描的执行计划来用。
这时,由于使用了绑定变量,虽然我们达到了游标共享,从而节省CPU的目的,但是SQL的执行计划却不够优化了。 那么我们如何在绑定变量和SQL优化之间进行取舍呢?在OLTP应用中,由于并发性较高,CPU上的争用会比较严重,同时SQL本身执行时间较短,涉及到的数据量较少,解析所占的时间在整个SQL执行时间中占的比例较高,而花在I/O上的时间占的比例较低。
因此尽管绑定变量会有SQL不够优化的问题,还是建议使用绑定变量。但是在DSS应用和数据仓库应用中,由于并发性较低,CPU上的争用较轻,同时SQL语句的执行时间都很长,而且主要时间花在等待I/O上,而解析占的比重较低,这时优化SQL执行计划的重要性就体现出来了。
因此,建议不要使用绑定变量,而直接使用字面值。但是大多数的情况都是混合应用,既有OLTP又有数据仓库,这时就很难完美的解决该问题了。
我们先来看一下11g之前的绑定变量窥视是如何工作的,以10g为例。 我们先创建一个表,使得其含有的数据分布不均匀,并在该表上创建一个索引。
hr@ora10g > create table t1 as select object_id as id,object_name from dba_objects; hr@ora10g > update t1 set id=1 where rownum commit; hr@ora10g > create index idx_t1 on t1(id); 这样,该表里id为的1记录有一万条,而id为其他值的记录都只有一条。 从而,我们构建出一个分布不均匀的测试用表。
然后,我们收集一下统计信息。注意,这里要收集直方图,为的是要让CBO知道id列上的数据分布不均匀。
hr@ora10g> begin 2 dbms_stats。gather_table_stats( 3 user, 4 't1', 5 cascade => true, 6 method_opt => 'for columns id size 254' 7 ); 8 end; 9 /。
2.Oracle11g数据库怎样有效节省IT资源?
2000年以来我国经济增长呈加速状态。
经济持续、快速、健康的发展与信息化的加速发展和应用相互交织。经济发展为信息化提供了良好的外部环境和充足的资金投入,信息化的应用也有力地推动了经济的持续增长、产业升级、以及竞争力的提高。
在经济增长平稳、快速的形势下,在全球化的视野下,在商业环境和竞争节奏急剧变化的今天,企业更加需要丰富并优化业务过程,发现新的收入机会,更加需要借助信息技术提升竞争力。 然而,随之而来的难题也呈现在了企业面前:那就是如何解决因特网和电子商务所造成的数据量爆炸,如何有效地存取海量信息并提升其价值,如何管理超大规模数据库、数据仓库,如何使信息在其生命周期的各个阶段发挥最大价值,如何在超大规模数据库、数据仓库频繁的数据访问中降低违规操作,加强企业范围内数据访问的审计,规避内部威胁,遵循全球化的合规性需求。
很多分析家都同意:数据量每6~9个月就会翻倍,越来越多的数据系统达到几百GB甚至TB以上的容量。象中国移动的业务支撑系统均在TB级以上,面对海量的信息,企业不得不为了保存大量在线数据以及数据膨胀而在服务器和存储硬件上大量投资,令其总成本不断上升。
很多企业不得不在数据的质与量之间作选择。同时,持续的超大规模数据库管理维护也令企业面临人力、时间等资源过度使用所带来的挑战。
数据爆炸的现实促使企业在迫切寻找降低成本提高性能的持续发展之路。 Oracle 数据库11g 的推出,11g中增加的激动人心的新特性能够帮助企业解决上述问题。
Oracle 数据库11g中创新性的高级压缩技术帮助企业节省各种IT资源,降低海量数据管理成本。使企业面对快速增长的变化时,能够在保持快速性能的同时有效节省成本。
高级压缩采用智能算法提供OLTP系统各种数据操作的压缩、非结构化数据的压缩、备份数据的压缩、网络传输的压缩。 高级压缩技术可以极大地降低资源需求和IT基础设施相关的各方面的成本,包括内存资源、网络带宽。
其强健的压缩能力使IT管理人员能够成功面对增长、复杂的环境。在数据中心发挥重要作用。
分区是构建TB级海量数据库系统或高可用性系统的关键技术。Oracle分区可以显著增强应用程序的可管理性、性能和可用性,简化应用的管理工作,降低管理成本。
数据仓库和事务处理系统都能从Oracle分区获益:在提高性能上可使查询时间从数分钟缩短到数秒。在提高可用性上可全天候访问重要信息;在提高可管理性上能管理更小的数据块;在支持信息生命周期管理上能经济有效地利用存储。
分区是 Oracle信息生命周期管理战略的基础,企业可以根据信息的使用价值,将它们分区,存储在不同价值的存储上,低价值信息存储到低价格的存储上,以节省成本。 11g新增了更多的分区技术包括:根据虚拟列进行分区和复合分区、新增分区建议。
大规模数据库中海量、频繁的数据访问势必引发更高机率的违规操作,因此,企业需要整合、管理、监控和报告整个企业范围的数据访问审计信息,需要及时分析异种系统中的审计数据,以减少内部威胁,遵循合规要求。 Audit Vault能有效解决上述问题。
它能将分散在异种系统中的海量审计信息自动收集、分析、并生成警报,它还提供大量现成的标准审计评估报表,将审计数据变为关键的安全资源。通过对跨越企业范围的数据库及系统进行集中审计设置,来减少管理时间和工作量,充分展示了其有效的控制能力。
转载请注明出处windows之家 » oracle11g如何安装win10