WEB开发网
开发学院数据库Oracle 一次ORA-4030问题诊断及解决(三) 阅读

一次ORA-4030问题诊断及解决(三)

 2008-09-08 12:51:03 来源:WEB开发网   
核心提示: 可以看到,在Oracle10g使用了BUCKETS的设置,一次ORA-4030问题诊断及解决(三)(2),而且USER_TAB_COLUMNS添加了一个字段HISTOGRAM用来表示列的统计信息的类型,FREQUENCY类型和以往的HEIGHT BALANCED类似的列统计不同,由于9i的

可以看到,在Oracle10g使用了BUCKETS的设置,而且USER_TAB_COLUMNS添加了一个字段HISTOGRAM用来表示列的统计信息的类型。

FREQUENCY类型和以往的HEIGHT BALANCED类似的列统计不同。使用FREQUENCY类型,Oracle会选择与NUM_DISTINCT相同数量的NUM_BUCKETS来进行直方图统计,而直方图统计信息方式和基于高度的统计信息是不同的。最关键的是,这种统计方式的DENSITY的结果和HEIGHT BALANCED的计算方式大不相同。

因此在10g中,由于Oracle了解当前列的统计信息方式为FREQUENCY类型,因此可以根据直方图的信息得到正确的执行计划和返回记录数: 

  SQL>SELECTCOLUMN_NAME,NUM_DISTINCT,NUM_NULLS,DENSITY,NUM_BUCKETS,HISTOGRAM
  2FROMUSER_TAB_COLUMNS
  3WHERETABLE_NAME='ORD_HIT_COMM'
  4ANDCOLUMN_NAME='ENABLE_FLAG';
  COLUMN_NAMENUM_DISTINCTNUM_NULLSDENSITYNUM_BUCKETSHISTOGRAM
  ----------------------------------------------------------------------
  ENABLE_FLAG202.8355E-072FREQUENCY
  1rowselected.
  SQL>EXPLAINPLANFOR
  2SELECT*FROMORD_HIT_COMMWHEREENABLE_FLAG='1';
  Explained.
  SQL>SELECT*FROMTABLE(DBMS_XPLAN.DISPLAY);
  PLAN_TABLE_OUTPUT
  -----------------------------------------------------------------------------------
  -----------------------------------------------------------------------
  |Id|Operation|Name|Rows|Bytes|Cost(%CPU)|
  -----------------------------------------------------------------------
  |0|SELECTSTATEMENT||1691K|1200M|34103(2)|
  |1|TABLEACCESSFULL|ORD_HIT_COMM|1691K|1200M|34103(2)|
  -----------------------------------------------------------------------
  11rowsselected.

但是如果将统计信息导入到920数据库中,就会存在严重的问题。由于9i的数据库中没有表示统计信息类型的HISTOGRAM列,因此即使是基于FREQUENCY类型的统计信息,也会被当作基于HEIGHT BALANCED类型的统计信息。

上一页  1 2 3 4  下一页

Tags:一次 ORA 问题

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接