§Play Slick 進階主題
§連線池
隨著 Slick 3 的發行,Slick 開始控制連線池和執行緒池,以最佳化資料庫動作的非同步執行。
在 Play Slick 中,我們決定讓 Slick 控制建立和管理連線池(Slick 3 使用的預設連線池是 HikariCP),這表示若要調整連線池,您需要查看 Slick ScalaDoc 中的 Database.forConfig(請務必展開文件中的 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
,否則您可能會在記錄中看到這些訊息
> [警告] 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 常見問題
在此文件找到錯誤?此頁面的原始程式碼可以在 這裡 找到。在閱讀 文件準則 後,請隨時提交拉取要求。有問題或建議要分享嗎?請前往 我們的社群論壇 與社群展開對話。