數(shù)據(jù)庫(kù)連接池實(shí)現(xiàn)和常見連接池

最原始的數(shù)據(jù)庫(kù)連接就是我們打開一個(gè)連接丑瞧,使用過(guò)后再關(guān)閉該鏈接來(lái)釋放資源藐唠。頻繁的新建打開再關(guān)閉連接對(duì)jvm和數(shù)據(jù)庫(kù)都有一定的資源負(fù)荷憔涉,尤其是應(yīng)用壓力比較大的時(shí)候占用過(guò)多的資源容易產(chǎn)生性能問(wèn)題奶是。所以引入數(shù)據(jù)庫(kù)連接池基矮,它的原理就是:先打開一定數(shù)量的數(shù)據(jù)庫(kù)連接掏父,當(dāng)使用的時(shí)候分配給使用者笋轨,使用結(jié)束后返回給連接池,注意返回的時(shí)候不需要關(guān)閉這些連接赊淑,而是準(zhǔn)備給下一個(gè)調(diào)用者分配爵政。這樣就省去了大量的數(shù)據(jù)庫(kù)連接打開和關(guān)閉的操作,提升了系統(tǒng)的性能陶缺。
最小連接數(shù):應(yīng)用啟動(dòng)后就打開的數(shù)據(jù)庫(kù)連接的數(shù)量以及后續(xù)最小維持的連接數(shù)
最大連接數(shù):應(yīng)用能夠打開的最多的連接數(shù)
連接增長(zhǎng)數(shù):應(yīng)用每次打開新連接的個(gè)數(shù)

最小連接數(shù)是連接池一直保持的數(shù)據(jù)連接钾挟。如果應(yīng)用程序?qū)?shù)據(jù)庫(kù)連接的使用量不大,將會(huì)有大量的數(shù)據(jù)庫(kù)連接資源被浪費(fèi)掉饱岸。
最大連接數(shù)是連接池能申請(qǐng)的最大連接數(shù)掺出。如果數(shù)據(jù)連接請(qǐng)求超過(guò)此數(shù),后面的數(shù)據(jù)連接請(qǐng)求將被加入到等待隊(duì)列中苫费,這會(huì)影響之后的數(shù)據(jù)庫(kù)操作汤锨。

如果最小連接數(shù)與最大連接數(shù)相差太大,那么百框,最先的連接請(qǐng)求將會(huì)獲利闲礼,之后超過(guò)最小連接數(shù)量的連接請(qǐng)求等價(jià)于建立一個(gè)新的數(shù)據(jù)庫(kù)連接。不過(guò)铐维,這些大于最小連接數(shù)的數(shù)據(jù)庫(kù)連接在使用完不會(huì)馬上被釋放柬泽,它將被放到連接池中等待重復(fù)使用或是空閑超時(shí)后被釋放。

上面的解釋嫁蛇,可以這樣理解:數(shù)據(jù)庫(kù)池連接數(shù)量一直保持一個(gè)不少于最小連接數(shù)的數(shù)量锨并,當(dāng)數(shù)量不夠時(shí),數(shù)據(jù)庫(kù)會(huì)創(chuàng)建一些連接棠众,直到一個(gè)最大連接數(shù)琳疏,之后連接數(shù)據(jù)庫(kù)就會(huì)等待。

假如項(xiàng)目最大并發(fā)3000闸拿,想知道怎么設(shè)置需要
把系統(tǒng)運(yùn)行起來(lái)空盼,你自己寫監(jiān)聽,統(tǒng)計(jì)一段時(shí)間內(nèi)的連接池新荤,然后查看最大的揽趾,最小的和平均值,根據(jù)這些獲得的參數(shù)信息來(lái)確定苛骨。

