我使用圓滑3.0.0-M1以「com.zaxxer」%「HikariCP」%「2.4.3」油滑預處理語句
油滑正準備爲每個查詢語句(伐木表示)這是壞:
"Preparing statement: select * from ..."
我的配置告訴柔滑/阿光緩存準備好的發言:
myDB {
url = "jdbc:mysql://...
user = ...
...
connectionPool = HikariCP
queueSize = 50000
maxConnections = 50
properties.cachePrepStmts = true
properties.prepStmtCacheSize = 20000
properties.prepStmtCacheSqlLimit = 100000
}
個日誌似乎表明這些屬性是隻讀:
configuration:
...
dataSourceName..................
dataSourceClassName.............
dataSourceProperties............
{password=<masked>,
prepStmtCacheSqlLimit=100000,
cachePrepStmts=true,
prepStmtCacheSize=20000}
maximumPoolSize.................50
poolName..........................
的分貝對象被實例化,並在試驗中使用:
val db = Database.forConfig("", config.getConfig("myDB"))
val qTemplate = StaticQuery[(Int), MyRow] + "select * from table_name where num=?"
db.withSession{ implicit session =>
(0 until 100).foreach{ case i =>
qTemplate(2).foreach(println)
}
}
對於每次調用qTemplate(2),光滑日誌'準備聲明...'爲什麼模板沒有被緩存?
該文檔說,Slick儘可能使用準備好的語句,但它不會自行緩存它們。因此,您應該在連接池的配置中啓用準備好的語句緩存。 – user2827214
我在這裏看到你指的是什麼 - http://slick.typesafe.com/doc/3.1.1/database.html - 來自Slick團隊的人可能需要澄清。如果您不使用直接SQL,那麼Slick會生成SQL,因此它們可能指的是Slick生成的SQL。我理解它的方式是將SQL和params通過驅動程序傳遞給數據庫。然後數據庫可以查找已解析的語句,並使用參數數據執行語句而不解析語句。 – ekrich
我調查了更多,似乎這些參數化語句正在工作。 – user2827214