3

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

4

4 回答 4

7

如果查询当前正在运行,请观察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 输出中看不到任何内容。

于 2008-09-22T19:46:08.910 回答
1

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

还发现了这个 wiki 页面,其中包含许多用于对 sysmaster 表进行操作的 SQL 查询。

于 2008-09-24T23:53:02.620 回答
1

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

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

于 2008-09-17T06:13:13.097 回答
-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 查看长时间运行的查询

于 2008-09-09T15:12:52.053 回答