舉個(gè)例子說(shuō)明連接池的運(yùn)作:
假設(shè)設(shè)置了最小和最大的連接為10篱瞎,20苟呐,那么應(yīng)用一旦啟動(dòng)則首先打開10個(gè)數(shù)據(jù)庫(kù)連接,但注意此時(shí)數(shù)據(jù)庫(kù)連接池的正在使用數(shù)字為0--因?yàn)槟悴]有使用這些連接俐筋,而空閑的數(shù)量則是10牵素。然后你開始登錄,假設(shè)登錄代碼使用了一個(gè)連接進(jìn)行查詢澄者,那么此時(shí)數(shù)據(jù)庫(kù)連接池的正在使用數(shù)字為1笆呆、空閑數(shù)為9,這并不需要從數(shù)據(jù)庫(kù)打開連接--因?yàn)檫B接池已經(jīng)準(zhǔn)備好了10個(gè)給你留著呢粱挡。登錄結(jié)束了赠幕,當(dāng)前連接池的連接數(shù)量是多少?當(dāng)然是0询筏,因?yàn)槟莻€(gè)連接隨著事務(wù)的結(jié)束已經(jīng)返還給連接池了榕堰。然后同時(shí)有11個(gè)人在同一秒進(jìn)行登錄,會(huì)發(fā)生什么:連接池從數(shù)據(jù)庫(kù)新申請(qǐng)(打開)了一個(gè)連接嫌套,連同另外的10個(gè)一并送出逆屡,這個(gè)瞬間連接池的使用數(shù)是11個(gè),不過(guò)沒關(guān)系正常情況下過(guò)一會(huì)兒又會(huì)變成0踱讨。如果同時(shí)有21個(gè)人登錄呢康二?那第21個(gè)人就只能等前面的某個(gè)人登錄完畢后釋放連接給他。這時(shí)連接池開啟了20個(gè)數(shù)據(jù)庫(kù)連接--雖然很可能正在使用數(shù)量的已經(jīng)降為0勇蝙,那么20個(gè)連接會(huì)一直保持嗎?當(dāng)然不挨约,連接池會(huì)在一定時(shí)間內(nèi)關(guān)閉一定量的連接還給數(shù)據(jù)庫(kù)味混,在這個(gè)例子里數(shù)字是20-10=10,因?yàn)橹恍枰3肿钚∵B接數(shù)就好了诫惭,而這個(gè)時(shí)間周期也是連接池里配置的翁锡。

DBCP
DBCP是一個(gè)依賴Jakarta commons-pool對(duì)象池機(jī)制的數(shù)據(jù)庫(kù)連接池.DBCP可以直接的在應(yīng)用程序用使用

可以設(shè)置最大和最小連接,連接等待時(shí)間等夕土,基本功能都有馆衔,此連接池的持續(xù)運(yùn)行的穩(wěn)定性還是可以,不過(guò)速度稍慢怨绣,在大并發(fā)量的壓力下穩(wěn)定性有所下降角溃,此外不提供連接池監(jiān)控

http://homepages.nildram.co.uk/~slink/java/DBPool/

C3P0
C3P0是一個(gè)開放源代碼的JDBC連接池,它在lib目錄中與Hibernate一起發(fā)布,包括了實(shí)現(xiàn)jdbc3和jdbc2擴(kuò)展規(guī)范說(shuō)明的Connection 和Statement 池的DataSources 對(duì)象篮撑。

連接池可以設(shè)置最大和最小連接减细,連接等待時(shí)間等,基本功能都有赢笨,連接池的持續(xù)運(yùn)行的穩(wěn)定性相當(dāng)不錯(cuò)未蝌,在大并發(fā)量的壓力下穩(wěn)定性也有一定保證驮吱,此外不提供連接池監(jiān)控。

http://sourceforge.net/projects/c3p0

Proxool
這是一個(gè)Java SQL Driver驅(qū)動(dòng)程序萧吠,提供了對(duì)你選擇的其它類型的驅(qū)動(dòng)程序的連接池封裝左冬。可以非常簡(jiǎn)單的移植到現(xiàn)存的代碼中纸型。完全可配置拇砰。快速绊袋,成熟毕匀,健壯“┍穑可以透明地為你現(xiàn)存的JDBC驅(qū)動(dòng)程序增加連接池功能皂岔。
連接池可以設(shè)置最大和最小連接,連接等待時(shí)間等展姐,基本功能都有躁垛,連接池的持續(xù)運(yùn)行的穩(wěn)定性有一定問(wèn)題,有一個(gè)優(yōu)勢(shì)--連接池監(jiān)控
http://proxool.sourceforge.net/

