学习Oracle时,你可能会遇到Oracle减少回滚段问题,这里将介绍Oracle减少回滚段问题的解决方法,在这里拿出来和大家分享一下。当多个进程要同时使用同一资源时,就会发生资源争用,当出现资源争用时,就会产生等待,因此,应设法避免或减少资源争用的出现。本文主要讨论回滚段、多线索服务器进程和日志缓冲区的闩锁争用问题。
Oracle减少回滚段的争用
要Oracle减少回滚段的争用,首先需检查是否出现争用。对含有回滚段块的缓冲区的争用也会影响到对回滚段的争用。这可以通过查询动态性能表V$WAITSTAT来检测是否存在对回滚段的争用(需有SELECT ANY TABLE持权),例如:
- SQL>SELECT class,count
- 2>FROM V$WAITSTAT
- 3>WHERE class IN('system undo header','system undo block',
- 4>'undo header','undo block');
其中参数含义如下:
◆ system undo header:对含有SYSTEM回滚段标题块的缓冲区的等待次数。
◆ system undo block:对含有SYSTEM回滚段非标题块的缓冲区的等待次数。
◆ undo header:对含有非SYSTEM回滚段标题块的缓冲区的等待次数。
◆ undo block:对含有非SYSTEM回滚段非标题块的缓冲区的等待次数。
如果任何等待次数大于总请求数的1%,则应创建更多的回滚段来减少竞争,可以周期性地检查这些统计数字,并将它与总的请求数据的次数作比较。总的请求数据次数可用如下语句求出:
- SQL>SELECT SUM(value)
- 2>FROM V$SYSSTAT
- 3>WHERE name IN('db block gets','consistent gets');
Oracle减少回滚段争用的办法是为其建立适当数量的回滚段。
减少对多线索服务器进程的争用
对多线索服务器进程的争用主要表现在对调度进程和共享服务器进程的争用。
减少调度进程的争用
对该进程的争用主要表现在调度进程占用率高及等待响应时间的增长方面。可通过查询动态性能表V$DISPATCHER(需有SELECT ANY TABLE特权)来检查争用情况,例如:
- SQL>SELECT network "protocol",
- 2>SUM(busy)/(SUM(busy)+SUM(idle)) "Total Rate"
- 3>FROM V$DISPATCHER GROUP BY network;
其中V$DISPATCHER表中的idle和busy列的含义如下:
◆ idle:表示1%秒单位时间内调度进程的空闲时间。
◆ busy:表示1%秒单位时间内调度进程的占用时间。
【编辑推荐】