Mysql

我的 jdbc 配置池有什麼問題?

  • November 7, 2018

我正在使用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)。

引用自:https://dba.stackexchange.com/questions/111599