首页 > 代码库 > PLSQL_性能优化系列15_Oracle Connection Management连接管理

PLSQL_性能优化系列15_Oracle Connection Management连接管理

2014-09-25 BaoXinjian

一、摘要


在官方文档《oracle performance tuning guide》中提到Connecting to the database is an expensive operation that is highly unscalable。

数据库的连接操作是昂贵的,且难以扩展(支持大量并发)。

感觉上一个数据库登录操作是瞬间的事,它有多昂贵呢?

简单说,监听器收到远程连接请求后,转给server process;

对于每个session数据库都会生成一个server process,要为session分配内存,要进行鉴权、审计

另外在一个session中,可以采用一些方法重用游标,

例如PLSQL程序,

所有static sql都是被cache的,重复调用时不会进行soft parse;

有时可以设置session_cached_cursor参数减少soft parse。

因此如果一个程序使用短连接,频繁logon/logoff,是无法用到这些特性的。这是短连接的另一坏处。

尽管这是个很简单易懂的问题,但设计人员还是应该有‘连接管理‘的概念,避免短连接的危害。在某个在用生产系统上,我们还是能看到短连接:

grep ‘<txt>22-OCT-2012 14:47‘ log.xml|wc

102 1220 18141

每分钟100多个连接,光是处理连接请求,可能就消耗了半个cpu。

 

二、连接管理


那么应用设计中该怎样进行连接管理呢

(1) 简单的应用,或者c/s结构的应用,在启动应用(界面打开)时建立连接,应用关闭时才终止连接。这样正常情况下,一个终端1天才发起1-2次连接。

(2) Java程序可以使用连接池,能够在多个线程间共享。

(3) 目前大多数系统采用中间件(websphere、weblogic),使用连接池(connection pool),每发起请求时,从连接池中获取连接句柄,不需要不断建立新连接。

PLSQL_性能优化系列15_Oracle Connection Management连接管理