2017-05-04 7 views
0

Ich arbeite mit redshift mit Java und Node Js. Vor einiger Zeit wurde festgestellt, dass das Ereignis disconnect nicht bei allen eingehenden Verbindungsaufrufen erstellt wurde. Java (mit redshift.jdbc41):Redshift Verbindungen nicht ordnungsgemäß geschlossen

Connection conn = null; 
Statement stmt = null; 
try { 
     ... 
} catch (Exception ex){ 
    throw new Exception("Can't sync raw data from redshift"); 
}finally { 
    try { 
     if (stmt != null) { 
      stmt.close(); 
     } 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
    try { 
     if (conn != null) { 
      conn.close(); 
     } 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 

und Knoten Js (mit pg Modul) Beispiel:

var client = new pg.Client(conString); 
client.connect(function (err) { 
    if (err) throw err; 
    client.query(query, function (err, result) { 
     client.end(function (err) {if (err) throw err;}); 
     ... 
    }); 
}); 

So nach Code aufgerufen Abfrage ausgeführt Verbindung zu schließen, aber in stl_connection_log für einen Teil der Verbindungen erstellt nur initiierende Sitzung Ereignis, aber keine Sitzung trennen, so dass viele Verbindungen tagelang aktiv sind und nicht zurückgesetzt werden, nachdem die Clientanwendung gestoppt wurde.

Kann jemand Ratschläge zur Lösung dieses Problems geben? Möglicherweise sind einige Konfigurationen für die Rotverschiebung oder eine andere Art der Arbeit in der Client-Anwendung erforderlich?

+0

Sie können idleTimeoutMillis: in Ihrer Verbindungszeichenfolge festlegen. –

Antwort

0

Der Knoten Js Code, den Sie erwähnten, funktioniert gut für mich. Wenn Sie die Verbindung durch Rotverschiebung zwangsweise schließen möchten, können Sie die folgende Abfrage verwenden.

select pg_terminate_backend (pg_backend_pid()); 

Wenn ich eine schlechte Annahme gemacht habe bitte Kommentar und ich werde meine Antwort neu auszurichten.

Verwandte Themen