简短说明:针对Progress数据库(OpenEdge版本10.1C03)运行的报告需要数小时才能完成。我怀疑它没有利用现有的数据索引。想了解它如何扫描数据,然后尝试添加一个能让它运行得更快的索引。
报告的源代码不可用。代码是原生Progress 4GL,而不是SQL。
如果它是一个SQL数据库,我会尝试转储SQL查询,然后就可以了。使用4GL我没有找到任何这样的功能。是否有可能以某种方式窥视在低级执行的内容?
如果没有源代码,还可以做些什么呢?
谢谢!
答案 0 :(得分:2)
你可以做几件事:
如果我没记错的话,10.1C应该有_usertablestat和_userindexstat虚拟系统表可用。这些允许您在运行时观察特定会话正在访问的表和索引。您可以编写自己的4GL程序来查询它们,也可以使用PROMON,R& D,3“其他显示器”,5“用户按表执行I / O操作”和6“用户I / O操作”中的屏幕按索引“。这将向您展示实际使用的表和索引以及它们的使用量。如果观察到的数据似乎有误,它可能会给你一个线索。 (如果缺少VST,可能是因为db从旧版本升级 - 使用proutil dbname -C updatevsts添加它们。)
您还可以使用会话启动参数-clientlog“filename”和-logentrytypes QryInfo来获取有关正在执行的查询的更多详细信息。
请记住,Progress不是SQL。与大多数SQL数据库不同,4gl使用静态的编译时优化器。编译代码时会发生索引选择。因此,除非您可以重新编译(并且您似乎没有源,因此似乎不太可能),您将无法通过添加缺失的索引来改进。但是,您可能至少能够向具有问题所在源的人员展示。
另一个可以提供帮助的工具是分析器。这将确定代码中花费时间的位置。如果他们需要帮助找到问题,这也可以是提供给原始供应商的好信息。有关分析器的更多信息:http://dbappraise.com/ppt/profiler.pptx