2008-09-09 15 views
2

Wie können Sie herausfinden, welche Abfragen auf dem Informix-Datenbankserver seit langem ausgeführt werden? Ich habe eine Abfrage, die die CPU verbraucht und herausfinden will, was die Abfrage ist.Suchen Sie lange laufende Abfrage auf Informix?

+1

Bitte wählen Sie die Antwort aus, die Ihnen am meisten geholfen hat - falls eine davon überhaupt geholfen hat. –

+0

Ich habe keine Antwort gewählt, weil, obwohl zwei von ihnen geholfen haben, keiner von beiden vollständig ist. – grom

Antwort

-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 

Credit: SQL to View Long Running Queries

+0

SYSIBMADM schlägt eher vor, dass dies eine DB2-Abfrage und keine Informix-Abfrage ist. –

5

Wenn die Abfrage gerade läuft die onstat -g Akt -r 1 Ausgang beobachten und schauen nach Artikeln mit einem rstcb, die nicht 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 
ist

In diesem Beispiel wird die dritte Zeile ausgeführt. Wenn Sie mehrere Zeilen mit rstcb-Werten ungleich Null haben, dann achten Sie auf ein bisschen nach demjenigen, der immer oder fast immer da ist. Das ist wahrscheinlich die Sitzung, nach der Sie suchen.

c0000000d7afcf20 ist die Adresse, an der wir in diesem Beispiel interessiert sind.

Verwenden Sie onstat -u | grep c0000000d7afcf20 die Sitzung

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

Dies gibt Ihnen die Session-ID, die in unserem Beispiel zu finden, ist . Verwenden Sie onstat -g ses 22887 , um Informationen über diese Sitzung aufzulisten. In meinem Beispiel handelt es sich um eine Systemsitzung, so dass in der onstat -g ses-Ausgabe nichts zu sehen ist.

1

Okay, ich brauchte ein wenig um herauszufinden, wie man sich mit sysmaster verbindet. Die JDBC-Verbindungszeichenfolge ist:

jdbc: Informix-sqli: //dbserver.local: 1526/SysMaster: INFORMIXSERVER = mydatabase

Wo die Portnummer ist das gleiche wie wenn Sie eine Verbindung zu die eigentliche Datenbank.Das heißt, wenn die Verbindungszeichenfolge ist:

jdbc: Informix-sqli: // Datenbank: 1541/crm: INFORMIXSERVER = crmlive

Dann wird die SysMaster Verbindungszeichenfolge ist:

jdbc: Informix-sqli: // Datenbank: 1541/SysMaster: INFORMIXSERVER = crmlive

auch this wiki page gefunden, die eine Zahl enthält von SQL-Abfragen für die Ausführung in den sysmaster -Tabellen.