1

Progress 版本 11.0 srt* (srt) 排序/临时文件在 RHEL Linux 6.0 中变得非常大。隔离到与 webspeed 一起用于 Web 应用程序的特定数据库。使用 -T 开关参数来定义文件的位置。不使用 -t 使文件断开连接并且不显示在文件系统上。

在 shell 执行 lsof 显示文件增长到 GB 大小并不断增加。第三列是字节大小:

_mprosrv 29968 3862790144 /usr/temp/srtJrjsxX(已删除)

_mprosrv 31588 15290187776 /usr/temp/srtVEi9Lp(已删除)

_mprosrv 32644 1533157376 /usr/temp/srtTozP1W(已删除)

_mprosrv 32667 3890683904 /usr/temp/srte5qI1U(已删除)

有没有办法限制这些临时文件的大小或阻止它们变得如此之大?

4

2 回答 2

1

不,没有参数可以限制它们。了解您正在做什么以促进增长是关键。通常它们是缺少适当索引的查询的结果,因此必须由客户端选择和排序记录。

我会:

  • 在客户端上启用 -t 以便您可以实时监控 SRT 文件的增长。
  • 启用客户端语句缓存,以便您可以确定在发生增长时对哪个源模块中的哪一行代码负责的查询。
  • 使用 XREF 和 DEBUG 进行编译,以便您可以查看代码以进行表扫描(XREF“整个索引”引用)并从语句缓存信息中查找(调试)源代码行
  • 从http://dbappraise.com/protop.html下载 ProTop 3,以便您可以实时监控查询活动
  • 将 -noautoresultlist 参数添加到您的客户端启动中(它不是灵丹妙药,但在某些情况下可能会有所帮助)
  • 如果您碰巧在未启用客户端语句缓存的情况下“在执行中”捕获客户端,请发送“kill -USR1”,然后在 protrace 中查找并检查 4gl 堆栈跟踪。(可能在客户端的启动目录中)
于 2014-03-06T16:14:46.700 回答
1

如果您使用的是 11.0,请考虑升级到 11.2 或更高版本。

显然存在一个错误(称为缺陷 OE00227173,已在 11.2 中修复),其中一些大型查询导致 _mprosrv 进程不断增长其 .srt 文件,而不是按预期重用文件空间。

从发行说明:

问题编号:OE00227173 每次执行查询时临时排序文件都会增长

当运行在 word-index 中有任何通配符的搜索时,搜索将在 db 服务器上创建一个 srt 文件。如果查询返回大量行(大于 100,000),则排序文件中的空间不会完全重新使用,并且 .srt 会变得非常大。

通过断开用户会话与相关服务器 PID 的连接,然后终止服务器进程(最好使用 promon R&D、4、7、7),可以找到临时缓解。

通过服务器 PID 获取用户的代码:

def var v-pid as int format ">>>>>>>>>9" label "Server PID" no-undo.

do while true:
    update v-pid with frame f1 side-labels.

    find _server where _server._server-pid eq v-pid
        no-lock no-error.
    disp _server with frame f2.

    for each _connect where
        _connect._Connect-Server eq _server._server-num  /** NOT _server-id **/
        no-lock:

        find _userio where _connect._connect-id eq _userio._userio-id
        no-lock no-error.

        disp _connect._Connect-Usr /** NOT _Connect-Id **/
             _connect._Connect-Name
             _connect._Connect-Device
             _connect._Connect-Time
             _connect._Connect-Pid
             _userio._userio-dbaccess
             _userio._userio-dbread
             _userio._userio-dbwrite.

    end.
end.
于 2014-03-26T22:50:17.043 回答