如何找出Informix数据库服务器上长时间运行的查询?我有一个耗尽CPU的查询,想知道查询是什么。
答案 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