连接池溢出以及大量查询系统表的问题
AWR检查,发现一个SQL在4个小时内居然执行196w次.占用数据库负载3%左右.
SELECT NULL AS table_cat,
o.owner AS table_schem,
o.object_name AS table_name,
o.object_type AS table_type,
NULL AS remarks
FROM all_objects o
WHERE o.owner LIKE :1
AND o.object_name LIKE :2
AND o.object_type IN ('xxx', 'TABLE')
ORDER BY table_type, table_schem, table_name
刚开始以为是系统被SQL注入了..
因为之前正在排查硬解析过高的问题
后来发现是JDBC Metadata的调用.
但是这个调用的频率,明显异常.
最后发现,原来是我使用c3p0连接池的时候,还需要配置preferredTestQuery参数.
否则,默认测试连接的行为,就是DatabaseMetaData.getTables()这种操作.
preferredTestQuery设置为"select 1 from dual" 问题解决.