[Java] Time-out of iets dergelijks van databse

Pagina: 1
Acties:

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Ik heb een stukje code gemaakt om een Phorum 3.4.4 te migreren naar versie 5.

Maar nu kom ik het volgende probleem tegen. Het gaat van een PostgreSQL 7.4 naar een Mysql 4.2. Allebij spreek je ze aan via een connector. JDBC dat werkt allemaal. Ik kan data uit de 7.4 krijgen en in de mysql invoegen.

Maar nu kotm het probleem. Ik krijg het niet voor elkaar om de 2 tabellen via een SQL string ineens uit te lezen (130.000 topics). Op de een of andere manier lijkt het vanuit de console te time-outen.

Als ik dezelfde SQL string uitvoer op een pgadmin of iets dergelijks, dan gaat hij netjes zijn werk doen en haalt hij alles op. Het is allemaal vanaf een client. Ik zit niet op de Postgre server zelf. Dat betekent dat er iets met de connectie aan de hand is die java maakt.

Ik heb ergens iets gelezen dat er een time-out van 30 seconden zou zijn, maar dat kan ik nergens terug vinden. Als ik hetzelfde doe op een Mysql database dan doet hij gewoon wat ik wil (deze is overigens maat 15 records).

Ik gebruik de JDBC connector van PostgreSQL site. De code waarmee ik de connectie maak is als volgt:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import java.io.*;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class LoadDriver1
{
  PrintWriter out = null;
  Connection conn;

  public Connection verbinden()
  {
    try
    {
      //Class.forName("org.postgresql.Driver");

      Class.forName("org.postgresql.Driver").newInstance();
      //"jdbc:postgresql://blaat.blaat.nl:22","blaat","nogmeerblaat");

      conn = DriverManager.getConnection("jdbc:postgresql://000.000.000.000/netwerk?user=****&password=*****#");
      out = new PrintWriter(new FileWriter("OutFile.txt"));
    }
    catch (IOException e)
    {
      System.err.println("Caught IOException: " + e.getMessage());
    }
    catch(ClassNotFoundException e)
    {
      e.printStackTrace();
    }
    catch (IllegalAccessException e)
        {
      System.out.println(e);
    }
    catch (InstantiationException e)
    {
      System.out.println(e);
    }
    catch (SQLException ex)
    {
      // handle any errors
      System.out.println("SQLException: " + ex.getMessage());
      System.out.println("SQLState: " + ex.getSQLState());
      System.out.println("VendorError: " + ex.getErrorCode());
    }
    finally
    {
      if (out != null)
      {
        System.out.println("Closing Printwriter");
        out.close();
      }
      else
      {
        System.out.println("Printwriter not open");
      }
      return conn;
    }
  }
}


En dit is de code voor de resultset:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
String SELECT = "SELECT t1.id, t1.thread, t1.parent, t1.author, t1.subject, t1.msgid, t1.modifystamp, t2.body ";
      String FROM = "FROM " + forum + " AS t1, " +forum+ "_bodies AS t2 ";
      String WHERE = "WHERE t1.id='35' AND t1.id=t2.id;";
      String QUERY = SELECT + FROM + WHERE;
    
      System.out.println(QUERY);
    
      // Create a scrollable ResultSet. 

      stmt = conn2.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);

      rs = stmt.executeQuery(QUERY);


Misschien dat ik zo voldoende heb beschreven wat ik allemaal gedaan heb. Als jullie meer info willen wil ik die graag geven.

[ Voor 5% gewijzigd door BSeB op 22-09-2005 08:23 ]


  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Kan je iets specifieker zijn over de foutmelding die je krijgt of de exception die opgeworpen wordt?

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Het enige antwoord wat ik eruit krijg is:

"onbekend antwoord"

Verder helemaal niks. Maar als het niet zou werken dan zou een individuele rij ook niet werken. Kan het zijn de de connectie van de SQL time-out geeft maar dat de login in stand blijft?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 29-04 08:14

Janoz

Moderator Devschuur®

!litemod

