Hikari CPの本家Githubで良Wikiを見つけたのでメモ。
コネクションプールの接続プール数は、以下の式で導出した数を初期値に調節していくのが良いとのこと。
プール数 = CPUコア数 * 2 + スピンドル数
スピンドル数は、HDDなどディスク型ストレージ台数を表します。
そして、たとえ同時接続数10,000のサービスでも、DBへのコネクションプール数は上記の式で導かれた数程度までには抑えたほうがパフォーマンスが良いと述べています。
理由として、
結局、DBサーバのCPUコアあたり1スレッドしか処理できないことを考えると(1スレッド=1コネクションと考え)、2スレッド以上はコンテキストスイッチによってパフォーマンスが低下する
とはいえ、I/O時間を考えると必ずしも1コア1スレッドでは最大パフォーマンスが出るわけではない
なので、シークによるI/O時間が発生するHDDの場合は、上記式から導出されるプール数を起点にすると良い
とのこと(大体の意訳)。
別に10,000同時接続でもコネクションプール10くらいでさばけるよ、むしろプール数増やしすぎるとパフォーマンス低下するよ、という内容ですね(問い合わせ内容にもよると思いますが)。
Wikiの参照元でも述べらているように、SSDでは未検証らしいのですが、I/Oを考えないとなるともっと少なくなるのでしょうか。
またネットワーク通信の待ちを考慮していないので、厳密に考えるとそこも加味する必要はあります。
とはいえ、一つの参考にはなりそうです。