BoneCP
BoneCP是一個(gè)快速圾笨,開源的數(shù)據(jù)庫(kù)連接池教馆。幫你管理數(shù)據(jù)連接讓你的應(yīng)用程序能更快速地訪問(wèn)數(shù)據(jù)庫(kù)。比C3P0/DBCP連接池快25倍
一種新的數(shù)據(jù)連接技術(shù)擂达,以其效率高土铺,速度 快著稱,連接池可以設(shè)置最大和最小連接板鬓,連接等待時(shí)間等悲敷,基本功能都有
http://jolbox.com/about.html

參數(shù)說(shuō)明

DBCP
dataSource: 要連接的 datasource (通常我們不會(huì)定義在 server.xml)
defaultAutoCommit: 對(duì)于事務(wù)是否 autoCommit, 默認(rèn)值為 true
defaultReadOnly: 對(duì)于數(shù)據(jù)庫(kù)是否只能讀取, 默認(rèn)值為 false
driverClassName:連接數(shù)據(jù)庫(kù)所用的 JDBC Driver Class
maxActive: 可以從對(duì)象池中取出的對(duì)象最大個(gè)數(shù),為0則表示沒有限制俭令,默認(rèn)為8
maxIdle: 最大等待連接中的數(shù)量,設(shè) 0 為沒有限制 (對(duì)象池中對(duì)象最大個(gè)數(shù))
minIdle:對(duì)象池中對(duì)象最小個(gè)數(shù)
maxWait: 最大等待秒數(shù), 單位為 ms, 超過(guò)時(shí)間會(huì)丟出錯(cuò)誤信息
password: 登陸數(shù)據(jù)庫(kù)所用的密碼
url: 連接數(shù)據(jù)庫(kù)的 URL
username: 登陸數(shù)據(jù)庫(kù)所用的帳號(hào)
validationQuery: 驗(yàn)證連接是否成功, SQL SELECT 指令至少要返回一行
removeAbandoned: 是否自我中斷, 默認(rèn)是 false
removeAbandonedTimeout: 幾秒后會(huì)自我中斷, removeAbandoned 必須為 true
logAbandoned: 是否記錄中斷事件, 默認(rèn)為 false
minEvictableIdleTimeMillis:大于0 后德,進(jìn)行連接空閑時(shí)間判斷,或?yàn)?抄腔,對(duì)空閑的連接不進(jìn)行驗(yàn)證瓢湃;默認(rèn)30分鐘
timeBetweenEvictionRunsMillis:失效檢查線程運(yùn)行時(shí)間間隔,如果小于等于0赫蛇,不會(huì)啟動(dòng)檢查線程绵患,默認(rèn)-1
testOnBorrow:取得對(duì)象時(shí)是否進(jìn)行驗(yàn)證,檢查對(duì)象是否有效棍掐,默認(rèn)為fals
etestOnReturn:返回對(duì)象時(shí)是否進(jìn)行驗(yàn)證藏雏,檢查對(duì)象是否有效,默認(rèn)為false
testWhileIdle:空閑時(shí)是否進(jìn)行驗(yàn)證,檢查對(duì)象是否有效掘殴,默認(rèn)為false
initialSize:初始化線程數(shù)

