一
問題描述
注:MySQL版本8.0.16
mysql的連接數(shù)是有上限,如果到達(dá)上限就會(huì)報(bào)錯(cuò)。報(bào)錯(cuò)信息如下:
ERROR 1203 (42000): User vvv already has more than max_user_connections active connections
△上:?jiǎn)斡脩舻倪B接數(shù)到達(dá)max_user_connections的值。
ERROR 1040 (HY000): Too many connections
△上:所有用戶的連接總數(shù)到達(dá)max_connections的值。
△當(dāng)連接返回這些報(bào)錯(cuò)的時(shí)候意味著數(shù)據(jù)庫的連接數(shù)到達(dá)上限,新的連接請(qǐng)求是無法連接到數(shù)據(jù)庫的。
注意:在連接數(shù)漲滿之后,擁有all privileges權(quán)限的用戶是可以連接數(shù)據(jù)庫的。
二
解決方案
step1 首先查看mysql的max_connections,max_user_connections的值。
step2 可以看到Threads_connected的值已經(jīng)到達(dá)連接數(shù)的上限。Threads_running的值為4說明所有連接都不是空閑連接。
step3 可以查看該值與max_user_connections/max_connections的差,如果差越小說明,大多數(shù)連接都在等待獲取鎖。
接下來我們著手解決問題。
△一個(gè)連接本身只會(huì)占用少量的內(nèi)存,關(guān)鍵還是看當(dāng)前數(shù)據(jù)庫的QPS/TPS是否接近壓力測(cè)試的值。如果QPS/TPS并不高可以選擇將連接數(shù)上限增大。
△如果thread_running的值與threads_connected相比非常的低說明大多數(shù)連接都是空閑連接,可以選擇將連接數(shù)上限增大。
set global max_connections=40;
set global max_user_connections=40;
△上:使用上面兩條命令將數(shù)據(jù)庫的連接數(shù)上限設(shè)置增大。
注意:如果數(shù)據(jù)庫發(fā)生重啟此次設(shè)置將會(huì)失效,要想永久生效需要在my.cnf文件當(dāng)中將值寫進(jìn)去。
如果thread_running的值與threads_connected相比非常的低說明大多數(shù)連接都是空閑連接,可以選擇將空閑連接的超時(shí)時(shí)間降低,快速釋放連接。
set global wait_timeout=10;
△上:將非交互模式的空閑連接超時(shí)時(shí)間設(shè)置為10秒。
Innodb_row_lock_current_waits的值非常高可以說明有非常多的鎖等待。可以進(jìn)一步通過sys庫的innodb_lock_waits視圖來查看鎖等待時(shí)間,通過設(shè)置鎖等待超時(shí)將這些長(zhǎng)時(shí)間等待的連接釋放掉。
set global innodb_lock_wait_timeout=2;
△上:設(shè)置鎖等待超時(shí)為一個(gè)較短的時(shí)間來釋放連接數(shù)。
注意:如果數(shù)據(jù)庫發(fā)生重啟此次設(shè)置將會(huì)失效,要想永久生效需要在my.cnf文件當(dāng)中將值寫進(jìn)去。
△如果thread_running的值非常高,代表當(dāng)前數(shù)據(jù)庫繁忙。如果出現(xiàn)連接數(shù)滿可以選擇將執(zhí)行時(shí)間長(zhǎng)的線程殺掉,來釋放連接。
pt-kill --busy-time 20 --host 192.168.56.11 --port 3306 --
user=pt_test --password=pt_test --interval 1 --print --kill
△上:這里推薦使用precona公司的pt-kill工具來進(jìn)行殺掉線程的工作。凡是執(zhí)行時(shí)間超過20秒的線程就會(huì)被殺掉。
△pt-kill也可以用于殺死空閑連接以及針對(duì)特定的用戶線程來進(jìn)行查殺。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/129712.html
摘要:作者鏈接來源知乎著作權(quán)歸作者所有。的富文本也需要注意一下,托管輸入什么的我搞不懂,反正知乎超級(jí)卡開發(fā)速度方面。會(huì)造成影響的變量相當(dāng)多。的社區(qū)最活躍工具最多,于是天秤座人士對(duì)社區(qū)表示強(qiáng)烈譴責(zé)。總覺得開發(fā)時(shí),編輯器的響應(yīng)速度更快也可能是錯(cuò)覺。 作者:Teeea鏈接:https://www.zhihu.com/questio...來源:知乎著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)...
摘要:是訪問數(shù)據(jù)庫的標(biāo)準(zhǔn)規(guī)范。提供了一種基準(zhǔn)據(jù)此可以構(gòu)建更高級(jí)的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應(yīng)用程序。代碼如下工具類數(shù)據(jù)庫驅(qū)動(dòng)注冊(cè)失敗提供獲取連接的方法獲得連接返回連接 本文為大家介紹 Java 如何使用JDBC 連接 MySQL 數(shù)據(jù)庫。 JDBC概述 JDBC(Java Data Base Connectivity,java數(shù)據(jù)庫連接)是一種用于執(zhí)行SQL語句的Java A...
摘要:是訪問數(shù)據(jù)庫的標(biāo)準(zhǔn)規(guī)范。提供了一種基準(zhǔn)據(jù)此可以構(gòu)建更高級(jí)的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應(yīng)用程序。代碼如下工具類數(shù)據(jù)庫驅(qū)動(dòng)注冊(cè)失敗提供獲取連接的方法獲得連接返回連接 本文為大家介紹 Java 如何使用JDBC 連接 MySQL 數(shù)據(jù)庫。 JDBC概述 JDBC(Java Data Base Connectivity,java數(shù)據(jù)庫連接)是一種用于執(zhí)行SQL語句的Java A...
摘要:讀寫分離的實(shí)現(xiàn)方式使用的驅(qū)動(dòng)構(gòu)造不同的數(shù)據(jù)庫連接池,在層通過判斷方法的讀寫類型,讀方法使用從數(shù)據(jù)庫連接池,寫方法使用主數(shù)據(jù)庫連接池使用阿里的或的來實(shí)現(xiàn)分庫分表,讀寫分離和負(fù)載均衡等處理。 1.mysql讀寫分離背景 在項(xiàng)目中使用mysql數(shù)據(jù)庫,所有的增刪改查操作都在主庫處理,隨著查詢?cè)L問量的增加,單庫處理的壓力驟增,為了防止主庫故障,使用一主多從的方式,通過讀寫分離,把所有的查詢處理...
閱讀 1353·2023-01-11 13:20
閱讀 1700·2023-01-11 13:20
閱讀 1211·2023-01-11 13:20
閱讀 1904·2023-01-11 13:20
閱讀 4162·2023-01-11 13:20
閱讀 2751·2023-01-11 13:20
閱讀 1397·2023-01-11 13:20
閱讀 3664·2023-01-11 13:20