代码之家  ›  专栏  ›  技术社区  ›  grom

在Informix上查找长时间运行的查询?

  •  2
  • grom  · 技术社区  · 17 年前

    如何找出Informix数据库服务器上长时间运行的查询是什么?我有一个正在耗尽CPU的查询,想知道该查询是什么。

    4 回复  |  直到 17 年前
        1
  •  5
  •   DL Redden    17 年前

    如果查询当前正在运行,请查看 对峙-g行动-r 1 输出并查找具有 rstcb公司 那不是0

    Running threads:
     tid     tcb             rstcb            prty status                vp-class      name
     106     c0000000d4860950 0                2    running               107soc        soctcppoll
     107     c0000000d4881950 0                2    running               108soc        soctcppoll
     564457  c0000000d7f28250 c0000000d7afcf20 2    running                 1cpu        CDRD_10
    

    在本例中,第三行是当前正在运行的内容。如果有多行的rstcb值不为零,那么请注意寻找始终存在或几乎始终存在的行。这很可能是你要找的课程。

    c0000000d7afcf20型 是我们对这个例子感兴趣的地址。

    使用 onstat-u | grep c000000d7afcf20 查找会话

    c0000000d7afcf20 Y--P--- 22887    informix -        c0000000d5b0abd0 0    5     14060    3811
    

    这给了您会话id,在我们的示例中是 二万二千八百八十七 . 使用 对峙-g ses 22887 以列出有关该会话的信息。在我的示例中,它是一个系统会话,因此在onstat-g ses输出中看不到任何内容。

        2
  •  1
  •   RET    17 年前

    这是因为建议的答案是针对DB2,而不是Informix。

    sysmaster数据库(Informix共享内存的虚拟关系数据库)可能包含您要查找的信息。这些页面可能有助于您开始:

        3
  •  1
  •   grom    17 年前

    好吧,我花了点时间才弄清楚如何连接到sysmaster。JDBC连接字符串是:

    jdbc:informix sqli://dbserver.local:1526/sysmaster:INFORMIXSERVER=mydatabase

    其中端口号与连接到实际数据库时的端口号相同。如果连接字符串是:

    jdbc:informix sqli://database:1541/crm:INFORMIXSERVER=crmlive

    那么sysmaster连接字符串是:

    jdbc:informix sqli://database:1541/sysmaster:INFORMIXSERVER=crmlive

    也发现了 this wiki page 它包含许多用于在sysmaster表上操作的SQL查询。

        4
  •  -1
  •   Jason Navarrete    17 年前
    SELECT ELAPSED_TIME_MIN,SUBSTR(AUTHID,1,10) AS AUTH_ID, 
    AGENT_ID, APPL_STATUS,SUBSTR(STMT_TEXT,1,20) AS SQL_TEXT
    FROM SYSIBMADM.LONG_RUNNING_SQL
    WHERE ELAPSED_TIME_MIN > 0
    ORDER BY ELAPSED_TIME_MIN DESC
    

    学分: SQL to View Long Running Queries

    推荐文章