C3P0
acquireIncrement: 當(dāng)連接池中的連接耗盡的時(shí)候c3p0一次同時(shí)獲取的連接數(shù)赚瘦。Default: 3
acquireRetryAttempts: 定義在從數(shù)據(jù)庫(kù)獲取新連接失敗后重復(fù)嘗試的次數(shù)。Default: 30
acquireRetryDelay: 兩次連接中間隔時(shí)間奏寨,單位毫秒起意。Default: 1000
autoCommitOnClose: 連接關(guān)閉時(shí)默認(rèn)將所有未提交的操作回滾。Defaul t: false
automaticTestTable: c3p0將建一張名為Test的空表病瞳,并使用其自帶的查詢語(yǔ)句進(jìn)行測(cè)試揽咕。如果定義了這個(gè)參數(shù)那么屬性preferredTestQuery將被忽略。你不 能在這張Test表上進(jìn)行任何操作套菜,它將只供c3p0測(cè)試使用亲善。Default: null
breakAfterAcquireFailure: 獲取連接失敗將會(huì)引起所有等待連接池來(lái)獲取連接的線程拋出異常。但是數(shù)據(jù)源仍有效保留逗柴,并在下次調(diào)用getConnection()的時(shí)候繼續(xù)嘗試獲取連 接蛹头。如果設(shè)為true,那么在嘗試獲取連接失敗后該數(shù)據(jù)源將申明已斷開并永久關(guān)閉戏溺。Default: false
checkoutTimeout:當(dāng)連接池用完時(shí)客戶端調(diào)用getConnection()后等待獲取新連接的時(shí)間渣蜗,超時(shí)后將拋出SQLException,如設(shè)為0則無(wú)限期等待。單位毫秒旷祸。Default: 0
connectionTesterClassName: 通過(guò)實(shí)現(xiàn)ConnectionTester或QueryConnectionT ester的類來(lái)測(cè)試連接耕拷。類名需制定全路徑。Default: com.mchange.v2.c3p0.impl.Def aultConnectionTester
factoryClassLocation: 指定c3p0 libraries的路徑托享,如果(通常都是這樣)在本地即可獲得那么無(wú)需設(shè)置骚烧,默認(rèn)null即可Default: null
idleConnectionTestPeriod: 每60秒檢查所有連接池中的空閑連接。Defaul t: 0
initialPoolSize: 初始化時(shí)獲取三個(gè)連接闰围,取值應(yīng)在minPoolSize與maxPoolSize之間止潘。Default: 3
maxIdleTime: 最大空閑時(shí)間,60秒內(nèi)未使用則連接被丟棄。若為0則永不丟棄辫诅。Default: 0
maxPoolSize: 連接池中保留的最大連接數(shù)。Default: 15
maxStatements: JDBC的標(biāo)準(zhǔn)參數(shù)涧狮,用以控制數(shù)據(jù)源內(nèi)加載的PreparedSt atements數(shù)量炕矮。但由于預(yù)緩存的statements屬于單個(gè)connection而不是整個(gè)連接池。所以設(shè)置這個(gè)參數(shù)需要考慮到多方面的因素者冤。如 果maxStatements與maxStatementsPerConnection均為0肤视,則緩存被關(guān)閉。Default: 0
maxStatementsPerConnection: maxStatementsPerConnection定義了連接池內(nèi)單個(gè)連接所擁有的最大緩存statements數(shù)涉枫。Default: 0
numHelperThreads:c3p0是異步操作的邢滑,緩慢的JDBC操作通過(guò)幫助進(jìn)程完成。擴(kuò)展這些操作可以有效的提升性能通過(guò)多線程實(shí)現(xiàn)多個(gè)操作同時(shí)被執(zhí)行愿汰。Default: 3
overrideDefaultUser:當(dāng)用戶調(diào)用getConnection()時(shí)使root用戶成為去獲取連接的用戶困后。主要用于連接池連接非c3p0的數(shù)據(jù)源時(shí)乐纸。Default: null
overrideDefaultPassword:與overrideDefaultUser參數(shù)對(duì)應(yīng)使用的一個(gè)參數(shù)。Default: null
password:密碼摇予。Default: null
user:用戶名汽绢。Default: null
preferredTestQuery:定義所有連接測(cè)試都執(zhí)行的測(cè)試語(yǔ)句。在使用連接測(cè)試的情況下這個(gè)一顯著提高測(cè)試速度侧戴。注意:測(cè)試的表必須在初始數(shù)據(jù)源的時(shí)候就存在宁昭。Default: null
propertyCycle:用戶修改系統(tǒng)配置參數(shù)執(zhí)行前最多等待300秒。Defaul t: 300
testConnectionOnCheckout:因性能消耗大請(qǐng)只在需要的時(shí)候使用它酗宋。如果設(shè)為true那么在每個(gè)connection提交 的時(shí)候都將校驗(yàn)其有效性积仗。建議使用idleConnectio nTestPeriod或automaticTestTable等方法來(lái)提升連接測(cè)試的性能。Default: false
testConnectionOnCheckin:如果設(shè)為true那么在取得連接的同時(shí)將校驗(yàn)連接的有效性蜕猫。Default: false

