Sql最佳化(九) 程式的可擴充套件性-- 短連線的危害,以及資料庫連線(connection)管理

531968912發表於2016-09-13
在官方文件《oracle performance tuning guide》中提到Connecting to the database is an expensive operation that is highly unscalable。資料庫的連線操作是昂貴的,且難以擴充套件(支援大量併發)。
感覺上一個資料庫登入操作是瞬間的事,它有多昂貴呢?簡單說,監聽器收到遠端連線請求後,轉給server process;對於每個session資料庫都會生成一個server process,要為session分配記憶體,要進行鑑權、審計…[@more@]

另外在一個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),每發起請求時,從連線池中獲取連線控制程式碼,不需要不斷建立新連線。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-2124914/,如需轉載,請註明出處,否則將追究法律責任。

相關文章