ドキュメント

§Play Slick詳細トピック

§接続プール

Slick 3のリリースに伴い、Slickはデータベースアクションの最適な非同期実行のために、接続プールとスレッドプールの両方を開始して制御します。

Play Slickでは、接続プールの作成と管理をSlickに任せることにしました(Slick 3で使用されるデフォルトの接続プールはHikariCPです)。つまり、接続プールを調整するには、Database.forConfigのSlick ScalaDocを参照する必要があります(ドキュメントで`forConfig`行を展開してください)。実際、Play接続プール(例:キー`play.db.default.hikaricp`の下)に設定するために渡す可能性のある値は、Slickによって取得されず、無視されることに注意してください。

また、Slickドキュメントに記載されているように、接続プールのサイズに関する妥当なデフォルト値は、スレッドプールのサイズから計算されます。実際、ほとんどの場合、各データベース設定で`numThreads`と`queueSize`を調整するだけで済みます。

最後に、SlickはHikariCP以外の接続プールを使用できますが(ただし、Slickは現在HikariCPのみを組み込みでサポートしており、別の接続プールを使用する場合はJdbcDataSourceFactoryの実装を提供する必要があります)、Play Slickは現在、HikariCP以外の接続プールを使用できません。

注記:`play.db.pool`の値を変更しても、Slickが使用する接続プールには影響しません。さらに、`play.db`の下の構成はPlay Slickでは考慮されないことに注意してください。

§スレッドプール

Slick 3.0のリリースに伴い、Slickはデータベースアクションの最適な非同期実行のために、スレッドプールと接続プールの両方を開始して制御します。

最適な実行のために、各データベース設定で`numThreads`と`queueSize`パラメータを調整する必要がある場合があります。Slickドキュメントを参照してください。

Slickの`3.2.2`以降、`maxConnections = maxThreads`という要件があります。そうでない場合、ログにこれらのメッセージが表示される可能性があります。

> [warn] s.u.AsyncExecutor - maxConnection > maxThreadsの場合、トランザクションまたはデータベースロックが使用されているとデッドロックが発生する可能性があります。

これを修正するには、設定で設定するだけです。たとえば、

slick.dbs.default.profile="slick.profile.PostgresProfile$"
slick.dbs.default.db.dataSourceClass="slick.jdbc.DatabaseUrlDataSource"
slick.dbs.default.db.numThreads=20
slick.dbs.default.db.maxConnections=20

次へ:Play Slick FAQ


このドキュメントに誤りを見つけましたか?このページのソースコードはこちらにあります。ドキュメントガイドラインを読んだ後、プルリクエストを送信することを遠慮なく行ってください。質問やアドバイスを共有したいですか?コミュニティフォーラムにアクセスして、コミュニティとの会話を始めましょう。