最近用c3po来跨网段连接远程的oracle数据库,为了防止连接断开,在连接池里配置了testConnectionOnCheckout,因为c3po的文档里说这个对性能影响很严重,所以用程序测试了一下。程序很简单,就是获取一个ComboPooledDataSource,然后执行10000次循环,每次循环内获取一个连接,执行一次查询。c3po的初始设置是minPoolSize 5, maxPoolSize 20, acquireIncrement 5,然后一个个叠加设置属性。测试结果如下:
第一次:
无任何特殊设置 13秒
设置TestConnectionOnCheckout 35秒
设置AutomaticTestTable 23秒
设置PreferredTestQuery 24秒
第二次:
无任何特殊设置 21秒
设置TestConnectionOnCheckout 35秒
设置AutomaticTestTable 22秒
设置PreferredTestQuery 24秒
第三次:
无任何特殊设置 13秒
设置TestConnectionOnCheckout 33秒
设置AutomaticTestTable 24秒
设置PreferredTestQuery 24秒
根据这个结果,如果确实需要设置TestConnectionOnCheckout的话,一定要设置AutomaticTestTable,至于PreferredTestQuery,可有可无,不设置也行。
第一次:
无任何特殊设置 13秒
设置TestConnectionOnCheckout 35秒
设置AutomaticTestTable 23秒
设置PreferredTestQuery 24秒
第二次:
无任何特殊设置 21秒
设置TestConnectionOnCheckout 35秒
设置AutomaticTestTable 22秒
设置PreferredTestQuery 24秒
第三次:
无任何特殊设置 13秒
设置TestConnectionOnCheckout 33秒
设置AutomaticTestTable 24秒
设置PreferredTestQuery 24秒
根据这个结果,如果确实需要设置TestConnectionOnCheckout的话,一定要设置AutomaticTestTable,至于PreferredTestQuery,可有可无,不设置也行。