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

hiure 发布于 2018-04-27 database 最后更新 2018-04-27 22:21 242 浏览

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

已邀请:

hquae

赞同来自:

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

ket

赞同来自:

这是因为建议的答案是针对DB2,而不是Informix。 sysmaster数据库(Informix共享内存的虚拟关系数据库)可能包含您寻求的信息。这些网页可能会帮助您开始使用:

taut

赞同来自:

如果查询当前正在运行,请观察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输出中没有任何东西可以看到。

hiure

赞同来自:

好吧,我花了一点时间才弄清楚如何连接到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查询。