上一篇 <<<MySQL發(fā)展歷程與整體架構(gòu)
下一篇 >>>查詢和更新sql語句執(zhí)行原理
數(shù)據(jù)庫連接超時時間查詢
非交互式超時時間,如 JDBC 程序
show global variables like 'wait_timeout';
交互式超時時間扁凛,如數(shù)據(jù)庫工具
show global variables like 'interactive_timeout';
MySQL服務(wù)器默認的“wait_timeout”是28800秒即8小時,意味著如果一個連接的空閑時間超過8個小時沸毁,MySQL將自動斷開該連接。
8小時自動斷開引起的問題解決辦法
a.定時發(fā)送JDBC語句(不推薦)
b.增加 MySQL 的 wait_timeout 屬性的值 (不推薦)
修改mysql安裝目錄下的配置文件 my.ini文件(如果沒有此文件傻寂,復(fù)制“my-default.ini”文件息尺,生成“復(fù)件 my-default.ini”文件。將“復(fù)件 my-default.ini”文件重命名成“my.ini” )疾掰,在文件中設(shè)置:
wait_timeout=31536000
interactive_timeout=31536000
這兩個參數(shù)的默認值是8小時(60608=28800)搂誉。 注意: 1.wait_timeout的最大值只允許2147483 (24天左右),也可以使用mysql命令對這兩個屬性進行修改。
c.配置連接池(推薦)
使用數(shù)據(jù)庫連接池 自帶功能 定時清理空閑超時的jdbc連接静檬。
show global status like 'Thread%';
Threads_cached--- 服務(wù)器端緩存連接炭懊;
Threads_connected ---當(dāng)前打開的連接數(shù)
Threads_created ---創(chuàng)建的線程數(shù)
Threads_running---正在運行的線程
tips:
a、配置最小連接數(shù)5拂檩,最大連接數(shù)10侮腹,則會提前創(chuàng)建5個連接,當(dāng)不夠時會再次創(chuàng)建稻励,但不超過10個父阻。每個連接請求如果未使用則會自動回收銷毀,但會保持最小5個連接數(shù)不會銷毀。
b加矛、數(shù)據(jù)庫連接池和線程池一樣履婉,使用鏈表形式存儲(前面是少使用的,后面是最近剛被使用的)斟览。
--獲取連接:每次獲取鏈表的頭結(jié)點毁腿,并且刪除該頭結(jié)點的引用關(guān)系
--釋放連接:將該連接放入鏈表的后面
//連接數(shù)配置為2的響應(yīng)結(jié)果:
第1次發(fā)送連接:com.mysql.jdbc.JDBC4Connection@6b09bb57
第1次查詢結(jié)果:id:5,orderName100
第2次發(fā)送連接:com.mysql.jdbc.JDBC4Connection@1d16f93d
第2次查詢結(jié)果:id:5,orderName100
第3次發(fā)送連接:com.mysql.jdbc.JDBC4Connection@6b09bb57
第3次查詢結(jié)果:id:5,orderName100
第4次發(fā)送連接:com.mysql.jdbc.JDBC4Connection@1d16f93d
第4次查詢結(jié)果:id:5,orderName100
第5次發(fā)送連接:com.mysql.jdbc.JDBC4Connection@6b09bb57
第5次查詢結(jié)果:id:5,orderName100
第6次發(fā)送連接:com.mysql.jdbc.JDBC4Connection@1d16f93d
第6次查詢結(jié)果:id:5,orderName100
第7次發(fā)送連接:com.mysql.jdbc.JDBC4Connection@6b09bb57
第7次查詢結(jié)果:id:5,orderName100
第8次發(fā)送連接:com.mysql.jdbc.JDBC4Connection@1d16f93d
第8次查詢結(jié)果:id:5,orderName100
第9次發(fā)送連接:com.mysql.jdbc.JDBC4Connection@6b09bb57
第9次查詢結(jié)果:id:5,orderName100
第10次發(fā)送連接:com.mysql.jdbc.JDBC4Connection@1d16f93d
第10次查詢結(jié)果:id:5,orderName100
通訊類型
同步調(diào)用:基于請求與響應(yīng);
異步調(diào)用:服務(wù)器端單獨開啟一個線程處理比較耗時間代碼趣惠;
優(yōu)點:防止客戶端阻塞狸棍;
缺點:
1.客戶端不能夠及時獲取到響應(yīng)結(jié)果
2.開啟單獨一個線程異步處理 有可能會非常消耗cpu資源
連接方式【MySQL JDBC長連接】
長連接:每次建立連接完成之后身害,會將該連接保存起來實現(xiàn)復(fù)用味悄,不會頻繁創(chuàng)建連接,避免tcp三次握手和四次揮手塌鸯。
優(yōu)點:避免重復(fù)創(chuàng)建tcp三次握手和四次揮手(socket)
缺點: 有可能浪費我們服務(wù)器端資源侍瑟;空閑超時時間
應(yīng)用場景:頻繁發(fā)送請求提高效率
短連接:每次發(fā)送請求完成之后,都會把連接關(guān)閉丙猬;
優(yōu)點:避免浪費我們服務(wù)器的資源涨颜;
缺點: 每次建立連接的時候需要經(jīng)歷tcp三次握手,如果在頻繁發(fā)送請求的情況下效率有可能會降低茧球;
數(shù)據(jù)傳輸模式
單工: 數(shù)據(jù)單向發(fā)送
半雙工: 數(shù)據(jù)雙向傳輸庭瑰,但不能同時傳輸 (mysql 采用半雙工模式)
全雙工:數(shù)據(jù)雙向傳輸,可以同時傳輸
設(shè)定所接受的包的大星缆瘛:
show variables like '%max_allowed_packet%';
根據(jù)情形不同弹灭,其缺省值可能是1M或者4M。
最大值是1G(1073741824)揪垄,如果設(shè)置超過1G穷吮,查看最終生效結(jié)果也只有1G。
通訊協(xié)議
Unix非網(wǎng)絡(luò)協(xié)議饥努、TCP/IP套接字
Unix非網(wǎng)絡(luò)協(xié)議:在linux 操作系統(tǒng)中客戶端和服務(wù)器端都在同一臺電腦上,客戶端訪問mysql使用Unix 協(xié)議非網(wǎng)絡(luò)協(xié)議捡鱼。
TCP/IP套接字:客戶端與服務(wù)器不在同一臺電腦上 采用網(wǎng)絡(luò)方式實現(xiàn)通訊
命名管道和內(nèi)存共享
在window系統(tǒng)中客戶端和Mysql服務(wù)器在同一臺電腦上,可以使用命名管道和共享內(nèi)存的方式酷愧,
命名管道開啟:–shared-memory=on/off驾诈;
共享內(nèi)存開啟:–enable-named-pipe=on/off;
推薦閱讀:
<<<MySQL發(fā)展歷程與整體架構(gòu)
<<<查詢和更新sql語句執(zhí)行原理
<<<MySQL存儲引擎匯總
<<<InnoDB存儲引擎的Buffer Pool 緩沖池底層結(jié)構(gòu)
<<<Too many connections分析與processlist解讀
<<<MySQL索引底層結(jié)構(gòu)與實現(xiàn)原理
<<<MySql的表鎖行鎖及間隙鎖
<<<MySQL的并發(fā)文件及事務(wù)隔離級別
<<<MySQL的MVCC多版本控制原理
<<<MySQL常用命令匯總