Oracle在小机上运行的进程调度BUG分析与解决

需积分: 11 0 下载量 86 浏览量 更新于2024-07-19 收藏 280KB DOC 举报
"小机上运行ORACLE需要注意的进程调度BUG" 本文主要讨论了一个在小型服务器(小机)上运行ORACLE数据库时遇到的问题,即应用程序间歇性局部挂起,表现为插入单条记录等操作长时间无法完成,疑似存在死锁现象。作者小y通过对系统环境、等待事件和SQL语句的分析,最终定位了问题的根本原因是由于“undosegment extension”等待事件导致的。 首先,问题发生在运行HPUX IA64 B.11.31操作系统的服务器上,搭载的是ORACLE 10.2.0.5单实例数据库。在异常时刻,有两个会话等待行锁,而另一个会话SID=315则在等待“undosegment extension”,且已等待超过70384秒。 行锁等待的分析显示,SID=285和290的两个会话被SID=315阻塞,它们都在等待行锁解锁。进一步调查发现,SID=315的会话本身也在等待资源,即“undosegment extension”,这个等待事件没有明显的阻塞者。这个会话正在执行的SQL语句是插入操作,涉及多个列的值。 “undosegment extension”等待事件表明数据库正在等待回滚段扩展以完成操作。在ORACLE中,回滚段用于存储事务的前镜像,以便在回滚或恢复时使用。当执行插入、更新或删除等操作时,如果回滚段空间不足,系统就需要扩展回滚段。扩展通常由前台进程触发,然后由后台的SMON(System Monitor)进程执行。在这个案例中,扩展过程似乎耗时过长,影响了其他操作的正常进行。 为了检查回滚段的使用情况,可以查询UNDO表空间的信息。当前,UNDO表空间有1个文件,大小为27750M,但只有8M的活动空间,未超过undoretention的时间限制。这可能意味着回滚段扩展的操作出现了问题,导致了长时间的等待。 解决这个问题的关键在于优化回滚段的管理和分配,确保其能够快速响应扩展需求,避免对其他并发操作造成长时间阻塞。可能的解决方案包括增大UNDO表空间,调整回滚段大小,或者优化事务管理,减少对回滚段的需求。同时,检查系统的进程调度策略,确认是否因为小机上的特定设置导致了扩展操作的延迟。此外,监控和调整数据库的undo retention政策也能帮助减轻类似问题的发生。