Zou je wat duidelijker kunnen zijn? Ik zie nergens code die 'onbekend antwoord' afdrukt. Als je een stacktrace terug krijgt kun je precies zien waar de fout optreed. ZOu je daar eventueel een stukje van kunnen laten zien?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Dat word dan vanavond, aangezien ik vanuit mijn werkplek niet kna inloggen op mijn eigen huis.

  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

onbekend antwoord is een nederlandse vertaling voor 'unknown response'. Deze message duidt er volgens mij op dat je jdbc driver en je postgresql server out of sync geraken. Waarschijnlijk is dit te wijten aan een bug van je jdbc driver. Probeer eens te upgraden naar een latest-build versie en hopelijk zou dit je probleem moeten oplossen.
Ik zie al dat je je resultset scrollable gemaakt hebt, dus daar kan het probleem ook niet liggen.

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
-FoX- schreef op donderdag 22 september 2005 @ 10:05:
onbekend antwoord is een nederlandse vertaling voor 'unknown response'. Deze message duidt er volgens mij op dat je jdbc driver en je postgresql server out of sync geraken. Waarschijnlijk is dit te wijten aan een bug van je jdbc driver. Probeer eens te upgraden naar een latest-build versie en hopelijk zou dit je probleem moeten oplossen.
Ik zie al dat je je resultset scrollable gemaakt hebt, dus daar kan het probleem ook niet liggen.
Postgre neem ik aan upgraden en dan de nieuwste driver gebruiken voor die versie.

Ik gebruik nu namelijk de versie die op de download van Postgre staat en ik neem aan dat dat de laatste versie is voor 7.4.

  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Neen, je hoeft hiervoor niet perse je server voor up te daten.
Gebruik gewoon de allerlaatste jdbc driver van postgresql. Want die drivers zijn backward compatible.

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Okidokie, heb die regel niet gelezen, maar klopt inderdaad, helaas moet ik nog tot 5 uur werken daarna zal ik het meteen testen.

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Ok, ik gebruik nu de laatste driver en dit is de error die ik krijg:

> Executing: C:\Program Files\ConTEXT\ConExec.exe "C:\Program Files\Java\jdk1.5.0_05\bin\java.exe" Application

Closing Printwriter
Closing Printwriter
SELECT t1.id, t1.thread, t1.parent, t1.author, t1.subject, t1.msgid, t1.modifystamp, t2.body FROM vhl AS t1, vhl_bodies AS t2 WHERE t1.id=t2.id;
0
SELECT t1.id, t1.thread, t1.parent, t1.author, t1.subject, t1.msgid, t1.modifystamp, t2.body FROM games AS t1, games_bodies AS t2 WHERE t1.id=t2.id;
org.postgresql.util.PSQLException: An I/O error occured while sending to the backend.
0
SELECT t1.id, t1.thread, t1.parent, t1.author, t1.subject, t1.msgid, t1.modifystamp, t2.body FROM nestor AS t1, nestor_bodies AS t2 WHERE t1.id=t2.id;
org.postgresql.util.PSQLException: An I/O error occured while sending to the backend.
0
> Execution finished.

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 10:48

Robtimus

me Robtimus no like you

Vervang de System.out.println(e) statements eens door e.printStackTrace(). De stack trace geeft veel meer informatie dan alleen de exception class en message.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • jochemd
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Zo, phorum 5 voor de VHL ;)

Vraag de serverbeheerder anders even om leesrechten op /var/log/postgresql

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
jochemd schreef op donderdag 22 september 2005 @ 22:39:
Zo, phorum 5 voor de VHL ;)

Vraag de serverbeheerder anders even om leesrechten op /var/log/postgresql
Hoi Jochem,

Ik kan allang op de databse, maar toch bedankt. En idd phorum 5 voor de vhl. Maar ook hierover wil ik komende tijd nog niks op het forum. Thnx.