Proxool
acquireIncrement: 當(dāng)連接池中的連接耗盡的時(shí)候c3p0一次同時(shí)獲取的連接數(shù)寂曹。Default: 3
fatal-sql-exception : 它是一個(gè)逗號(hào)分割的信息片段.當(dāng)一個(gè)SQL異常發(fā)生時(shí),他的異常信息將與這個(gè)信息片段進(jìn)行比較.如果在片段中存在,那么這個(gè)異常將被認(rèn)為是個(gè)致命錯(cuò)誤 (Fatal SQL Exception ).這種情況下,數(shù)據(jù)庫(kù)連接將要被放棄.無(wú)論發(fā)生什么,這個(gè)異常將會(huì)被重?cái)S以提供給消費(fèi)者.用戶最好自己配置一個(gè)不同的異常來(lái)拋出.fatal-sql-exception-wrapper-class : 正如上面所說(shuō),你最好配置一個(gè)不同的異常來(lái)重?cái)S.利用這個(gè)屬性,用戶可以包裝SQLException,使他變成另外一個(gè)異常.這個(gè)異常或者繼承 SQLException或者繼承字RuntimeException.proxool 自帶了2個(gè)實(shí)現(xiàn):'org.logicalcobwebs.proxool .FatalSQLException' 和'org.logicalcobweb s.proxool .FatalRuntimeException' .后者更合適.
house-keeping-sleep-time : house keeper 保留線程處于睡眠狀態(tài)的最長(zhǎng)時(shí)間,house keeper 的職責(zé)就是檢查各個(gè)連接的狀態(tài),并判斷是否需要銷毀或者創(chuàng)建.
house-keeping-test-sql : 如果發(fā)現(xiàn)了空閑的數(shù)據(jù)庫(kù)連接.house keeper 將會(huì)用這個(gè)語(yǔ)句來(lái)測(cè)試.這個(gè)語(yǔ)句最好非车で拢快的被執(zhí)行.如果沒有定義,測(cè)試過(guò)程將會(huì)被忽略稀颁。
injectable-connection-interface : 允許proxool 實(shí)現(xiàn)被代理的connection對(duì)象法.
injectable-statement-interface : 允許proxool 實(shí)現(xiàn)被代理的Statement 對(duì)象方法.
injectable-prepared-statement-interface : 允許proxool 實(shí)現(xiàn)被代理的PreparedS tatement 對(duì)象方法.
injectable-callable-statement-interface : 允許proxool 實(shí)現(xiàn)被代理的CallableStat ement 對(duì)象方法.
jmx : 如果屬性為true,就會(huì)注冊(cè)一個(gè)消息Bean到j(luò)ms服務(wù)楣黍,消息Bean對(duì)象名: "Proxool:type=Pool, name=<alias>". 默認(rèn)值為false.jmx-agent-id : 一個(gè)逗號(hào)分隔的JMX代理列表(如使用MbeanServerFactory .fi ndMBeanServer(String agentId)注冊(cè)的連接池匾灶。)這個(gè)屬性是僅當(dāng)"jmx"屬性設(shè)置為"true"才有效。所有注冊(cè)jmx服務(wù)器使用這個(gè)屬性是不確定的
jndi-name : 數(shù)據(jù)源的名稱
maximum-active-time : 如果housekeeper 檢測(cè)到某個(gè)線程的活動(dòng)時(shí)間大于這個(gè)數(shù)值.它將會(huì)殺掉這個(gè)線程.所以確認(rèn)一下你的服務(wù)器的帶寬.然后定一個(gè)合適的值.默認(rèn)是5分鐘.
maximum-connection-count : 最大的數(shù)據(jù)庫(kù)連接數(shù).
maximum-connection-lifetime : 一個(gè)線程的最大壽命.
minimum-connection-count : 最小的數(shù)據(jù)庫(kù)連接數(shù)
overload-without-refusal-lifetime : 這可以幫助我們確定連接池的狀態(tài)租漂。如果我們已經(jīng)拒絕了一個(gè)連接在這個(gè)設(shè)定值(毫秒),然后被認(rèn)為是超載阶女。默認(rèn)為60秒。
prototype-count : 連接池中可用的連接數(shù)量.如果當(dāng)前的連接池中的連接少于這個(gè)數(shù)值.新的連接將被建立(假設(shè)沒有超過(guò)最大可用數(shù)).例如.我們有3個(gè)活動(dòng)連接2個(gè)可用連接, 而我們的prototype-count是4,那么數(shù)據(jù)庫(kù)連接池將試圖建立另外2個(gè)連接.這和 minimum-connection-count不同. minimum-connect ion-count把活動(dòng)的連接也計(jì)算在內(nèi).prototype-count 是spare connections 的數(shù)量.
recently-started-threshold :這可以幫助我們確定連接池的狀態(tài),連接數(shù)少還是多或超載哩治。只要至少有一個(gè)連接已開始在此值(毫秒)內(nèi),或者有一些多余的可用連接,那么我們假設(shè)連接池是開啟的秃踩。默認(rèn)為60秒
simultaneous-build-throttle :這是我們可一次建立的最大連接數(shù)。那就是新增的連接請(qǐng)求,但還沒有可供使用的連接业筏。由于連接可以使用多線程,在有限的時(shí)間之間建立聯(lián)系從而帶來(lái)可用連 接憔杨,但是我們需要通過(guò)一些方式確認(rèn)一些線程并不是立即響應(yīng)連接請(qǐng)求的,默認(rèn)是10蒜胖。
statistics : 連接池使用狀況統(tǒng)計(jì)吮炕。 參數(shù)“10s,1m,1d”
statistics-log-level :日志統(tǒng)計(jì)跟蹤類型蕉堰。 參數(shù)“ERROR”或 “INFO”
test-before-use : 如果為true旧蛾,在每個(gè)連接被測(cè)試前都會(huì)服務(wù)這個(gè)連接瞬项,如果一個(gè)連接失敗,那么將被丟棄朋沮,另一個(gè)連接將會(huì)被處理蛇券,如果所有連接都失敗,一個(gè)新的連接將會(huì)被建立。否則將會(huì)拋出一個(gè)SQLException異常纠亚。
test-after-use : 如果為true塘慕,在每個(gè)連接被測(cè)試后都會(huì)服務(wù)這個(gè)連接,使其回到連接池中菜枷,如果連接失敗苍糠,那么將被廢棄。
trace : 如果為true,那么每個(gè)被執(zhí)行的SQL語(yǔ)句將會(huì)在執(zhí)行期被log記錄(DEBUG LEVEL).你也可以注冊(cè)一個(gè)ConnectionListener (參看ProxoolFacade)得到這些信息

