知识大全 一次ORA-4030问题诊断及解决(一)
Posted 计划
篇首语:劳动教养了身体,学习教养了心灵。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 一次ORA-4030问题诊断及解决(一)相关的知识,希望对你有一定的参考价值。
一次ORA-4030问题诊断及解决(一) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
在报表数据库的后台alert文件中发现了这个错误 简单记录一下问题的诊断和解决过程 数据库版本 for Solaris sparc 错误信息如下
Errors in file /u /oracle/admin/repdb /bdump/repdb _j _ trc: ORA : error on auto execute of job ORA : out of process memory when trying to allocate bytes (hash join subh kllcqas:kllsltba) ORA : at JSGOV_OLD INSERT_HOS_INFO line ORA : at JSGOV_OLD P_GEN_STAT line ORA : at line
这个JOB是昨天才添加到数据库中的 而运行这个JOB的用户是从其他数据库迁移到当前数据库中的
产生问题的情况有很多种 有可能是本地配置和远端配置的区别造成的;也可能是由于源数据库是 而当前数据库是 版本的差异造成了执行计划改变;还有可能是迁移过程中出现了错误从而引起了问题
从错误本身观察 是由于无法为HASH JOIN分配 M的内存所导致的 观察数据库的PGA内存设置
SQL> SHOW PARAMETER PGA NAME TYPE VALUE pga_aggregate_target big integer
对于一个报表系统来说 这个设置确实小了一点 但是考虑这个数据库在处理很多比当前数据量大得多的情况都未出现这个问题 基本上可以确定不是系统参数设置造成的
如果排除第一种情况 那么无论是迁移出现了问题 还是版本差异的问题 最大的可能性都是执行计划发生了变化 那么现在就需要找到出现问题的SQL语句 检查执行计划
根据错误信息给出的存储过程名称和位置提示 可以轻易的找到出现问题的SQL语句 不过由于SQL语句太长 而且和问题的关系并不太大 这里将SQL语句省略 只列出这个SQL语句对应的执行计划
SQL> SELECT * FROM TABLE(DBMS_XPLAN DISPLAY); PLAN_TABLE_OUTPUT | Id | Operation | Name | Rows | Bytes | Cost | | | SELECT STATEMENT | | | | | | | NESTED LOOPS | | | | | | | HASH JOIN | | | | | | | HASH JOIN | | | | | | | MERGE JOIN CARTESIAN | | | | | | | VIEW | | | | | | | SORT GROUP BY | | | | | | | VIEW | | | | | | | SORT GROUP BY | | | | | | | TABLE ACCESS FULL | ORD_HIT_M | | | | | | BUFFER SORT | | | | | | | VIEW | | | | | | | SORT GROUP BY | | | | | | | VIEW | | | | | | | SORT GROUP BY | | | | | | | TABLE ACCESS FULL | ORD_HIT_M | | | | | | VIEW | | | | | | | SORT GROUP BY | | | | | | | TABLE ACCESS FULL | ORD_HIT_M | | | | | | VIEW | | | | | | | SORT GROUP BY | | | | | | | NESTED LOOPS | | | | | | | INLIST ITERATOR | | | | | | | TABLE ACCESS BY INDEX ROWID| SW_PLAT_CAT_ORG | | | | | | INDEX RANGE SCAN | IDX_SW_PLAT_CAT_ORG_ENABLE | | | | | | INLIST ITERATOR | | | | | | | TABLE ACCESS BY INDEX ROWID| SW_PLAT_CAT_BUYER | | | | | | INDEX UNIQUE SCAN | PK_SW_PLAT_CAT_BUYER | | | | | | INLIST ITERATOR | | | | | | | TABLE ACCESS BY INDEX ROWID | PLT_PLAT | | | | | | INDEX UNIQUE SCAN | PK_PLT_PLAT | | | | Note: cpu costing is off PLAN_TABLE is old version rows selected
虽然SQL本身写的有缺点 但是绝对不应该产生这种包含笛卡儿积的执行计划 检查SQL并没有发现缺少关联条件的情况 即问题和SQL本身并不大 虽然SQL有很多可以优化的地方 但是这并不是产生笛卡儿积的关键因素
观察执行计划本身 除了笛卡儿积之外 另人比较疑惑的一点就是返回记录数 Oracle认为全表扫描ORD_HIT_M仅仅返回一条记录 这显然是有问题的
SQL> SELECT COUNT(*) FROM ORD_HIT_M; COUNT(*)
从这一点上判断 可以很容易的断定是统计信息出现了问题 检查ORD_HIT_M的统计信息
SQL> SELECT TABLE_NAME NUM_ROWS FROM USER_TABLES WHERE TABLE_NAME = ORD_HIT_M ; TABLE_NAME NUM_ROWS ORD_HIT_M
本以为不存在统计信息 或者得到一个很小的值 没想到统计信息基本上是准确的 那么是哪里出现的问题呢
观察SQL语句 发现对ORD_HIT_M表唯一的限制条件是ENABLE_FLAG= 而这个限制条件其实对过滤数据来说没有多大的意义 不过检查执行计划
SQL> EXPLAIN PLAN FOR SELECT * FROM ORD_HIT_M WHERE ENABLE_FLAG = ; Explained SQL> SELECT * FROM TABLE(DBMS_XPLAN DISPLAY); PLAN_TABLE_OUTPUT | Id | Operation | Name | Rows | Bytes | Cost | | | SELECT STATEMENT | | | | | | | TABLE ACCESS FULL | ORD_HIT_M | | | | Note: cpu costing is off PLAN_TABLE is old version rows selected 看来问题多半出现在ENABLE_FLAG列的统计信息上 SQL> SELECT COLUMN_NAME NUM_DISTINCT NUM_NULLS DENSITY NUM_BUCKETS FROM USER_TAB_COLUMNS WHERE TABLE_NAME = ORD_HIT_M AND COLUMN_NAME = ENABLE_FLAG ; COLUMN_NAME NUM_DISTINCT NUM_NULLS DENSITY NUM_BUCKETS ENABLE_FLAG E
在 i的环境 Oracle根据DENSITY来确定返回的记录数 因此得到 条记录的结果是很正常的
SQL> SELECT * E FROM DUAL; * E
显然这时需要删除错误的统计信息 并重新收集统计信息
SQL> EXEC DBMS_STATS DELETE_TABLE_STATS(USER ORD_HIT_M ) PL/SQL procedure successfully pleted SQL> EXEC DBMS_STATS GATHER_TABLE_STATS(USER ORD_HIT_M ) PL/SQL procedure successfully pleted
检查统计信息中的DENSITY值
SQL> SELECT COLUMN_NAME NUM_DISTINCT NUM_NULLS DENSITY NUM_BUCKETS FROM USER_TAB_COLUMNS WHERE TABLE_NAME = ORD_HIT_M AND COLUMN_NAME = ENABLE_FLAG ; COLUMN_NAME NUM_DISTINCT NUM_NULLS DENSITY NUM_BUCKETS ENABLE_FLAG
下面检查访问ORD_HIT_M的执行计划 检查优化器认为的返回记录数
SQL> EXPLAIN PLAN FOR SELECT * FROM ORD_HIT_M WHERE ENABLE_FLAG = ; Explained SQL> SELECT * FROM TABLE(DBMS_XPLAN DISPLAY); PLAN_TABLE_OUTPUT | Id | Operation | Name | Rows | Bytes | Cost | | | SELECT STATEMENT | | K| M| | | | TABLE ACCESS FULL | ORD_HIT_M | K| M| | Note: cpu costing is off PLAN_TABLE is old version rows selected
现在统计信息已经恢复正常 检查一下出现问题的SQL语句执行计划是否正常
SQL> SELECT * FROM TABLE(DBMS_XPLAN DISPLAY); PLAN_TABLE_OUTPUT | Id | Operation |Name |Rows| Bytes |TempSpc| Cost | | | SELECT STATEMENT | | | | | | | | HASH JOIN | | | | | | | | HASH JOIN | | | | | | | | HASH JOIN | | | | | | | | MERGE JOIN CARTESIAN | | | | | | | | VIEW | | | | | | | | SORT GROUP BY | | | | | | | | NESTED LOOPS | | | | | | | | INLIST ITERATOR | | | | | | | | TABLE ACCESS BY INDEX ROWID|SW_PLAT_CAT_ORG | | | | | | | INDEX RANGE SCAN |IDX_SW_PLAT_CAT_ORG_ENABLE| | | | | | | INLIST ITERATOR | | | | | | | | TABLE ACCESS BY INDEX ROWID|SW_PLAT_CAT_BUYER | | | | | | | INDEX UNIQUE SCAN |PK_SW_PLAT_CAT_BUYER | | | | | | | BUFFER SORT | | | | | | | | INLIST ITERATOR | | | | | | | | TABLE ACCESS BY INDEX ROWID |PLT_PLAT | | | | | | | INDEX RANGE SCAN |PK_PLT_PLAT | | | | | | | VIEW | | | K| | | | | SORT GROUP BY | | | K| | | | | TABLE ACCESS FULL |ORD_HIT_M | K| M| | | | | VIEW | | | K| | | | | SORT GROUP BY | | | K| | | | | VIEW | | K| M| | | | | SORT GROUP BY | | K| M| M| | | | TABLE ACCESS FULL |ORD_HIT_M | K| M| | | | | VIEW | | | K| | | | | SORT GROUP BY | | | K| | | | | VIEW | | K| M| | | | | SORT GROUP BY | | K| M| M| | | | TABLE ACCESS FULL |ORD_HIT_M | K| M| | | Note: cpu costing is off PLAN_TABLE is old version rows selected
cha138/Article/program/Oracle/201311/16912相关参考
一次操作创建多个对象一个不成功则全部不成功 第一步创建用户 createuseraa identifiedbyaa defaulttablespaceusers
市值管理存在的问题及解决方法全流通是我国股市建立以来意义最为深远的一次变革。股市基本功能开始健全,投资者信心得以恢复。但由于我国股市发展还不够完善.市值管理还存在一些问题。其根本问题是,我国股市是一个
为什么东北玉米一次性施肥(“一炮轰”)不能解决全生育期不脱肥的问题?
春玉米的生育期在120天以上,苗期温度较低时,生长慢,主要是扎根和长叶,需要的养分量少,需肥高峰来得比较晚。从拔节至抽穗期进入营养生长和生殖生长阶段,需要的养分量最多,大约50%的氮素在此阶段吸收,如
为什么东北玉米一次性施肥(“一炮轰”)不能解决全生育期不脱肥的问题?
春玉米的生育期在120天以上,苗期温度较低时,生长慢,主要是扎根和长叶,需要的养分量少,需肥高峰来得比较晚。从拔节至抽穗期进入营养生长和生殖生长阶段,需要的养分量最多,大约50%的氮素在此阶段吸收,如
1.反渗透系统应多久清洗一次?一般情况下,当标准化通量下降10~15%时,或系统脱盐率下降10~15%,或操作压力及段间压差升高10~15%,应清洗RO系统。清洗频度与系统预处理程度有直接的关系,当S
1.反渗透系统应多久清洗一次?一般情况下,当标准化通量下降10~15%时,或系统脱盐率下降10~15%,或操作压力及段间压差升高10~15%,应清洗RO系统。清洗频度与系统预处理程度有直接的关系,当S
1.反渗透系统应多久清洗一次?一般情况下,当标准化通量下降10~15%时,或系统脱盐率下降10~15%,或操作压力及段间压差升高10~15%,应清洗RO系统。清洗频度与系统预处理程度有直接的关系,当S
浅谈玉米一次性施肥(“一炮轰”)为什么不能解决全生育期不脱肥的问题?
春玉米的生育期在120天以上,苗期温度较低时,生长慢,主要是扎根和长叶,需要的养分量少,需肥高峰来得比较晚。从拔节至抽穗期进入营养生长和生殖生长阶段,需要的养分量最多,大约50%的氮素在此阶段吸收,如
浅谈玉米一次性施肥(“一炮轰”)为什么不能解决全生育期不脱肥的问题?
春玉米的生育期在120天以上,苗期温度较低时,生长慢,主要是扎根和长叶,需要的养分量少,需肥高峰来得比较晚。从拔节至抽穗期进入营养生长和生殖生长阶段,需要的养分量最多,大约50%的氮素在此阶段吸收,如
3月17日,李克强在十二届全国人大一次会议举行的记者会上表示,中国要解决的事情很多,主要问题是
3月17日,李克强在十二届全国人大一次会议举行的记者会上表示,中国要解决的事情很多,主要问题是_____。A、持续发展经济B、不断改善民生C、构建和谐社会D、促进社会公正答案:ABD解析:李克强在十二