通常,mysql的最大連接數(shù)默認是100, 最大可以達到16384。
創(chuàng)新互聯(lián)總部坐落于成都市區(qū),致力網(wǎng)站建設(shè)服務(wù)有成都做網(wǎng)站、網(wǎng)站設(shè)計、網(wǎng)絡(luò)營銷策劃、網(wǎng)頁設(shè)計、網(wǎng)站維護、公眾號搭建、小程序設(shè)計、軟件開發(fā)等為企業(yè)提供一整套的信息化建設(shè)解決方案。創(chuàng)造真正意義上的網(wǎng)站建設(shè),為互聯(lián)網(wǎng)品牌在互動行銷領(lǐng)域創(chuàng)造價值而不懈努力!
1、查看最大連接數(shù):
show variables like '%max_connections%';
2、修改最大連接數(shù)
方法一:修改配置文件。推薦方法一
進入MySQL安裝目錄 打開MySQL配置文件 my.ini 或 my.cnf查找 max_connections=100 修改為 max_connections=1000 服務(wù)里重起MySQL即可.
方法二:命令行修改。不推薦方法二
命令行登錄MySQL后。設(shè)置新的MySQL最大連接數(shù)為200:
MySQL set global max_connections=200。
這種方式有個問題,就是設(shè)置的最大連接數(shù)只在mysql當(dāng)前服務(wù)進程有效,一旦mysql重啟,又會恢復(fù)到初始狀態(tài)。因為mysql啟動后的初始化工作是從其配置文件中讀取數(shù)據(jù)的,而這種方式?jīng)]有對其配置文件做更改。
數(shù)據(jù)連接池是把數(shù)據(jù)庫連接放到中間服務(wù)器上,比如tomcat上,那么相當(dāng)于每次你操作數(shù)據(jù)庫的時候就不需要再"連接"到數(shù)據(jù)庫再進行相關(guān)操作,而是直接操作服務(wù)器上的"連接池",你可以根據(jù)字面意思進行理解,把數(shù)據(jù)庫當(dāng)做一條小溪,那么"連接池"就是一個"水池",這個水池里面的水是由事先架好的通向"小溪"的水管引進來的,所以,你想喝水的時候不必大老遠地跑到小溪邊上,而只要到這個水池就可以.這樣的話就可以提高"效率".但是數(shù)據(jù)池一般是用在數(shù)據(jù)量比較大的項目,這樣可以提高程序的效率,想一想這樣的話是不是就把相關(guān)的負荷加在了服務(wù)器上,因為這個"池"是在服務(wù)器上的,對于小數(shù)據(jù)量處理的項目不推薦使用,應(yīng)為過于頻繁的請求會使得服務(wù)器負載加重
關(guān)系:
你 --"水池"--小溪(快速喝水)
程序--"數(shù)據(jù)池"--數(shù)據(jù)庫(快速存取)
就是這樣,也不用把它想神秘了,我是這樣理解的,也就這樣說了,希望對你有幫助
如果你想在action里判斷數(shù)據(jù)庫是否鏈接,只能創(chuàng)建一個標(biāo)記。全局變量。比如isConn.當(dāng)創(chuàng)建鏈接的時候把這個標(biāo)記設(shè)置為1.關(guān)閉數(shù)據(jù)庫的時候標(biāo)記重置 為0.這樣在action里不用獲取connection對像,直接判斷這個全局標(biāo)記就可以了。
還有就是在創(chuàng)建鏈接之前先判斷這個標(biāo)記是否是0。在關(guān)閉鏈接之前判斷這個標(biāo)記是否為1
數(shù)據(jù)庫連接池(Connection pooling)是程序啟動時建立足夠的數(shù)據(jù)庫連接,并將這些連接組成一個連接池,由程序動態(tài)地對池中的連接進行申請,使用,釋放。
簡單的說:創(chuàng)建數(shù)據(jù)庫連接是一個很耗時的操作,也容易對數(shù)據(jù)庫造成安全隱患。所以,在程序初始化的時候,集中創(chuàng)建多個數(shù)據(jù)庫連接,并把他們集中管理,供程序使用,可以保證較快的數(shù)據(jù)庫讀寫速度,還更加安全可靠。
不使用數(shù)據(jù)庫連接池
如果不使用數(shù)據(jù)庫連接池,對于每一次SQL操作,都要走一遍下面完整的流程:
1.TCP建立連接的三次握手(客戶端與 MySQL服務(wù)器的連接基于TCP協(xié)議)
2.MySQL認證的三次我收
3.真正的SQL執(zhí)行
4.MySQL的關(guān)閉
5.TCP的四次握手關(guān)閉
可以看出來,為了執(zhí)行一條SQL,需要進行大量的初始化與關(guān)閉操作
使用數(shù)據(jù)庫連接池
如果使用數(shù)據(jù)庫連接池,那么會 事先申請(初始化)好 相關(guān)的數(shù)據(jù)庫連接,然后在之后的SQL操作中會復(fù)用這些數(shù)據(jù)庫連接,操作結(jié)束之后數(shù)據(jù)庫也不會斷開連接,而是將數(shù)據(jù)庫對象放回到數(shù)據(jù)庫連接池中
資源重用:由于數(shù)據(jù)庫連接得到重用,避免了頻繁的創(chuàng)建、釋放連接引起的性能開銷,在減少系統(tǒng)消耗的基礎(chǔ)上,另一方面也增進了系統(tǒng)運行環(huán)境的平穩(wěn)性(減少內(nèi)存碎片以及數(shù)據(jù)庫臨時進程/線程的數(shù)量)。
更快的系統(tǒng)響應(yīng)速度:數(shù)據(jù)庫連接池在初始化過程中,往往已經(jīng)創(chuàng)建了若干數(shù)據(jù)庫連接置于池中備用。 此時連接的初始化工作均已完成。對于業(yè)務(wù)請求處理而言,直接利用現(xiàn)有可用連接,避免了從數(shù)據(jù)庫連接初始化和釋放過程的開銷,從而縮減了系統(tǒng)整體響應(yīng)時間。
統(tǒng)一的連接管理,避免數(shù)據(jù)庫連接泄露:在較為完備的數(shù)據(jù)庫連接池實現(xiàn)中,可根據(jù)預(yù)先的連接占用超時設(shè)定,強制收回被占用連接。從而避免了常規(guī)數(shù)據(jù)庫連接操作中可能出現(xiàn)的資源泄露。
如果說你的服務(wù)器CPU是4核i7的,連接池大小應(yīng)該為((4*2)+1)=9
相關(guān)視頻推薦
90分鐘搞懂?dāng)?shù)據(jù)庫連接池技術(shù)|linux后臺開發(fā)
《tcp/ip詳解卷一》: 150行代碼拉開協(xié)議棧實現(xiàn)的篇章
學(xué)習(xí)地址:C/C++Linux服務(wù)器開發(fā)/后臺架構(gòu)師【零聲教育】-學(xué)習(xí)視頻教程-騰訊課堂
需要C/C++ Linux服務(wù)器架構(gòu)師學(xué)習(xí)資料加qun 812855908 獲?。ㄙY料包括 C/C++,Linux,golang技術(shù),Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒體,CDN,P2P,K8S,Docker,TCP/IP,協(xié)程,DPDK,ffmpeg 等),免費分享
源碼下載
下載方式:(Github中下載)
db_pool目錄下有兩個目錄,mysql_pool目錄為MySQL連接池代碼,redis_pool為redis連接池代碼
下面介紹mysql_pool
CDBConn解析
概念: 代表一個數(shù)據(jù)連接對象實例
相關(guān)成員:
m_pDBPool:該數(shù)據(jù)庫連接對象所屬的數(shù)據(jù)庫連接池
構(gòu)造函數(shù): 綁定自己所屬于哪個數(shù)據(jù)庫連接池
Init()函數(shù): 創(chuàng)建數(shù)據(jù)庫連接句柄
CDBPool解析
概念:代表一個數(shù)據(jù)庫連接池
相關(guān)成員:
Init()函數(shù):常見指定數(shù)量的數(shù)據(jù)庫實例句柄,然后添加到m_free_list中,供后面使用
GetDBConn()函數(shù): 用于從空閑隊列中返回可以使用的數(shù)據(jù)庫連接句柄
RelDBConn()函數(shù): 程序使用完該數(shù)據(jù)庫句柄之后,將句柄放回到空閑隊列中
測試之前,將代碼中的數(shù)據(jù)庫地址、端口、賬號密碼等改為自己的(代碼中有好幾處)
進入MySQL, 創(chuàng)建mysql_pool_test數(shù)據(jù)庫
進入到mysql_pool目錄下, 創(chuàng)建一個build目錄并進入 :
然后輸入如下的命令進行編譯
之后就會在目錄下生成如下的可執(zhí)行文件
輸入如下兩條命令進行測試: 可以看到不使用數(shù)據(jù)庫連接池,整個操作耗時4秒左右;使用連接池之后,整個操作耗時2秒左右,提升了一倍
源碼下載
下面介紹redis_pool
測試
進入到redis_pool目錄下, 創(chuàng)建一個build目錄并進入 :
然后輸入如下的命令進行編譯
之后就會在目錄下生成如下的可執(zhí)行文件
輸入如下的命令進行測試: 可以看到不使用數(shù)據(jù)庫連接池,整個操作耗時182ms;使用連接池之后,整個操作耗時21ms,提升了很多
進入redis,可以看到我們新建的key:
1、把數(shù)據(jù)庫驅(qū)動包 copy 到 %CATALINA_HOME%\common\lib 下。
2、修改 %CATALINA_HOME%\conf\server.xml 文件,在 Host 節(jié)點下添加:
XML/HTML code?
!-- appName 為項目名 --!
Context path="/appName" docBase="appName" auth="Container"
Resource name="jdbc/MySQLDS" scope="Shareable"
type="javax.sql.DataSource"
url="jdbc:mysql://localhost:3306/test?useUnicode=truecharact-erEncoding=GBK"
driverClassName="com.mysql.jdbc.Driver"
username="root" password="111111"
maxWait="3000" maxIdle="100" maxActive="10" /
/Context
(或者在 %appName%\META-INF 下建立 context.xml,內(nèi)容為上面的代碼。)
3、修改 web.xml,在 web-app 節(jié)點下添加:
XML/HTML code?
import java.sql.Connection;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class DBUtil {
public Connection getConnection() throws Exception {
Context context = new InitialContext();
// 獲取數(shù)據(jù)源
DataSource ds = (DataSource) context.lookup("java:comp/env/jdbc/MySQLDS");
// 獲取數(shù)據(jù)庫連接
Connection conn = ds.getConnection();
if (conn != null !conn.isClosed()) {
return conn;
} else {
return null;
}
}
}
這是關(guān)于php進階到架構(gòu)之 swoole 系列學(xué)習(xí)課程:第三節(jié):mysql連接池
學(xué)習(xí)目標(biāo) :
了解什么是mysql連接池,以及mysql使用場景。能在實際工作使用連接池(數(shù)據(jù)庫連接池,redis連接池等等)解決高并發(fā)帶來的問題。
場景 :
每秒同時1000個并發(fā),但mysql數(shù)據(jù)庫同時只支持400個連接,這樣mysql就會宕機
解決方案 :
使用連接池,這個連接池建立了300個與mysql的連接對象,這1000個并發(fā)有序地共享連接池里的300個連接。
連接池的使用不但解決了mysql在高并發(fā)情況下宕機問題,還額外提高了性能。因為和mysql建立連接,消耗較大。使用連接池只需要連接一次mysql。
永不斷開,需要程序常駐內(nèi)存,這就需要借助swoole實現(xiàn)。
數(shù)據(jù)庫連接池是程序啟動時,建立足夠的數(shù)據(jù)庫連接,并將這些連接組成一個連接。由程序動態(tài)的對連接池中的連接進行申請,使用,釋放和回補。