Oracle8.15就有这个功能了。一直没有在production环境中用过。当时的估计,就算session能够使用隐藏参数_use_nosegment_indexes看到该虚拟索引,但virtual index没有segment,如何去产生该虚拟索引的统计信息,如何保证CBO的有效判断。
但从这里看到DBMS_STATS.GENERATE_STATS这个函数,提供根据相关对象的统计信息来设置该对象的统计信息。可以给虚拟索引设置统计信息,就能够帮助CBO判断”虚拟”索引是否有用。
Generates object statistics from previously collected statistics of related objects
而且这个估计统计信息的过程及快,虽然不能够十分准确,但基本不消耗CPU IO等资源。
Generate_stats也可以在普通索引和普通表上使用。当系统因为缺乏统计信息SQL执行特别糟糕的时候,可以尝试该方法快速设置缺失的统计信息,快速优化SQL恢复系统状态。
Read more…
我最近看到了四万亿的一毛。我想稍微有点年纪的都已经有经验了。
公司附近的街道,两边的植树又被挖掉了。重新换过。这已经是第三次了至少在2008年里。

通过政府投资,固然能够一定程度的保证就业,但“寻租“等无效率的事情必然发生。四万亿,大家的税收,我不看好。
国家的高层或许还在犹豫,出口退税降了,消费税改革了,但就是不降低老百姓的个人消费税。九成是组织看出来,就算给平民们减税,平民们还是少花钱,少消费,过节俭的和谐日子,不能创造GDP和工作岗位。干脆,就不减个人税了。还是将钱给政府花吧,让组织花钱来带来工作岗位。
中央政府和地方政府的财政投资将不断“加码”,社会资源进一步向政府手中集中,产生严重的“挤出效应”,加大资源配置的不平衡。
在2008年和将来的2009年,那些散修的是没有希望出头了,只有争取挤入到那些拥有资源和势力的大门派大家族之中吧。
Read more…
很早以前碰到过一个例子。应用执行SQL抱怨很慢,然后我用10046去跟踪应用的查询。却没有从跟踪文件中找到什么不好的Plan,反而被抱怨的SQL执行效果很好。
原因是10046sql_trace 在trace session的时候,默认session执行的每个SQL都将从新进行hard parse,产生一个新的child cursor,自然,这个被traced的cursor和原本应用的cursor就有可能因为dbms_auto_invalidations等原因使用不同的plan.
也就是说,10046 event并不能保证得到的执行计划就是当前应用程序SQL正在使用的执行计划。
Read more…
我的抱怨来自上海的公车。
现在上班要坐地铁再转公车。公车只坐2站地,5分钟。但都开的飞快超猛,特别是在停站的时候,往往车根本就不完全停下,乘客的一只脚在车上,一只脚还没有落地的时候,车就已经缓缓的要开了。不是一路车这样,很多路车都这个样子。
还有时候有些下的慢的乘客会被车门给夹住,或者还没有下去司机就赶时间投胎关车门。我想很多上海人都见过类似情形。坐公车都不能够有”尊严”,一付“弱肉强食”的和谐社会。
从公交这个微小的服务行业,就不指望上海世博会能够将上海从全球经济衰退中挽救出来。上海房价也必然跌价。
Read more…
DBMS_STATS包的很多子过程都有这么一个option,来决定是否马上invalidate相关对象的游标。
no_invalidate
Does not invalidate the dependent cursors if set to TRUE. The procedure invalidates the dependent cursors immediately if set to FALSE. Use DBMS_STATS.AUTO_INVALIDATE. to have Oracle decide when to invalidate dependent cursors. This is the default. The default can be changed using the SET_PARAM Procedure
10g中默认是AUTO_INVALIDATE,就是说分析表后,游标不会马上invalidate,已经存在的SQL的执行计划不会受新的统计信息影响。可以手工DDL invalidate游标。又或者等待隐藏参数_optimizer_invalidation_period(time window for invalidation of cursors of analyzed objects)秒后,Oracle自动invalidate游标并使SQL能够读取新的统计信息产生新的执行计划。
如果想要dbms-stats分析立马见效,需要使用no_invalidate=false option或者DBA自己手工invalidate游标。
Read more…
保留一个文档Understanding Shared Pool Memory Structures - pap 。文档简要的解释了library cache object的以heap为基础的内存结构;详细的讲解了session_cached_cursor和cursor_space_for_time的作用。
还有juliandyke的Library Cache Internal,描绘出parent cursor和child cursor的关系,还有为什么child cursor不能够共享的原因也举了很多例子。
Read more…
虽然还没有到月底,存贷款利率又下降了,不多,各0.27个百分点。
为进一步落实适度宽松的货币政策,中国人民银行决定:
从2008年12月23日起,下调一年期人民币存贷款基准利率各0.27个百分点,其他期限档次存贷款基准利率作相应调整。同时,下调中央银行再贷款、再贴现利率。
从2008年12月25日起,下调金融机构人民币存款准备金率0.5个百分点。
这次降息的主要目的是稳住汇率。现在全球的经济体都在比赛降低利率,美国已经接近零汇率了。汇率的稳定对于出口为导向的亚洲新经济体稳渡全球经济危机尤为重要,特别是世界总需求减少,开工减少和就业压力下。
降低存款准备金率则是继续为中国的工业提供便捷的融资支持,帮助其渡过短期流动性短缺危机,挽救失业率。
Read more…
这个9i就有的改进现在才注意到。
NAME DESCRIPTION
——————————————————————
_realfree_heap_free_threshold threshold for performing real-free, in Kbytes
_realfree_heap_max_size minimum max total heap size, in Kbytes
_realfree_heap_mode mode flags for real-free heap
_use_realfree_heap use real-free based allocator for PGA memory
Oracle8i的时候,Dedicate模式中Session的UGA和CGA在PGA Heap中通过brk调用作为subheap分配.Session因为执行复杂操作而占用的UGA和CGA内存部分,除非PGA Heap被释放,否则不能够释放给OS。在过去,经常看到这些言论,说什么UGA占用的内存不能释放给OS,只能在系统内存紧张的时候被swap out出去 —- 已经是过去时了。
Oracle9i做了改进,引进_use_realfree_heap参数。当9i使用pga_aggregate_target=true的时候_use_realfree_heap也为TRUE.10g中该参数默认为True.
差别就是原先一个进程只有一个PGA heap,包括了uga,cga等subheap。Enable这个参数后,一个进程地址空间内有多个heap,包括PGA Heap, UGA Heap, CGA heap.这样当user call执行完毕后,该user call所占用的CGA heap就可以返回给OS. 具体的pga heap dump例子可以看这里。
Read more…