我有一个每月运行 12,000 次的 SQL 2008R2 报告。每次执行平均需要 60-90 秒。
我使用 SQL 已有 12 年了,但我在 2-3 周前才开始这项工作,并且仍在努力解决其中一些 SSRS 性能问题。不用说,为了帮助这份报告,我一直在重新索引所有内容。
这是我的执行日志的图片/转储:
SELECT ReportPath, TimeDataRetrieval, TimeProcessing, TimeRendering, Source, [RowCount]
FROM ReportServer.dbo.ExecutionLog2
WHERE UserName = '_________' AND ReportAction = 'Render'
ORDER BY timeStart desc
http://accessadp.com/?attachment_id=562
ReportPath TimeDataRetrieval TimeProcessing TimeRendering Source RowCount
/CubeReports/Freight Allocation 2954 4402 2039 Live 2348
/RS Reports/Freight Allocation 39954 4087 2380 Live 2348
/RS Reports/Freight Allocation 37718 3948 1888 Live 2348
/RS Reports/Freight Allocation 39534 4317 1937 Live 2348
/CubeReports/Freight Allocation 3257 4206 2422 Live 2348
/RS Reports/Freight Allocation 37517 4164 2402 Live 2348
/RS Reports/Freight Allocation 36127 4151 1986 Live 2348
/RS Reports/Freight Allocation 36415 39888 2569 Live 19048
/RS Reports/Freight Allocation 37544 41644 2071 Live 19048
/RS Reports/Freight Allocation 37970 41003 2187 Live 19048
/RS Reports/Freight Allocation 38057 48085 1885 Live 19048
/CubeReports/Freight Allocation 3030 4558 2056 Live 2348
/CubeReports/Freight Allocation 3534 5232 2422 Live 2348
请注意,我相信我知道“RowCount”的区别是什么。我有一个运行数据集的子报表(这并不重要),我将其删除。
我认为这是性能提高的原因.. 但我已经仔细检查和三次检查 subReports 不再具有其他数据集(这在行数减少中得到了引用)。不幸的是,这并没有转化为处理时间的减少。
我从“RS Reports”下载了报告,并将其部署到“CubeReports”。我没有更改此版本报告的任何其他内容。
我用相同的参数运行它……现在报告“CubeReports”的副本实际上运行速度快了 10 倍。
我只是想不通为什么会这样?我真的需要找到解决方案并将其投入生产。
我已经检查了快照、历史记录、执行缓存......这些都没有打开,这看起来就像两个报告的默认设置......我检查了所有其他选项,但我找不到任何可以解释这一点。
我看到的仅有的三个选项:
- Report Builder 3.0 不像 BIDs 那样“编译报告”。
- 让 3-4 人同时运行主要报告我正在做测试导致这个问题。(我们有 300 名员工,我真的无法在其他任何地方进行测试,因为人们每天都在运行它)。
- 删除报告并重新部署报告,并祈祷这将使其运行速度提高 10 倍
不幸的是,我能够始终如一地复制 10 倍的速度提升,我已经运行了大约 10 次,每次使用相同的参数并获得相同的结果。请记住,只有 1 个 SSRS 服务器,与 1 个数据库服务器相对。相同的存储过程,相同的参数。
此报告的生产副本的性能差 10 倍。将其复制到新文件夹时性能提高 10 倍。
主 ERP 数据库约为 100gb,只有 4 个内核,只有 16gb RAM。SSRS 服务器在虚拟机上,它只有 2 个内核,只有 8gb 内存。
SSRS 服务器上还有一个额外的数据库;它实际上是一个相当大的数据库——但不是大量的活动。另一个数据库(Bartender)只有 9gb 数据/3gb 日志。