文件

§Play Slick 進階主題

§連線池

隨著 Slick 3 的發行,Slick 開始控制連線池和執行緒池,以最佳化資料庫動作的非同步執行。

在 Play Slick 中,我們決定讓 Slick 控制建立和管理連線池(Slick 3 使用的預設連線池是 HikariCP),這表示若要調整連線池,您需要查看 Slick ScalaDoc 中的 Database.forConfig(請務必展開文件中的 forConfig 列)。事實上,請注意您傳遞給 Play 連線池設定的任何值(例如,在金鑰 play.db.default.hikaricp 下)都不會被 Slick 接收,因此實際上會被忽略。

另外,請注意,正如 Slick 文件 中所述,連線池大小的合理預設值會從執行緒池大小計算出來。事實上,在大部分情況下,您應該只需要調整每個資料庫設定中的 numThreadsqueueSize 即可。

最後,值得一提的是,雖然 Slick 允許使用 HikariCP 以外的連線池(不過,Slick 目前僅提供對 HikariCP 的內建支援,如果您想使用其他連線池,則需要提供 JdbcDataSourceFactory 的實作),但 Play Slick 目前不允許使用 HikariCP 以外的連線池。

注意:變更 play.db.pool 的值不會影響 Slick 使用的連線池。此外,請注意 play.db 下的任何設定都不會被 Play Slick 考慮。

§執行緒池

隨著 Slick 3.0 的發布,Slick 開始控制執行緒池和連線池,以最佳化資料庫動作的非同步執行。

為了最佳執行,您可能需要調整每個資料庫設定的 numThreadsqueueSize 參數。有關詳細資訊,請參閱 Slick 文件

自 Slick 的 3.2.2 起,有一個需求是 maxConnections = maxThreads,否則您可能會在記錄中看到這些訊息

> [警告] 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 常見問題


在此文件找到錯誤?此頁面的原始程式碼可以在 這裡 找到。在閱讀 文件準則 後,請隨時提交拉取要求。有問題或建議要分享嗎?請前往 我們的社群論壇 與社群展開對話。