数据库连接过多问题
最近线上不断爆出数据库连接超时,表现
1.应用无法连接数据库
2.日志中c3p0不断报出time out
排查:
检查数据库中是否有过多sql语句,没有发现问题。
select sq.SQL_TEXT from v$open_cursor oc, v$sql sq, v$session s where oc.HASH_VALUE = sq.HASH_VALUE and s.SID = oc.SID and s.STATUS = "ACTIVE" and s.USERNAME="VIDS" order by sq.SQL_TEXT;
最初怀疑c3p0配置问题,发现网上曾有c3p0同样的错误,加大连接数据至500,导致sqlplus都无法连接数据库。
最后通过语句,发现很多没有提及释放连接的sql语句
SELECT osuser, a.username,cpu_time/executions/1000000||"s", b.sql_text,machine from v$session a, v$sqlarea b where a.sql_address =b.address order by cpu_time/executions desc;
总结:
V$SQL:Child cursor details for V$SQLAREA
V$SQLAREA:Shared pool details for statements/anonymous blocks
V$SQLTEXT:SQL text of statements in the shared pool
v$sql的每一行表示的是每一个sql语句的一个版本,而v$sqlarea存放的是相同语句不同版本一个group by汇总。
v$sql与v$sqlarea的源都是X$KGLCURSOR
v$sql及v$sqlarea存放着统计信息在调优时使用居多,但其sql是不全的,如果想获得完整的sql需使用v$sqltext。
通过以上信息可以得知,在使用工具排查问题时候,必须对工具区别对待。
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: oracle 内存使用情况
- 下一篇:没有了