Ik zal die stacktrace erin zetten. Alleen zul je dat even moeten wachten, want waarschijnlijk is mijn eigen mobo naar de filistijnen. Moet zo verder de hardware testen. Maar dnek dat hij overleden is, dus kan pas volgende week verder.

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Toch weer een pc gevonden! Nu dit erin gezet:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import java.io.*;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class LoadDriver1
{
  PrintWriter out = null;
  Connection conn;

  public Connection verbinden()
  {
    try
    {
      //Class.forName("org.postgresql.Driver");

      Class.forName("org.postgresql.Driver").newInstance();
      //"jdbc:postgresql://blaat.blaat.nl:22","blaat","nogmeerblaat");

      conn = DriverManager.getConnection("jdbc:postgresql://blaat?user=####&password=########&protocolVersion =V3");
      out = new PrintWriter(new FileWriter("OutFile.txt"));
    }
    catch (IOException e)
    {
      System.err.println("Caught IOException: " + e.getMessage());
      e.printStackTrace();
    }
    catch(ClassNotFoundException e)
    {
      e.printStackTrace();
    }
    catch (IllegalAccessException e)
    {
      e.printStackTrace();
    }
    catch (InstantiationException e)
    {
      e.printStackTrace();
    }
    catch (SQLException ex)
    {
      // handle any errors
      System.out.println("SQLException: " + ex.getMessage());
      System.out.println("SQLState: " + ex.getSQLState());
      System.out.println("VendorError: " + ex.getErrorCode());
      ex.printStackTrace();
    }
    finally
    {
      if (out != null)
      {
        System.out.println("Closing Printwriter");
        out.close();
      }
      else
      {
        System.out.println("Printwriter not open");
      }
      return conn;
    }
  }
}


Fout die ik krijg, ook in de application heb ik stacktrace toegevoegd!:

> Executing: C:\Program Files\ConTEXT\ConExec.exe "C:\Program Files\Java\jdk1.5.0_05\bin\java.exe" Application

Closing Printwriter
Closing Printwriter
SELECT t1.id, t1.thread, t1.parent, t1.author, t1.subject, t1.msgid, t2.body FROM vhl AS t1, vhl_bodies AS t2 WHERE t1.id=t2.id;
0
SELECT t1.id, t1.thread, t1.parent, t1.author, t1.subject, t1.msgid, t2.body FROM games AS t1, games_bodies AS t2 WHERE t1.id=t2.id;
org.postgresql.util.PSQLException: An I/O error occured while sending to the backend.
org.postgresql.util.PSQLException: An I/O error occured while sending to the backend.
at org.postgresql.core.v2.QueryExecutorImpl.execute(QueryExecutorImpl.java:369)
at org.postgresql.core.v2.QueryExecutorImpl.execute(QueryExecutorImpl.java:258)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:429)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:334)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:233)
at Application.gegevens(Application.java:80)
at Application.main(Application.java:25)
Caused by: java.io.IOException: Unexpected packet type: 83
at org.postgresql.core.v2.QueryExecutorImpl.processResults(QueryExecutorImpl.java:499)
at org.postgresql.core.v2.QueryExecutorImpl.execute(QueryExecutorImpl.java:364)
... 6 more
0
SELECT t1.id, t1.thread, t1.parent, t1.author, t1.subject, t1.msgid, t2.body FROM nestor AS t1, nestor_bodies AS t2 WHERE t1.id=t2.id;
org.postgresql.util.PSQLException: An I/O error occured while sending to the backend.
org.postgresql.util.PSQLException: An I/O error occured while sending to the backend.
at org.postgresql.core.v2.QueryExecutorImpl.execute(QueryExecutorImpl.java:369)
at org.postgresql.core.v2.QueryExecutorImpl.execute(QueryExecutorImpl.java:258)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:429)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:334)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:233)
at Application.gegevens(Application.java:80)
at Application.main(Application.java:28)
Caused by: java.io.IOException: Stream closed
at sun.nio.cs.StreamEncoder.ensureOpen(StreamEncoder.java:38)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:129)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:146)
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:204)
at java.io.Writer.write(Writer.java:126)
at org.postgresql.core.v2.QueryExecutorImpl.sendQuery(QueryExecutorImpl.java:392)
at org.postgresql.core.v2.QueryExecutorImpl.execute(QueryExecutorImpl.java:363)
... 6 more
0
> Execution finished.

[ Voor 38% gewijzigd door BSeB op 29-09-2005 19:54 ]


  • jochemd
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Maar wat staat er in de server log?

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 10:48

