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