【发布时间】:2016-03-19 20:43:22
【问题描述】:
我正在支持一个 Grails Web 应用程序,它为使用 AmCharts 的客户端显示不同的视觉效果。在其中一个选项卡上,有三个图表,每个图表根据不同的度量从数据库中返回前十名,因此只有十行。完成需要 4-5 甚至更多时间。查询在 10 秒内在数据库上运行。
调用以下服务方法返回结果:
List fetchTopPages(params, Map querySettings, String orderClause) {
if(!((params['country'] && params['country'].size() > 0) || (params['brand'] && params['brand'].size() > 0) || (params['url'] && params['url'].size() > 0))) {
throw new RuntimeException('Filters country or brand or url not selected.')
}
Sql sql = new Sql(dataSource)
sql.withStatement { stmt -> stmt.fetchSize = 100 }
Map filterParams = acquisitionService.getDateFilters(params, querySettings)
ParamUtils.addWhereArgs(params, filterParams)
String query = "This is where the query is"
ParamUtils.saveQueryInRequest(ParamUtils.prettyPrintQuery(query, filterParams))
log.debug("engagement pageviews-by-source query: " + ParamUtils.prettyPrintQuery(query, filterParams))
List rows = sql.rows(query, filterParams)
rows
}
经过一番调查,很明显List rows = sql.rows(query, filterParams) 行是占用此加载时间的行。
有没有人遇到过这个问题?为什么 sql.rows() 只返回 10 行的结果,而且查询在 DB 端运行得非常快,却要花这么长时间?
附加信息:
数据库:FSL1D
在 DB 端运行以下命令:java -jar ojdbc5.jar - getversion 返回:
“在 Thu_Jul_11_15:41:55_PDT_2013 上使用 JDK5 编译的 Oracle 11.2.0.3.0 JDBC 3.0
默认连接属性资源
2015 年 12 月 16 日星期三 08:18:32 EST"
Groovy 版本:2.3.7 Grails 版本:2.4.41 JDK:1.7.0
【问题讨论】:
-
要获得更具体的答案,请发布您的数据库、JDBC 驱动程序和 Groovy + JDK 版本
-
DB: FSL1D 在 DB 端运行以下命令:
java -jar ojdbc5.jar - getversion返回:Oracle 11.2.0.3.0 JDBC 3.0 在 Thu_Jul_11_15:41:55_PDT_2013 上用 JDK5 编译 #Default Connection Properties Resource #Wed Dec 16 08 :18:32 EST 2015 Groovy 版本:2.3.7 Grails 版本:2.4.41 JDK:1.7.0 -
谢谢,我会尝试设置您的方案。有一个类似的问题here,但没有明确的答案。
-
非常感谢!是的,我一直在调查这个问题,但正如你所说,没有明确的答案。