鍍金池/ 問答/數(shù)據(jù)庫/ 連接(connection)影響MySQL性能

連接(connection)影響MySQL性能

請(qǐng)問各位這個(gè)怎么解決,前幾天的面試題目

現(xiàn)象: 連接(connection)也是影響MySQL性能的重要一方面。MySQL客戶機(jī)與MySQL服務(wù)器之間的連接是MySQL客戶機(jī)與MySQL服務(wù)器反復(fù)握手的結(jié)果。每次'握手'都經(jīng)歷身份驗(yàn)證、權(quán)限驗(yàn)證等環(huán)節(jié),握手需要占用一定的網(wǎng)絡(luò)資源和MySQL服務(wù)器內(nèi)存資源。
針對(duì)以上現(xiàn)象,請(qǐng)?zhí)岢鼋鉀Q方案??

回答
編輯回答
傲嬌范

eg : 執(zhí)行100次 update sql

未使用連接池執(zhí)行sql


-- 步驟    建立連接(認(rèn)證、權(quán)限等)     執(zhí)行sql              銷毀連接
-- 耗時(shí): |<--------- t1 -------->|<------ t2 ----->|<------- t3 ------>

-- 總耗時(shí): tt1 = 100 *(t1 + t2 + t3) 

使用連接池執(zhí)行sql


-- 預(yù)先建立 5 連接并保存起來復(fù)用
-- 耗時(shí)   5 * t1  
-- 總耗時(shí): tt2 = (5 * t1) + 100 * t2
-- 注:連接池的連接可以復(fù)用,下次不需要在重新建立連接,創(chuàng)建一次即可

很顯然: tt2 < tt1

so,使用連接池可以解決因?yàn)閳?zhí)行sql所帶來的額外開銷的問題!

Java中常用的數(shù)據(jù)庫連接池

  1. C3P0是一個(gè)開放源代碼的JDBC連接池,它在lib目錄中與Hibernate一起發(fā)布,包括了實(shí)現(xiàn)jdbc3和jdbc2擴(kuò)展規(guī)范說明的Connection和Statement 池的DataSources對(duì)象。(主頁:http://sourceforge.net/projec...
  2. BoneCP 是一個(gè)開源的快速的 JDBC 連接池。BoneCP很小,只有四十幾K(運(yùn)行時(shí)需要log4j和Google Collections的支持,這二者加起來就不小了),而相比之下 C3P0 要六百多K。另外個(gè)人覺得 BoneCP有個(gè)缺點(diǎn)是,JDBC驅(qū)動(dòng)的加載是在連接池之外的,這樣在一些應(yīng)用服務(wù)器的配置上就不夠靈活。當(dāng)然,體積小并不是 BoneCP優(yōu)秀的原因,BoneCP 到底有什么突出的地方呢,請(qǐng)看看性能測試報(bào)告。(主頁:http://jolbox.com/

  3. DBCP (Database Connection Pool)是一個(gè)依賴Jakarta commons-pool對(duì)象池機(jī)制的數(shù)據(jù)庫連接池,Tomcat的數(shù)據(jù)源使用的就是DBCP。目前 DBCP 有兩個(gè)版本分別是 1.3 和1.4。1.3 版本對(duì)應(yīng)的是 JDK 1.4-1.5 和 JDBC 3,而1.4 版本對(duì)應(yīng) JDK 1.6 和 JDBC 4。因此在選擇版本的時(shí)候要看看你用的是什么 JDK版本了,功能上倒是沒有什么區(qū)別。(主頁:http://commons.apache.org/dbcp/
  4. Druid is a distributed, column-oriented, real-time analytics data store that is commonly used to power exploratory dashboards in multi-tenant environments. Druid excels as a data warehousing solution for fast aggregate queries on petabyte sized data sets. Druid supports a variety of flexible filters, exact calculations, approximate algorithms, and other useful calculations. Druid can load both streaming and batch data and integrates with Samza, Kafka, Storm, Spark, and Hadoop.(http://druid.io/)

這里特別說一下 Druid 是阿里巴巴開源的連接池,"馬爸爸"最近有點(diǎn)了,Druid 明明就是中國人開源的軟件,官方網(wǎng)頁竟然沒有找到中文文檔的入口,官網(wǎng)全英文!本來還想特地介紹一下 Druid,想了一下還是算了吧!

2018年7月31日 09:24
編輯回答
枕邊人

1.使用連接池

2.使用批量插入/查詢

2018年6月1日 21:23
編輯回答
獨(dú)白

使用客戶端連接池

連接池在java技術(shù)棧里很常見。
如:

連接池
https://en.wikipedia.org/wiki...

數(shù)據(jù)庫
https://en.wikipedia.org/wiki...

JDBC 數(shù)據(jù)庫連接池
https://docs.oracle.com/cd/E1...

java 常見的開源連接池實(shí)現(xiàn)

https://java-source.net/open-...

最近阿里的druid用的也比較多。

但其它語言就大不一樣了,比如PHP,似乎沒有聽說有用的。

2017年10月9日 20:40
編輯回答
墻頭草

使用連接池,就是長連接,同一個(gè)線程可以反復(fù)循環(huán)利用,只有線程建立連接的時(shí)候才需要握手校驗(yàn)

2017年11月4日 10:02