MySQL: Using Connector/Net with Connection Poolingについて読んでいました。グローバルMySqlConnection
オブジェクトを使用せず、手動で開閉することをお勧めします。さらに、オブジェクトを操作するMySqlHelper
代わりにを使用することをお勧めしMySqlCommand
ます。
したがって、CONNECTION_STRING
セットアップがあると仮定すると、次のようなことができます。
MySqlHelper.ExecuteNonQuery(CONNECTION_STRING,
@"INSERT INTO `table1` (`col3`,`col4`) VALUES (@col3, @col4 );",
(new List<MySqlParameter>() {
new MySqlParameter("@col3", @"another value"),
new MySqlParameter("@col4", @"some value")
}).ToArray()
);
ここで、(TPL を介して) 非同期並列タスクで上記の呼び出しを数千回行ったとします。
私のMySQLサーバーにはいくつかの最大接続が許可されており、ユーザーが最大接続を超えたと主張する例外がスローされ始めました。接続プーリングがこれを自動的に処理するはずだと思いましたか? ドライバーは、それらを自動的にプールしてキューに入れることを想定していませんか?
現在許可されている最大接続数は 1500 で、これを接続文字列に追加しました。
Pooling=True;minimumPoolSize=0;maximumpoolsize=100;
それでも、まだ最大接続数を超えています。この最大接続制限を爆発させずに多くの非同期挿入を処理する方法についてアドバイスが必要です。