偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

MySQL-CommunicationsException異常的三個典型場景及解決方法

數(shù)據(jù)庫 MySQL
客戶端發(fā)送select語句后,服務端往客戶端寫大量數(shù)據(jù),客戶端需要等待超過1分鐘才能繼續(xù)寫入,服務端就會把這種寫入時超過1分鐘(默認值)等待的連接直接關閉。

我們在使用MySQL數(shù)據(jù)庫的時候,偶爾會遇到com.mysql.jdbc.exceptions.jdbc4.CommunicationsException,為了以后能夠更快速的定位解決該問題,下面對該異常出現(xiàn)的場景及解決方法進行總結,希望能起到拋磚引玉的作用。

場景一

場景描述

wait_timeout

根因分析

異常的原因是數(shù)據(jù)庫連接空閑時間超過了MySQL服務器配置的wait_timeout,即上圖中【2.3 數(shù)據(jù)庫操作】時候的時間 【減去】【1.5 放入連接池中】時候的時間【大于】wait_timeout。

解決辦法

方法一

mysql5以前的版本可以直接在jdbcurl的配置中附加上“autoReconnect=true”。

方法二

將mysql的全局變量wait_timeout的值修改為最大。

show global variables like "wait_timeout";

方法三【建議采納的方案】

目前項目采用的數(shù)據(jù)庫連接池是druid,解決該異常用到的配置項如下:

配置

缺省值

說明

validationQuery


用來檢測連接是否有效的sql,要求是一個查詢語句,常用select 'x'。如果validationQuery為null,testOnBorrow、testOnReturn、testWhileIdle都不會起作用。

testWhileIdle

false

建議配置為true,不影響性能,并且保證安全性。申請連接的時候檢測,如果空閑時間大于
timeBetweenEvictionRunsMillis,執(zhí)行validationQuery檢測連接是否有效。

timeBetweenEvictionRunsMillis

1分鐘

有兩個含義:
1) Destroy線程會檢測連接的間隔時間,如果連接空閑時間大于等于
minEvictableIdleTimeMillis則關閉物理連接。
2) testWhileIdle的判斷依據(jù),詳細看testWhileIdle屬性的說明

minEvictableIdleTimeMillis


連接保持空閑而不被驅逐的最小時間

場景二

場景描述

應用阻塞無響應

根因分析

客戶端發(fā)送select語句后,服務端往客戶端寫大量數(shù)據(jù),客戶端需要等待超過1分鐘才能繼續(xù)寫入,服務端就會把這種寫入時超過1分鐘(默認值)等待的連接直接關閉。

而為什么會超過1分鐘?根因是jdbc程序在接收大量數(shù)據(jù)時會耗費大量的cpu跟內(nèi)存資源,還需要不斷做的GC,導致接收暫停,一旦GC時間超過net_write_timeout,mysql則會關閉連接。

根因

解決辦法

方法一

根據(jù)業(yè)務場景增大net_write_timeout

SET GLOBAL net_write_timeout =180;
SELECT @@global.net_write_timeout ;
SELECT @@session.net_read_timeout ;
show variables like '%timeout%'

方法二【建議采納的方案】

根據(jù)業(yè)務場景,優(yōu)化應用程序。

優(yōu)化方向:

  • 優(yōu)化SQL,通過分頁的方式減少一次查詢返回的數(shù)據(jù)量
  • 優(yōu)化應用,減少應用停頓時間

場景三

場景描述

SSL

問題分析

MySQL server versions like 5.6.25 and earlier or 5.7.5 and earlier,客戶端連接屬性useSSL默認是false;MySQL server versions like 5.6.25+ or 5.7.5+,客戶端連接屬性useSSL默認是true。

默認useSSL=true的MySQL server版本,客戶端連接屬性還需要配置其他額外的連接屬性,如果沒有配置會拋出CommunicationsException異常。

解決辦法

方法一

在不需要SSL連接的場景下,顯示設置useSSL=false

方法二

在需要SSL連接的場景下,客戶端和服務端都需要進行正確的配置。

具體配置可以參考官網(wǎng)文檔:Connecting Securely Using SSL:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-using-ssl.html

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2021-09-06 08:00:00

數(shù)字化轉型IT自動化

2011-12-02 14:00:21

JavaOOM

2009-01-18 10:15:20

SaaS服務SOA

2018-01-18 10:46:01

服務器磁盤原因

2010-07-30 12:56:53

2022-04-06 10:09:17

云服務云計算

2012-11-19 11:30:40

PowerShell常見問題解決方法

2009-06-12 16:17:48

Hibernate l

2015-09-06 10:29:20

PaaS云計算開源

2011-08-24 17:41:16

MySQL死鎖

2010-11-04 10:44:27

DB2 not fou

2018-05-29 11:44:22

數(shù)據(jù)庫MySQL死鎖

2009-08-24 10:37:11

Silverlight

2010-11-23 10:11:23

mysql建表亂碼

2011-05-19 10:08:55

2021-04-20 11:03:26

人工智能AI機器學習

2010-05-14 14:00:59

MySQL數(shù)據(jù)庫優(yōu)化

2017-06-14 22:11:57

數(shù)據(jù)庫MySQL死鎖

2024-01-07 20:05:33

2009-12-25 10:01:23

WinForm程序
點贊
收藏

51CTO技術棧公眾號