Informix データベース サーバーで長時間実行されているクエリを確認するにはどうすればよいですか? CPU を使い果たしているクエリがあり、クエリが何であるかを調べたいと考えています。
4 に答える
クエリが現在実行中の場合は、onstat -g act -r 1の出力を監視し、 0ではないrstcbを持つアイテムを探します。
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
この例では、3番目の行が現在実行中のものです。rstcb値がゼロ以外の行が複数ある場合は、常にまたはほとんど常に存在する行を少し探してください。それはおそらくあなたが探しているセッションです。
c0000000d7afcf20は、この例で関心のあるアドレスです。
onstat-u|を使用します grep c0000000d7afcf20を使用して、セッションを検索します
c0000000d7afcf20 Y--P--- 22887 informix - c0000000d5b0abd0 0 5 14060 3811
これにより、この例では22887であるセッションIDが得られます。onstat -g ses 22887を使用 して、そのセッションに関する情報を一覧表示します。私の例では、これはシステムセッションであるため、onstat-gsesの出力には何も表示されません。
さて、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
また、sysmaster テーブルを操作するための多数の SQL クエリを含むこの wiki ページも見つかりました。
これは、提案された回答が Informix ではなく DB2 に対するものであるためです。
sysmaster データベース (Informix 共有メモリの仮想リレーショナル データベース) には、探している情報が含まれている可能性があります。これらのページは、開始するのに役立つ場合があります。
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