1. 程式人生 > >【Oracle】 oracle數據庫的並發初步理解

【Oracle】 oracle數據庫的並發初步理解

數據交互 空閑 details cti 但是 art 網速慢 可見 就會



先從一個列子來說:我們經常聽到說某某網站的每天訪問用戶數有幾十,幾千,幾百萬甚至上千萬,同時在線用戶數有幾萬,幾十萬的。

從這個列子我們來分析,數據庫並發的概念。

首先,這兒有兩個名詞,一個是每天訪問的用戶數,一個是同時在線用戶數。那麽這兩個數據是不是就是數據庫的並發數呢?Oracle數據庫的一個相對比較穩定的並發數是200左右,也就是說一臺比較好的服務器,並發數在200時,還能夠正常的運行,不會死機。由此可見,上面兩個數據都不是並發數。

我們再來了解這兩個名詞的含義。

訪問用戶數:一個大型的網站,每天肯定是有很多人訪問的,每當有人進入這個網站時,訪問數就會加一,這就造成了訪問數很大。有人訪問,進入這個網站,肯定就是要查詢數據庫的,除非是純靜態的網站,一人訪問就會連接一次數據庫,從裏面拿出數據,這個時候就有並發了,並發數為1.如果還有人在此時此刻也訪問了,註意,此時此刻是指連接數據庫的時間,那麽並發再累加。但是,我們要明白一個事實,能夠做到在同一時刻訪問數據庫,是一件很困難的事情,總得有個時間的先後順序,但也不是沒有,只是數量不多而已,(比如,訪問數據庫的信息量比較大,第一個人還沒有斷開連接,又有人來訪問了,就造成了並發)一般也就在10以下,這個數據大多數服務器都能接收,所以造成並發過高的機率就很低了。


在線用戶數:指這個系統在某個時間點有多少個用戶正在登陸,登錄也就一瞬間的事兒,和訪問網站差不多,他登陸並不意味著要幹啥事,可能在發呆,也可能在嗑瓜子打遊戲。

並發指同時刻或同一秒鐘有多少個用戶正在對這個系統做操作並產生數據交互。比如論壇,一個用戶在寫帖子的時候,沒有和服務器發生數據交互,這時並發數+0,在他提交的那一瞬間,並發數+1;用戶在打開帖子的時候,並發數+1,因為他需要從服務器讀數據,瀏覽帖子時,並發數+0,因為數據已經下載到客戶端。

對於數據庫或中間層來說,上面的並發被轉譯為活動連接數。一個存在的連接不能稱為並發,因為它可能是空閑的,通過這個連接操作數據才算並發數

對於Oracle數據庫來說,一個並發數指一個狀態為Active的session,總用戶並發數指狀態為Active的非後臺Session的個數,你可以從gv$session中查到數據。

那麽怎麽來防止並發呢?在程序上我們是可以控制的,比如spring,連接池就是一個很好的東東,連接池裏有多的,就給你用,用完了,你就等著吧。當然等的時間不會太久,基本感覺不出來,但是,訪問的數據過大時,可能會給你造成一種自己網速慢的假象,其實是被人還沒下載完呢!

原文鏈接:oracle數據庫的並發初步理解

【Oracle】 oracle數據庫的並發初步理解