光滑的准备声明

时间:2015-12-22 21:57:53

标签: mysql scala slick hikaricp

我使用slick 3.0.0-M1和#34; com.zaxxer" %" HikariCP" %" 2.4.3"

Slick正在为每个查询准备一个语句(由日志记录表示),这是不好的:

GNU bash, version 4.3.30(1)-release (arm-petalinux-linux-gnueabi)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

我的配置告诉Slick / Hikari缓存预准备语句:

"Preparing statement: select * from ..." 

日志似乎表明这些属性已被阅读:

myDB {
  url = "jdbc:mysql://...
  user = ...
  ...
  connectionPool = HikariCP
  queueSize = 50000
  maxConnections = 50
  properties.cachePrepStmts = true
  properties.prepStmtCacheSize = 20000
  properties.prepStmtCacheSqlLimit = 100000
}

db对象被实例化并用于测试:

configuration:
...
dataSourceName..................
dataSourceClassName.............
dataSourceProperties............
    {password=<masked>, 
     prepStmtCacheSqlLimit=100000, 
     cachePrepStmts=true, 
     prepStmtCacheSize=20000}
maximumPoolSize.................50
poolName..........................

每次调用qTemplate(2),光滑的日志&#39;准​​备声明......&#39;为什么模板没有缓存?

1 个答案:

答案 0 :(得分:0)

首先,如果您喜欢最新版本,我建议您使用Slick的生产版本,如3.1.1。 http://slick.typesafe.com/

通常,连接池执行连接缓存,数据库执行语句缓存。使用带有占位符的PreparedStatement?应该足以让MySql缓存该语句。数据库必须解析语句,并且每个语句必须看起来相同才能使DB缓存该语句。让数据库避免使用不同的参数值反复解析相同的语句是此功能避免的。

如果您查看有关语句缓存的文档也有助于解释 - https://github.com/brettwooldridge/HikariCP - 此处还有关于MySQL的更多信息 - https://github.com/brettwooldridge/HikariCP/wiki/MySQL-Configuration

我只是升级Slick并继续做你正在做的事情。

埃里克