Robtimus

me Robtimus no like you

BSeB schreef op vrijdag 23 september 2005 @ 10:35:
Caused by: java.io.IOException: Unexpected packet type: 83
Caused by: java.io.IOException: Stream closed
En dat is dus waar het eigenlijke probleem ligt, daar was je niet achter gekomen zonder stack trace. Het probleem ligt iig in de communicatie tussen de driver en de server, meer kan ik je helaas niet vertellen (ben niet bekend met PostGre).

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Kan een server update uitkomst bieden?

  • momania
  • Registratie: Mei 2000
  • Laatst online: 29-04 14:22

momania

iPhone 30! Bam!

misschien wel ja...ik zou zeggen: kijk of er een update is, lees de release notes en probeer het :)

Neem je whisky mee, is het te weinig... *zucht*


  • jochemd
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Misschien. Daarvoor moet je weten waarom de connectie gesloten wordt en of dat een probleem is dat in recentere PostgreSQL versies opgelost is. Waarschijnlijk staat die reden in de logfiles van PostgreSQL (en zo niet dan staat daar in elk geval of het server process ook sterft op het moment dat jij deze client error krijgt).

edit:
Een stream closed is bijna altijd een unrecoverable exception in een PostgreSQL backend waardoor dat process exit. Dat staat zeker in de logfiles en misschien is er dan zelfs een core dump.

[ Voor 25% gewijzigd door jochemd op 23-09-2005 14:27 ]


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Volgens de logs van Postgre gaat alles goed. Er staat geen errors. Alles verloopt as usual.

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Ik heb misschien iets gevonden! Ik krijg als ik in een ander programma de melding dat ik de 100 rijen ga overschrijden.

Welke instelling zou ik moeten veranderen in Postgre neem ik aan zodat ik meer als 100 rijen kan opvragen.

  • jochemd
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Lijkt me onwaarschijnlijk dat dat de reden is, zoiets zit serverside simpelweg niet in PostgreSQL ingebouwd. Het zou kunnen dat het iets clientside is. Hele simpele test is om de query SELECT 1 UNION SELECT 2 UNION SELECT 3 etc. te draaien en te kijken bij hoeveel het ophoudt.

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Ik heb iets gevonden het ligt dus niet aan de records, want als ik doe:

SELECT vhl.id, vhl.thread, vhl.parent, vhl.author, vhl.subject, vhl.msgid FROM vhl ;

Dan pakt hij wel alles, maar als ik erin zet:

SELECT vhl.id, vhl.thread, vhl.parent, vhl.author, vhl.subject, vhl.msgid FROM vhl, vhl_bodies ;

Dan klapt hij eruit.

Geen id waarom, ik vraag namelijk niks op uit die andere tabel. Ook als ik eriin zou zetten:

WHERE vhl.id=vhl_bodies.id

dan klapt hij er ook uit. Misschien dat Postgre underscores niet leuk vind?

Edit: Blijkbaar maakt dat niks uit. als ik een andere tabel neem doet hij ook moeilijk. Het liefst zou ik deze SQL willen uitvoeren:

SELECT t1.id, t1.thread, t1.parent, t1.author, t1.subject, t1.msgid, t2.body FROM vhl AS t1, vhl_bodies AS t2 WHERE t1.id=t2.id;

Misschien zit er een fout in, maar kan ik hem niet vinden.

Dit meld mijn postgre:

LOG: could not send data to client: Broken pipe

Ik heb nu iets nieuws toegevoegd:

WHERE t1.id=t2.id AND t1.id < 100;

Nu krijg ik output.

[ Voor 34% gewijzigd door BSeB op 29-09-2005 21:33 ]


  • jochemd
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Ik heb even op de server ingelogd en je eerste statement met 1 table duurt 3 seconde, je join met de tweede table duurt 45 seconde. En aangezien die een hash-join gebruikt duurt het 9 seconde voordat de eerste records komt. Je hebt gewoon ergens client side een timeout zitten die ergens in die tussentijd het wel welletjes vind.
Kom anders even in #vhl langs dan kijken we er even samen naar.
Pagina: 1