Max Pool Size を増やす
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 を増やす