• このエントリーをはてなブックマークに追加

VB.NET+MySQLの環境で出たエラー。

MySql.Data.MySqlClient.MySqlException: error connecting: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.

エキサイトで翻訳してみるとこんな感じ:

タイムアウトは期限が切れました。 プールから接続を得る前に、タイムアウト時間は経過しました。 すべてのプールされた接続が使用中であったので、これは起こったかもしれませんでした、そして、最大プール・サイズに達しました。

要するにDBとの接続数が多すぎるということらしい。

VB側からMySQL側へ接続する際、接続という行為にリソースが割かれるため、一度接続したら一定時間(デフォルトは15秒らしい)は接続を切らないらしい。
切らないまんま、接続が100個に達してしまったというのが今回のエラーか。

調べてみると、DBとの接続数最大値のパラメータ名「Max Pool Size」で、デフォルトは100。
単純に倍にして200にしてみた。

修正前:

stConnectionString = “server=localhost;user id=xxxx;initial catalog=DBName;convert zero datetime=true”
Dim cSqlConnection As New MySqlConnection(stConnectionString)
cSqlConnection.Open()

修正後:

stConnectionString = “server=localhost;user id=xxxx;initial catalog=DBName;convert zero datetime=true;max pool size=200
Dim cSqlConnection As New MySqlConnection(stConnectionString)
cSqlConnection.Open()

要するに、接続文字列に赤いところを追加しただけ。

Max Pool Size が多すぎると「リソースを無駄に消費する」らしいのだが、消費するものは何なのか(メモリなのか?CPUパワーなのか?)は明確にはわからなかった。

— 11/06追記 —
Max Pool Size を修正する場合、max_connections も修正しなければならない。
下記投稿にて記述した。
max_connections を増やす

  • このエントリーをはてなブックマークに追加