bil*_*vsd 2 coldfusion performance report
我们有一个分析图表,它首先查询数据库日志表,从优化查询中提取所有相关信息,只选择所需内容以及获取相关的开始和结束ID,因为此表有数百万条记录.拉出初始查询后,我们使用ColdFusion查询查询来处理该数据以显示不同的图表.
您可以在此示例中看到实际的外部数据库调用在31ms内抓取2,240条记录:
qryGetLogs (Datasource=ourDSN, Time=31ms, Records=2204)
Run Code Online (Sandbox Code Playgroud)
我们有一个图表,显示每周每天的每小时视图,然后构建一个jQuery图表来显示它们.从最初的设计来看,这些查询的执行时间几乎可以忽略不计,最常见的是0ms.因为我们在每天(24)中每小时循环一次,每周7天,这是168次查询 - 这是多次不进行外部数据库调用的主要原因之一.
现在看来,许多(但不是全部)查询查询的运行时间比初始数据库调用长100多倍.他们中的大多数人都使用BETWEEN日期范围功能来选择每天和每小时部分的记录:
qryViewsPerHour (Datasource=, Time=4312ms, Records=5)
SELECT createdOn, DayOfWeek
FROM qryGetLogs
WHERE (CreatedOn BETWEEN '2012-09-03 0:00:00' AND '2012-09-03 0:59:59')
AND (DayOfWeek = 2)
Run Code Online (Sandbox Code Playgroud)
您可以看到另一个查询的查询花了4,312ms并且正在搜索具有2,240条记录的查询.以下是许多下一个查询的查询时间:
qryViewsPerHour (Datasource=, Time=4610ms, Records=5)
qryViewsPerHour (Datasource=, Time=4187ms, Records=8)
qryViewsPerHour (Datasource=, Time=5062ms, Records=6)
qryViewsPerHour (Datasource=, Time=3985ms, Records=0)
qryViewsPerHour (Datasource=, Time=4828ms, Records=2)
qryViewsPerHour (Datasource=, Time=5750ms, Records=0)
qryViewsPerHour (Datasource=, Time=3016ms, Records=4)
qryViewsPerHour (Datasource=, Time=3625ms, Records=6)
qryViewsPerHour (Datasource=, Time=6265ms, Records=11)
Run Code Online (Sandbox Code Playgroud)
所以你可以看到这些查询,它增加了40秒的加载时间!但请注意,下一个查询只有78毫秒,记录比以前的任何查询都多,之后很多,时间更好:
qryViewsPerHour (Datasource=, Time=78ms, Records=18)
qryViewsPerHour (Datasource=, Time=62ms, Records=7)
qryViewsPerHour (Datasource=, Time=63ms, Records=12)
qryViewsPerHour (Datasource=, Time=78ms, Records=34)
qryViewsPerHour (Datasource=, Time=78ms, Records=9)
Run Code Online (Sandbox Code Playgroud)
那些经历了一段时间的好时光,然后是BAM!回到2-6秒查询.
qryViewsPerHour (Datasource=, Time=4891ms, Records=13)
qryViewsPerHour (Datasource=, Time=1984ms, Records=8)
qryViewsPerHour (Datasource=, Time=4875ms, Records=4)
qryViewsPerHour (Datasource=, Time=6203ms, Records=0)
Run Code Online (Sandbox Code Playgroud)
总而言之,加载需要几秒钟的时间,加载时间为100-400秒,而这只是每周报告!我们还将其用于月度报告.
我已经监视了服务器,并确保我是唯一运行请求的人或进程,因此不应该是CPU的资源被别的东西吃掉了,而且我还监视CPU请求,它是稳固而稳定的由JRUN.exe使用.
有没有人对这个问题有任何建议?它让我疯了!
谢谢你的帮助.
小智 12
通常,查询查询非常快.但是,有时候体积增加可能需要更长时间.由于您完全符合ColdFusion文档推荐的5,000到50,000行建议,因此它只能是一件事.有些数据正在翻译以获得结果.在这种情况下,它是您指定的日期时间.时间值有一个前导零.我知道这听起来很奇怪.
更改:在 哪里(CreatedOn BETWEEN'2012-09-03 0:00:00'和'2012-09-03 0:59:59')
TO: WHERE(CreatedOn BETWEEN'2012-09-03 00:00:00'和'2012-09-03 00:59:59')
我测试了这个,发现结果更好.
| 归档时间: |
|
| 查看次数: |
4209 次 |
| 最近记录: |