【发布时间】:2011-05-28 01:22:06
【问题描述】:
在我的 RoR 应用程序中运行一些报告最多需要 4 分钟。从那时起,我的用户在系统停止响应的系统中执行简单任务时遇到了延迟。
我仍在尝试调查问题的主要原因,以查看报告和系统挂起是否相关。有人对我应该如何重构我的报告有任何建议吗?运行它不需要 4 分钟?
到目前为止,我已经考虑过每晚运行一个后台作业,计算我想要的所有数据,这样报告时间就会显着减少。我还没有找到可以使用中间件或内存实例来派生报告而不是通过大型查询访问数据库的解决方案。
技术信息:
- VPS 运行 384 MB 的 RAM(增加一个足够的解决方法吗?)
- 报告是 SQL 和一些繁重的 ruby 脚本的组合,用于处理内容,以便以可读的方式显示它们
- 数据库表包含 2,000 到 30,000 行
技术报告信息
- DB-query-1 有 5 个内部连接。它首先运行以创建查找哈希
- DB-query-2 有 5 个内部连接。它运行一次并遍历其结果集的每条记录
- 对于 (2.) 的每条记录,运行 DB-query-3(包含 5 个内连接)
- 对于 (2.) 的每条记录,遍历 (1.) 中的查找哈希以执行一些计算
通过 Anon 的附加信息请求来写这篇文章,我已经可以看到嵌套循环的刺痛......
【问题讨论】:
-
您为每个报告运行了多少查询?你打的桌子有多大?你在 Ruby 中做了什么样的事情(任何繁重的事情,比如排序?)
-
添加了其他信息 - 谢谢
-
是否可以将 (3) 滚动到 (2) 中?这确实会减少正在执行的查询数量。
-
我的 SQL 不足以解决这个问题……这可能就是它以现在的方式实现的原因。不过,我会在等待其他建议的同时对此进行研究。感谢您的帮助!
-
您检查过查询的运行时间吗?这可能是关于连接的问题。连接条件中涉及的所有字段都有索引吗?
标签: ruby-on-rails design-patterns database-design