IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

Connexion et requête JDBC anormalement lente. (PostgreSQL)


Sujet :

JDBC Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Connexion et requête JDBC anormalement lente. (PostgreSQL)
    Avant tout chose afin d'exposer mon problème je dois vous faire une rapide description du matériel utilisé et des conditions d'utilisation.

    J'ai actuellement un serveur dédié hébergé chez ikoula (offre Green Fish). Le système d'exploitation est Centos 6.5,64 bits (installation en minimal).

    La configuration de la machine est la suivante :
    • Intel Atom 510 DC HT(2 x 2 x 1,66 Ghz)
    • 4 Go RAM DDR2 800Mz
    • 250 Go SATA



    J'ai installé le jdk java 7.51.( Java(TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
    La base de donnée est PostgreSQL 9.3 (driver utilisé postgresql-9.3-1101.jdbc41jar).

    J'ai tous de suite constaté des performances anormalement lente.

    J'ai réalisé un programme test qui exécute les fonctionnalités suivantes :
    • Chargement du driver postgresql (normalement inutile mais les temps est intéressant)
    • Connexion à ma base de donnée
    • Exécution d'un requête
    • Test d'itérations


    Voici les temps affichés sur ma machine de travail : (Windows 7 64bits, CPU I3-3220 3.30Gz, RAM 4Go)

    Tps chargement driver= : [16 millisecondes]
    Tps connexion= : [58 millisecondes]
    Tps req= : [64 millisecondes]
    tps total JDBC= : [140 millisecondes]

    tps iter GC= : [526 millisecondes]
    tps iter Opération arithmétique= : [01 secondes] [620 millisecondes]
    tps iter accésseurs/mutateurs= : [623 millisecondes]


    Voici les temps de notre serveur maison qui ma permis de m’entraîner avant de configurer le serveur dédié d'Ikoula (Centos 6.5 64bits, Pentium(R) Dual-Core CPU E5400 2.70GHz,RAM 4Go DDR2 800Mz)
    Tps chargement driver= : [48 millisecondes]
    Tps connexion= : [66 millisecondes]
    Tps req= : [120 millisecondes]
    tps total JDBC= : [238 millisecondes]

    tps iter GC= : [8 millisecondes]
    tps iter Opération arithmétique= : [3 millisecondes]
    tps iter accésseurs/mutateurs= : [68 millisecondes]

    Et enfin voici les temps sur le serveur dédié hébergé chez Ikoula:
    Tps chargement driver= : [202 millisecondes]
    Tps connexion= : [287 millisecondes]
    Tps req= : [402 millisecondes]
    tps total JDBC= : [915 millisecondes]

    tps iter GC= : [32 millisecondes]
    tps iter Opération arithmétique= : [9 millisecondes]
    tps iter accésseurs/mutateurs= : [203 millisecondes]



    NOTE :Le Tps total JDBC n'est pas une addition du temps de chargement + connexion + req c'est normal si le compte n'y est pas. (Les system.out.println mangent quelque millisecondes)

    Les tests on bien sur été effectués en locale et PostgreSQL n'est pas en cause. (Les temps sur PGADMIN sont même excellent).

    J'ai l'impression que les classes JAVA mettent plus de temps à se charger sur Centos.(Les temps de chargement du drivers Postgresql sont vraiment long)
    Je ne comprends pas ce qui peut autant ralentir JDBC (la mémoire, le réseau local , DNS ?)
    J'ai exécuté mon jar avec la jvm 1.6.45 avec postgresql 8.4, j'ai alloué plus de mémoire à mon programme, j'ai tué les processus inutiles, j'ai lancé la jvm en mode server et client, mais rien n'y fait.

    Les RAM des deux PC étant les même je ne comprends pas d’où peut venir le problème.

    Je ne sais plus quoi faire.
    Si vous pensez que le problème est d'ordre matériel je peux vous affichez les caractéristiques techniques plus précises du CPU et de la mémoire du serveur dédié.

    Merci d'avance pour vos réponses.


    Le code que j'ai utilisé pour les test /
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    String url = "jdbc:postgresql://127.0.0.1:5499/mabase";
    String username = "username";
    String password = "password";
     
    Properties props = new Properties();
    props.setProperty("user", username);
    props.setProperty("password", password);
     
    Chrono cTotal = new Chrono();
    Chrono cCnx = new Chrono();
    Chrono cReq = new Chrono();
    Chrono cLoadDriver = new Chrono();
     
    cTotal.start();
     
    //DEBUT TEST TPS CHARGEMENT DRIVER
    	cLoadDriver.start();
    	Class.forName("org.postgresql.Driver"); // load the driver
    	cLoadDriver.stop();
    	cLoadDriver.afficher("Tps chargement driver=");
    //FIN TEST TPS CHARGEMENT DRIVER
     
    //DEBUT TEST TPS CONNEXION
    	cCnx.start();
    	conn = DriverManager.getConnection(url, props);
    	cCnx.stop();
    	cCnx.afficher("Tps connexion=");
    //FIN TEST TPS CONNEXION
     
    //DEBUT TEST TPS REQUETE
    	cReq.start();
    	String req = "SELECT ...";
    	PreparedStatement ps = conn.prepareStatement(req);
     
    	ResultSet rs = ps.executeQuery();
     
    	while (rs.next()) {
    		rs.getString("monChamp");
    	}
     
    	ps.close();
    	cReq.stop();
    	cReq.afficher("Tps req=");
    //FIN TEST TPS REQUETE
     
    cTotal.stop();
    cTotal.afficher("tps total JDBC=");
     
     
    //DEBUT TEST TPS ITERATIONS
    	Integer integer;
    	int max = 100000000;
    	Chrono cIter = new Chrono();
    	cIter.start();
    	for (int i=0; i<max; i++) { 
    		integer = new Integer(i); 
    	  }
    	cIter.afficherAvecStop("\ntps iter GC=");
     
    	cIter.start();
    	double value = 0;
    	for (int i=0; i<max; i++) { 
    		value += (i/2L); 
    	  }
    	cIter.afficherAvecStop("\ntps iter Opération arithmétique=");
     
    	cIter.start();
    	MonObject object = new MonObject();
    	for (int i=0; i<max; i++) { 
    		object.setValue( i + object.getValue() ); 
    	  }
    	cIter.afficherAvecStop("\ntps iter accésseurs/mutateurs=");
    //FIN TEST TPS ITERATIONS

  2. #2
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Bon le problème semble matériel (sans doute la cadence du processeur).

    J’aimerai juste corriger une erreur dans mon énoncé sur le mode de la JVM. La JVM sur Centos 6.5 ( et sur les linux en général) est toujours en mode serveur. D’où la certaine lenteur de chargement des classes.

    Bref je marque le sujet en résolu.(Avec un arrière-goût d'inachever)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Mail] Soumission anormalement lente
    Par gbnbcom dans le forum Langage
    Réponses: 18
    Dernier message: 10/01/2007, 13h47
  2. Connexion anormalement lente Active Directory 2003 Clien Win XP SP2
    Par digital prophecy dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 11/11/2006, 22h07
  3. Connexion SQL Server JDBC
    Par boblepongecotegratan dans le forum JDBC
    Réponses: 3
    Dernier message: 21/04/2006, 21h58
  4. connexion à PHPMySQL via jdbc
    Par sjtraore dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 20/02/2006, 18h18
  5. Problème de connexion avec le JDBC
    Par inch dans le forum JDBC
    Réponses: 3
    Dernier message: 07/12/2005, 12h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo