[Schmitzm-commits] r1931 - trunk/schmitzm-db/src/main/java/de/schmitzm/postgres
scm-commit at wald.intevation.org
scm-commit at wald.intevation.org
Mon Apr 2 11:24:58 CEST 2012
Author: alfonx
Date: 2012-04-02 11:24:58 +0200 (Mon, 02 Apr 2012)
New Revision: 1931
Modified:
trunk/schmitzm-db/src/main/java/de/schmitzm/postgres/PGUtil.java
Log:
Modified: trunk/schmitzm-db/src/main/java/de/schmitzm/postgres/PGUtil.java
===================================================================
--- trunk/schmitzm-db/src/main/java/de/schmitzm/postgres/PGUtil.java 2012-04-01 21:41:14 UTC (rev 1930)
+++ trunk/schmitzm-db/src/main/java/de/schmitzm/postgres/PGUtil.java 2012-04-02 09:24:58 UTC (rev 1931)
@@ -859,6 +859,30 @@
}
/**
+ * Wenn der übergebene durch die PID identifizierte Process blockiert ist, dann wird die PID des (ersten?)
+ * blockierenden Prozess zurückgeliefert. Sonst wird <code>null</code> geliefert.
+ *
+ * @param blockedPid
+ * @return blockingPid oder <code>null</code>
+ */
+ static public Long getBlockingPid(Connection c, Long blockedPid) throws SQLException {
+ final String sql = "select kl.pid as blocking_pid from pg_catalog.pg_locks bl "
+ + "join pg_catalog.pg_stat_activity a on bl.pid = a.procpid "
+ + "join pg_catalog.pg_locks kl "
+ + "join pg_catalog.pg_stat_activity ka on kl.pid = ka.procpid on bl.transactionid = kl.transactionid and bl.pid != kl.pid "
+ + "where not bl.granted and bl.pid = " + blockedPid;
+ ResultSet rs = c.createStatement().executeQuery(sql);
+ try {
+ if (rs.next()) {
+ return rs.getLong(1);
+ }
+ } finally {
+ rs.close();
+ }
+ return null;
+ }
+
+ /**
* Liefert eine Liste der aktuell laufenden Queries und ihrere Laufzeiten zurück. Der 2. Teil der Rückgabepaare ist
* ein String der einem PG Interval entspricht. Dieses kann mit der Klasse PGInterval geparst werden.<br/>
*
@@ -867,19 +891,20 @@
*
* @param minSecondsRunning
* <code>null</code> oder die zurückgegebenen Anfragen müssen mindestens soviele Sekunden schon laufen.
- *
- * @param filter 0 = kein Filter, 1=Ohne IDLE, 2=Ohne IDLE und ohne 'IDLE in Transaction'
+ *
+ * @param filter
+ * 0 = kein Filter, 1=Ohne IDLE, 2=Ohne IDLE und ohne 'IDLE in Transaction'
*/
- static public List<SqlQueryStat> listQueries(Connection c, String datName, Integer minSecondsRunning,
- int filter) throws SQLException {
+ static public List<SqlQueryStat> listQueries(Connection c, String datName, Integer minSecondsRunning, int filter)
+ throws SQLException {
ArrayList<SqlQueryStat> result = new ArrayList<SqlQueryStat>();
String where = "where 1";
-
- if (filter == 1)
+
+ if (filter == 1)
where += "AND current_query != 'IDLE' ";
- if (filter == 2)
- where += "AND current_query not like '<IDLE>%' ";
+ if (filter == 2)
+ where += "AND current_query not like '<IDLE>%' ";
if (datName != null)
where += " and datname like '" + datName + "'";
More information about the Schmitzm-commits
mailing list