【问题标题】:Query log equivalent for Progress/OpenEdgeProgress/OpenEdge 的查询日志等效项
【发布时间】:2014-01-31 06:10:12
【问题描述】:

简短的故事:针对 Progress 数据库(OpenEdge 版本 10.1C03)运行的报告需要数小时才能完成。我怀疑它没有利用现有的数据索引。想了解它如何扫描数据然后尝试添加一个索引以使其运行更快。

报告的源代码不可用。代码是原生 Progress 4GL,而不是 SQL。

如果它是一个 SQL 数据库,我会尝试转储 SQL 查询,然后从那里开始。使用 4GL,我没有找到任何这样的功能。是否有可能以某种方式窥探底层执行的内容?

没有源代码还能做什么?

谢谢!

【问题讨论】:

    标签: progress-4gl


    【解决方案1】:

    你可以做几件事:

    如果我没记错的话,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

    【讨论】:

    • 非常有帮助,谢谢!我不知道编译时会分配查询的索引。我们确实有 .r 文件,并且我们从它们重新编译代码(使用我们自己的一些定制)。如果添加新索引,从 .r 编译是否会重新分配索引?
    • A .r 是编译的最终结果。源通常是 .p 或 .w。如果您能够编译,您还可以使用 XREF 选项来获取将显示索引选择的列表。
    • 也许你已经加密了源?这是供应商提供的应用程序吗?如果有,是哪一个?
    • 是的,它是一个供应商应用程序,Infor SX.e 你说得对,它是一个加密源。我不知道发生了什么——我们当然已经加密了 .p 文件。我会尝试研究外部参照编译选项,谢谢提示!
    • SX.e 通常与加密源一起分发。所以,是的,你可以重新编译,也许可以得到一个新的索引。您也许还可以查看源代码——一些客户可以访问允许审查所选代码的门户。您也可以使用它来帮助他们了解查询出错的地方并修复它。
    猜你喜欢
    • 2012-03-19
    • 2018-08-25
    • 1970-01-01
    • 2021-05-07
    • 2022-11-29
    • 2011-12-02
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多