查询select event from v$session_wait;看看有什么等待事件,系统慢肯定是有原因的,一般就是由于不良的SQL语句引起的
是什么环境,使用各自系统的查看进程的命令 如linux的top,aix的topas查看一下各进程的CPU占用情况,是否有进程占用CPU过高 如果有,则可以使用如下SQL查看一下最消耗CPU的语句 SELECT /*+ ORDERED */ sql_text FROM v$sqltext a WHERE (a.hash_value, a.address) IN ( SELECT DECODE (sql_hash_value, 0, prev_hash_value, sql_hash_value ), DECODE (sql_hash_value, 0, prev_sql_addr, sql_address) FROM v$session b WHERE b.paddr = (SELECT addr FROM v$process c WHERE c.spid = '&pid')) ORDER BY piece ASC 或者生成一个statspack报告,这样问题就更清楚
哪方面的慢?
应用层SQL查询变慢?
数据库整体状况是什么样子的?
还是指DBA的各种数据库操作都慢?
要先确定系统中是否出现了什么异常的程序或是否有病毒如果上面两种情况排除,则监控Oracle用户的进程
查找是否有进程占系统资源比较大如果你对数据库的操作,数据量较大,
数据库可能会一直没有释放这个数据库的会话,
导致运行SQL语句的进程一直占用系统的资源,从而影响了整个数据库的性能。
如linux的top,aix的topas查看一下各进程的CPU占用情况,是否有进程占用CPU过高
如果有,则可以使用如下SQL查看一下最消耗CPU的语句
SELECT /*+ ORDERED */
sql_text
FROM v$sqltext a
WHERE (a.hash_value, a.address) IN (
SELECT DECODE (sql_hash_value,
0, prev_hash_value,
sql_hash_value
),
DECODE (sql_hash_value, 0, prev_sql_addr, sql_address)
FROM v$session b
WHERE b.paddr = (SELECT addr
FROM v$process c
WHERE c.spid = '&pid'))
ORDER BY piece ASC
或者生成一个statspack报告,这样问题就更清楚
看下这期间是不是有大量的DML操作,而占用的undo回滚段没有回收!
1. 看下数据库服务器CPU 和内存的使用情况
如果服务器硬件性能不差, 但是CPU,内存使用率较高, 就检查下SQL, 肯能是SQL 效率低造成。
如果说硬件跟不上,那也没办法了。2. 用AWR 或者statspack 分析下数据库。 看下有什么瓶颈, Top 5 event,top 5 sql。 看下还有什么地方需要优化的,如果SQL, SGA 等。3. 看下前台应用连接数据库后有没有释放session。 这个也要关注下。