我的 jdbc 配置池有什麼問題?
我正在使用max_connections 計劃為 40 的clearDB 。
這是我的 jdbc 池配置:
<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close" p:driverClassName="com.mysql.jdbc.Driver" p:url="#{ @dbUrl.getJdbc() }" p:username="#{ @dbUrl.getUser() }" p:password="#{ @dbUrl.getPassword() }" p:initialSize="2" p:maxActive="10" p:maxIdle="5" p:minIdle="2" p:maxWait="60000" p:timeBetweenEvictionRunsMillis="5000" p:minEvictableIdleTimeMillis="60000" p:testOnBorrow="true" p:validationQuery="/* ping */ SELECT 1" p:validationInterval="30000" p:testWhileIdle="true" />
今天我們現場有197個並髮使用者,收到了很多
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:使用者’yyyyy’已超過’max_user_connections’資源(目前值:40)
這意味著其他使用者無法登錄和使用該網站。
這非常令人沮喪。可能是因為我們的 maxActive 只有 10?為了消除這些錯誤,您會建議對此配置進行哪些改進?
進入 my.cnf(或 my.ini)。增加(或設置)
max_user_connections
部分[mysqld]
。還要檢查
max_connections
;197可能會遇到這種情況。你真的有一個使用者連接超過 40 次嗎?還是“連接池”誇大了東西?
我認為此連結將對您的最大連接數有所幫助。
如何擺脫“最大使用者連接”錯誤?(如果您最終複製和粘貼說明,則不是第一個 SQL 語句中的連接拼寫錯誤)。
針對您的數據庫執行
SHOW VARIABLES LIKE '%max%conn%';
並查看與此特定問題相關的相關變數設置。在連結中,雖然從您列出的錯誤中,我不確定意外行為。您發布的錯誤表明
user exceeded the 'max_user_connections' resource (current value: 40)
. 正如您最初所說,您的程式碼配置中的 maxActive 設置為 40。我錯了嗎?MySQL 配置以及您的程式碼中設置了許多配置,這些配置將允許您處理超出此範圍的連接問題。
可能不是您的問題,而是可能的幫助 在過去,我遇到過程式碼無法關閉連接並且我的數據庫充滿連接的問題。為了從數據庫端解決這個問題,我最終將全域 wait_timeout 設置為一個較低的值(在我的例子中是一個小時)。MySQL 預設值為 8 小時。此值表示允許休眠連接保持連接的時間量。你可以這樣做
set global wait_timeout = xxx
。MySQL 在幾秒鐘內解釋了這一點。如果您在此處更改全域會話,我建議更改 my.cnf (Linux) 或 my.ini (Windows)。