执行长 运行 查询时如何避免 Oracle APEX 5.1 中的 Bad Gateway 超时?
How to avoid Bad Gateway timeout in Oracle APEX 5.1 when executing long running queries?
我安装了 Oracle APEX 5.1(确切地说是 5.1.4.00.08 版)和 ORDS(Oracle REST 数据服务)。如果我想 运行 报告对数据库的 SQL select 查询花费的时间超过一分钟,似乎已经达到某个超时并且错误消息“502 Bad Gateway”是返回而不是报告。
但是,当页面重新加载时,查询似乎仍在数据库缓存中,因此 APEX 可以随后加载报告。
不幸的是,我还没有在 APEX 或其他任何地方找到允许我更改在获得 HTTP 代码 502 响应之前我想要等待加载报告的时间量的设置。
我想问题可能出在 ORDS 配置上,但我不确定。
终于找到错误了!它既不是 APEX 也不是 ORDS。我正在使用使用 mod_proxy 将请求转发到 APEX 服务器的 Apache 服务器。这里发生了超时,可以通过虚拟主机中的以下设置来修复:
Timeout 5400
ProxyTimeout 5400
此答案适用于那些通过具有防火墙的互联网路径访问 APEX 应用程序的人。如果查询 运行s 超过 15 或 20 分钟,通常您的连接跨越的防火墙将“忘记”您的 Web 浏览器与托管 APEX 应用程序的服务器之间的对话。这将导致错误,例如 502 Bad Gateway 错误。不幸的是,在这种情况下,我们无能为力。有些事情可以帮助减少这种情况发生的可能性。
我支持一个 APEX 应用程序,它有一些有时 运行 超过 15 分钟的怪物报告页面,具体取决于用户输入的条件。我为交互式报告 (IR) 所做的一些事情:
- 在查询中使用 DBMS_SQLTUNE 包(需要可选许可证)。但请注意,如果用户修改 IR,查询可能会更改,并且对于那些自定义 运行s.
调优将无济于事
- 如果不能或不希望使用
DBMS_SQLTUNE
,请插入查询提示。
- 我在我的报告的查询页面上限制了日期范围,将日期范围限制在 6 个月或更短
- 在 APEX 设计模式下,可以修改 ACTIONS 菜单(在 IR 定义的 Attributes 文件夹中)以关闭搜索栏和操作菜单的某些选项。如果您调整查询 SQL,如果用户通过 IR 的操作菜单按钮添加或删除列,添加控制中断等选项,则查询可能不会使用优化设置。
- 添加 JavaScript 以删除单击 IR headers 的功能,并关闭来自 APEX IR“操作”按钮的排序选项。请注意,这可能需要更新以应用 APEX 升级。
这些将有助于防止 most long 运行ning 查询问题。
操作按钮的示例设置:
示例 JavaScript 将页面定义的“JavaScript”属性 用于“函数和全局变量声明”(适用于 APEX 版本 5.1.4)如下。它禁用了单击列标题的功能,并从 IR“操作”→“格式”菜单中删除了排序选项:
.a-IRR-headerLink {
pointer-events: none !important;
cursor: default !important;
}
.a-IRR-sortWidget {
display: none !important;
}
.a-IRR-sortWidget-actions {
display: none !important;
}
.a-IRR-sortWidget-searchField {
display: none !important;
}
.a-IRR-sortWidget-rows {
display: none !important;
}
.a-IRR-sortWidget-search {
display: none !important;
}
我安装了 Oracle APEX 5.1(确切地说是 5.1.4.00.08 版)和 ORDS(Oracle REST 数据服务)。如果我想 运行 报告对数据库的 SQL select 查询花费的时间超过一分钟,似乎已经达到某个超时并且错误消息“502 Bad Gateway”是返回而不是报告。 但是,当页面重新加载时,查询似乎仍在数据库缓存中,因此 APEX 可以随后加载报告。
不幸的是,我还没有在 APEX 或其他任何地方找到允许我更改在获得 HTTP 代码 502 响应之前我想要等待加载报告的时间量的设置。 我想问题可能出在 ORDS 配置上,但我不确定。
终于找到错误了!它既不是 APEX 也不是 ORDS。我正在使用使用 mod_proxy 将请求转发到 APEX 服务器的 Apache 服务器。这里发生了超时,可以通过虚拟主机中的以下设置来修复:
Timeout 5400
ProxyTimeout 5400
此答案适用于那些通过具有防火墙的互联网路径访问 APEX 应用程序的人。如果查询 运行s 超过 15 或 20 分钟,通常您的连接跨越的防火墙将“忘记”您的 Web 浏览器与托管 APEX 应用程序的服务器之间的对话。这将导致错误,例如 502 Bad Gateway 错误。不幸的是,在这种情况下,我们无能为力。有些事情可以帮助减少这种情况发生的可能性。
我支持一个 APEX 应用程序,它有一些有时 运行 超过 15 分钟的怪物报告页面,具体取决于用户输入的条件。我为交互式报告 (IR) 所做的一些事情:
- 在查询中使用 DBMS_SQLTUNE 包(需要可选许可证)。但请注意,如果用户修改 IR,查询可能会更改,并且对于那些自定义 运行s. 调优将无济于事
- 如果不能或不希望使用
DBMS_SQLTUNE
,请插入查询提示。 - 我在我的报告的查询页面上限制了日期范围,将日期范围限制在 6 个月或更短
- 在 APEX 设计模式下,可以修改 ACTIONS 菜单(在 IR 定义的 Attributes 文件夹中)以关闭搜索栏和操作菜单的某些选项。如果您调整查询 SQL,如果用户通过 IR 的操作菜单按钮添加或删除列,添加控制中断等选项,则查询可能不会使用优化设置。
- 添加 JavaScript 以删除单击 IR headers 的功能,并关闭来自 APEX IR“操作”按钮的排序选项。请注意,这可能需要更新以应用 APEX 升级。
这些将有助于防止 most long 运行ning 查询问题。
操作按钮的示例设置:
示例 JavaScript 将页面定义的“JavaScript”属性 用于“函数和全局变量声明”(适用于 APEX 版本 5.1.4)如下。它禁用了单击列标题的功能,并从 IR“操作”→“格式”菜单中删除了排序选项:
.a-IRR-headerLink {
pointer-events: none !important;
cursor: default !important;
}
.a-IRR-sortWidget {
display: none !important;
}
.a-IRR-sortWidget-actions {
display: none !important;
}
.a-IRR-sortWidget-searchField {
display: none !important;
}
.a-IRR-sortWidget-rows {
display: none !important;
}
.a-IRR-sortWidget-search {
display: none !important;
}