use*_*668 15 scala playframework slick
我正在使用PlayFrameWork与Slick并在一个所有I/O数据库都很重的系统中使用它.在我的application.conf
文件中我有这个设置:
play {
akka {
akka.loggers = ["akka.event.slf4j.Slf4jLogger"]
loglevel = WARNING
actor {
default-dispatcher = {
fork-join-executor {
parallelism-factor = 20.0
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这显然给了我每个核心20个线程的播放应用程序,据我所知它Slick创建它自己NumThreads
的线程池,Slick中的字段意味着这是线程的总数还是它(NumThreads x CPU的)?是否有最佳性能的最佳实践?我目前将我的设置配置为:
database {
dataSourceClass = "org.postgresql.ds.PGSimpleDataSource"
properties = {
databaseName = "dbname"
user = "postgres"
password = "password"
}
numThreads = 10
}
Run Code Online (Sandbox Code Playgroud)
Sky*_*Sky 33
numThreads是线程池中的简单线程数.Slick使用此线程池来执行查询.
numThreads(Int,optional,default:20):线程池中用于异步执行数据库操作的并发线程数.有关正确调整线程池大小的更多信息,请参阅HikariCP wiki.请注意,对于Slick中的异步执行,您应该相应地调整线程池大小(此参数),而不是最大连接池大小.
queueSize(Int,optional,default:1000):数据库操作的队列大小,当所有线程都忙时,不能立即执行.超出此限制,新操作立即失败.无队列(直接切换)设置为0或无限队列大小设置为-1(不推荐).
默认情况下,池已调整为异步执行.除了连接参数,您在大多数情况下只需设置numThreads和queueSize.在这种情况下有争在线程池(通过其队列),不通过连接,这样你就可以对连接的最大数目相当大的限制(基于什么数据库服务器仍然可以处理,没有什么是最有效).在对事务内的非数据库操作进行排序时,Slick将使用比池中的线程更多的连接.
HikariCP支持以下配置键:
url(String,required):JDBC URL
driver或driverClassName(String,optional):用于加载用户的JDBC驱动程序类(字符串,可选)*:用户名
password(字符串,可选):密码
isolation(String,optional):新连接的事务隔离级别.允许的值为:NONE,READ_COMMITTED,READ_UNCOMMITTED,REPEATABLE_READ,SERIALIZABLE.
catalog(String,optional):新连接的缺省目录.
readOnly(Boolean,optional):新连接的只读标志.
properties(Map,optional):要传递给驱动程序或DataSource的属性.
dataSourceClass(String,optional):JDBC驱动程序提供的DataSource类的名称.这比使用驱动程序更受欢迎.请注意,设置此键时将忽略url(您必须使用属性来配置数据库连接).
maxConnections(Int,optional,default:numThreads*5):池中的最大连接数.
minConnections(Int,可选,默认值:与numThreads相同):要保留在池中的最小连接数.
connectionTimeout(持续时间,可选,默认值:1s):调用getConnection超时之前的最长等待时间.如果在没有连接可用的情况下超过此时间,则将抛出SQLException.1000ms是最小值.
validationTimeout(持续时间,可选,默认值:1s):连接将测试活动的最长时间.1000ms是最小值.
idleTimeout(持续时间,可选,默认值:10分钟):允许连接在池中空闲的最长时间.值为0表示永远不会从池中删除空闲连接.
maxLifetime(持续时间,可选,默认值:30分钟):池中连接的最长生命周期.当空闲连接达到此超时时,即使最近使用过,它也将从池中退出.值0表示没有最大生命周期.
connectionInitSql(String,optional):在每次创建新连接之后将执行的SQL语句,然后将其添加到池中.如果此SQL无效或引发异常,则将其视为连接失败,并将遵循标准重试逻辑.
initializationFailFast(Boolean,optional,default:false):如果无法成功地为初始连接添加池,则控制池是否"快速失败".如果在池启动时无法创建连接,则将抛出RuntimeException.如果minConnections为0,则此属性无效.
leakDetectionThreshold(Duration,optional,default:0):在记录消息之前连接可以离开池的时间量,指示可能的连接泄漏.值为0表示禁用泄漏检测.启用泄漏检测的最低可接受值是10秒.
connectionTestQuery(String,optional):将在从池中获取连接之前执行的语句,以验证与数据库的连接是否仍处于活动状态.它依赖于数据库,应该是一个只需要数据库处理很少的查询(例如"VALUES 1").未设置时,将使用JDBC4
Connection.isValid()
方法(通常更可取).
registerMbeans(布尔值,可选,默认值:false):是否注册了JMX管理Bean("MBean").
光滑的配置设置非常透明.最佳实践表现良好,没有拇指规则.这取决于您的数据库(并行连接提供了多少)和您的应用程序.这完全是关于数据库和应用程序之间的调整.