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

連接(connection)影響MySQL性能

請問各位這個怎么解決,前幾天的面試題目

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

回答
編輯回答
傲嬌范

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

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


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

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

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


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

很顯然: tt2 < tt1

so,使用連接池可以解決因為執(zhí)行sql所帶來的額外開銷的問題!

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

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

  3. DBCP (Database Connection Pool)是一個依賴Jakarta commons-pool對象池機制的數(shù)據(jù)庫連接池,Tomcat的數(shù)據(jù)源使用的就是DBCP。目前 DBCP 有兩個版本分別是 1.3 和1.4。1.3 版本對應(yīng)的是 JDK 1.4-1.5 和 JDBC 3,而1.4 版本對應(yīng) JDK 1.6 和 JDBC 4。因此在選擇版本的時候要看看你用的是什么 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 是阿里巴巴開源的連接池,"馬爸爸"最近有點了,Druid 明明就是中國人開源的軟件,官方網(wǎng)頁竟然沒有找到中文文檔的入口,官網(wǎng)全英文!本來還想特地介紹一下 Druid,想了一下還是算了吧!

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

1.使用連接池

2.使用批量插入/查詢

2018年6月1日 21:23
編輯回答
獨白

使用客戶端連接池

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

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

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

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

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

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

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

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

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

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

2017年11月4日 10:02