连接池溢出以及大量查询系统表的问题

Posted 老柴的自留地

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了连接池溢出以及大量查询系统表的问题相关的知识,希望对你有一定的参考价值。


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" 问题解决.



以上是关于连接池溢出以及大量查询系统表的问题的主要内容,如果未能解决你的问题,请参考以下文章

自定义数据库连接池实现方式 MySQL

线程池和数据库连接池

线程的池

Java使用c3p0连接池完成多表级联查询

数据库连接池

第四周作业-数据库连接池