BoneCP
acquireIncrement: 當(dāng)連接池中的連接耗盡的時(shí)候c3p0一次同時(shí)獲取的連接數(shù)啤誊。Default: 3
driveClass:數(shù)據(jù)庫(kù)驅(qū)動(dòng)
jdbcUrl:響應(yīng)驅(qū)動(dòng)的jdbcUrl
username:數(shù)據(jù)庫(kù)的用戶名
password:數(shù)據(jù)庫(kù)的密碼
idleConnectionTestPeriod:檢查數(shù)據(jù)庫(kù)連接池中控線連接的間隔時(shí)間岳瞭,單位是分,默認(rèn)值:240蚊锹,如果要取消則設(shè)置為0
idleMaxAge:連接池中未使用的鏈接最大存活時(shí)間瞳筏,單位是分,默認(rèn)值:60牡昆,如果要永遠(yuǎn)存活設(shè)置為0
maxConnectionsPerPartition:每個(gè)分區(qū)最大的連接數(shù)
minConnectionsPerPartition:每個(gè)分區(qū)最小的連接數(shù)
partitionCount:分區(qū)數(shù)姚炕,默認(rèn)值2,最小1丢烘,推薦3-4柱宦,視應(yīng)用而定
acquireIncrement:每次去拿數(shù)據(jù)庫(kù)連接的時(shí)候一次性要拿幾個(gè),默認(rèn)值:2
statementsCacheSize:緩存prepared statements的大小播瞳,默認(rèn)值:0
releaseHelperThreads:每個(gè)分區(qū)釋放鏈接助理進(jìn)程的數(shù)量掸刊,默認(rèn)值:3,除非你的一個(gè)數(shù)據(jù)庫(kù)連接的時(shí)間內(nèi)做了很多工作赢乓,不然過(guò)多的助理進(jìn)程會(huì)影響你的性能

性能比較:

DBCP
C3P0
Proxool
BoneCP

模擬5個(gè)線程循環(huán)10次并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)
用時(shí)1181ms
用時(shí)860ms
用時(shí)1563ms
用時(shí)31ms

模擬10個(gè)線程循環(huán)10次并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)
用時(shí)1188ms
用時(shí)953ms
用時(shí)1625ms
用時(shí)63ms

