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

时间:2008-09-09 05:42:50

标签: database informix

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

4 个答案:

答案 0 :(得分:5)

如果查询当前正在运行,请观看 onstat -g act -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 c0000000d7afcf20 找到会话

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

这会为您提供会话ID,在我们的示例中为 22887 。使用 onstat -g ses 22887 列出有关该会话的信息。在我的例子中,它是一个系统会话,所以在onstat -g ses输出中没有什么可看的。

答案 1 :(得分:1)

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

sysmaster数据库(Informix共享内存的虚拟关系数据库)可能包含您寻找的信息。这些页面可能会帮助您入门:

答案 2 :(得分:1)

好的,我花了一些时间来研究如何连接到sysmaster。 JDBC连接字符串是:

  

JDBC:INFORMIX-SQLI://dbserver.local:1526 / SYSMASTER:INFORMIXSERVER = MyDatabase的

端口号与连接到实际数据库时的端口号相同。那就是你的连接字符串是:

  

JDBC:INFORMIX-SQLI://数据库:1541 / CRM:INFORMIXSERVER = crmlive

然后sysmaster连接字符串是:

  

JDBC:INFORMIX-SQLI://数据库:1541 / SYSMASTER:INFORMIXSERVER = crmlive

还发现this wiki page包含许多用于在sysmaster表上运行的SQL查询。

答案 3 :(得分:-1)

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

相关问题