最原始的數(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