首页 > 代码库 > 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连接管理