模擬30個(gè)線程循環(huán)10次并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)
用時(shí)1250ms
用時(shí)1047ms
用時(shí)1657ms
用時(shí)156ms

模擬50個(gè)線程循環(huán)10次并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)
用時(shí)1406ms
用時(shí)1343ms
用時(shí)1843ms
用時(shí)172ms

模擬100個(gè)線程循環(huán)10次并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)
用時(shí)1641ms
用時(shí)2703ms
用時(shí)2031ms
用時(shí)532ms

模擬200個(gè)線程循環(huán)10次并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)
用時(shí)2093ms
用時(shí)4891ms
用時(shí)2406ms
用時(shí)936ms

模擬500個(gè)線程循環(huán)10次并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)
用時(shí)3219ms
用時(shí)11703ms
用時(shí)3343ms
用時(shí)1922ms

模擬800個(gè)線程循環(huán)10次并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)
用時(shí)4688ms
用時(shí)12063ms
用時(shí)4141ms
用時(shí)2859ms

模擬1000個(gè)線程循環(huán)10次并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)
用時(shí)5187ms
用時(shí)12563ms
用時(shí)4703m
用時(shí)3610ms

模擬3000個(gè)線程循環(huán)10次并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)
用時(shí)14094ms
用時(shí)16297ms
用時(shí)11344ms
用時(shí)11391ms

模擬5000個(gè)線程循環(huán)10次并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)
用時(shí)23610ms
用時(shí)22032ms
用時(shí)20125ms
用時(shí)17125ms

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末忧侧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子牌芋,更是在濱河造成了極大的恐慌蚓炬,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件躺屁,死亡現(xiàn)場(chǎng)離奇詭異肯夏,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)犀暑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門熄捍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人母怜,你說(shuō)我怎么就攤上這事「堪兀” “怎么了苹熏?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我轨域,道長(zhǎng)袱耽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任干发,我火速辦了婚禮朱巨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘枉长。我一直安慰自己冀续,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布必峰。 她就那樣靜靜地躺著洪唐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吼蚁。 梳的紋絲不亂的頭發(fā)上凭需,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音肝匆,去河邊找鬼粒蜈。 笑死,一個(gè)胖子當(dāng)著我的面吹牛旗国,可吹牛的內(nèi)容都是我干的枯怖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼粗仓,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼嫁怀!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起借浊,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤塘淑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蚂斤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體存捺,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年曙蒸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捌治。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纽窟,死狀恐怖肖油,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情臂港,我是刑警寧澤森枪,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布视搏,位于F島的核電站,受9級(jí)特大地震影響县袱,放射性物質(zhì)發(fā)生泄漏浑娜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一式散、第九天 我趴在偏房一處隱蔽的房頂上張望筋遭。 院中可真熱鬧,春花似錦暴拄、人聲如沸漓滔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)次和。三九已至,卻和暖如春那伐,著一層夾襖步出監(jiān)牢的瞬間踏施,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工罕邀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留畅形,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓诉探,卻偏偏與公主長(zhǎng)得像日熬,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子肾胯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理竖席,服務(wù)發(fā)現(xiàn),斷路器敬肚,智...
    卡卡羅2017閱讀 134,626評(píng)論 18 139
  • 從三月份找實(shí)習(xí)到現(xiàn)在毕荐,面了一些公司,掛了不少艳馒,但最終還是拿到小米憎亚、百度、阿里弄慰、京東第美、新浪、CVTE陆爽、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,207評(píng)論 11 349
  • 前言 數(shù)據(jù)庫(kù)連接池在Java數(shù)據(jù)庫(kù)相關(guān)中間件產(chǎn)品群中什往,應(yīng)該算是底層最基礎(chǔ)的一類產(chǎn)品,作為企業(yè)應(yīng)用開發(fā)必不可少的組件...
    許da廣閱讀 7,156評(píng)論 2 27
  • 異常信息org.hibernate.exception.JDBCConnectionException: coul...
    yaoshiyou閱讀 3,146評(píng)論 0 0
  • 我一直覺得慌闭,咱兩之間别威,你付出的永遠(yuǎn)比我多永遠(yuǎn)都是你在照顧我第献,給我精心準(zhǔn)備生日禮物,處處都充滿你的心意兔港。你真的很用心...
    特稿部譚燕閱讀 289評(píng)論 0 1