2009-10-22 10 views
0

J'ai une requête de sélection qui prend 10 minutes pour se terminer lorsqu'elle est exécutée sur 10M enregistrements. Lorsque je cours à travers TOAD ou programme en utilisant une connexion JDBC normale, je récupère les résultats, mais lors de l'exécution d'un Job qui utilise Hibernate comme ORM ne renvoie aucun résultat. Ça raccroche ... même après 45 minutes? Aidez-nous s'il vous plaîtMise en veille prolongée avec le problème Oracle JDBC

+2

Est-ce que vous vous attendez honnêtement à ce que nous vous répondions sur cette base? – skaffman

Répondre

0

Voulez-vous dire que vous essayez de récupérer des enregistrements 10M en utilisant un ORM comme Hibernate? Si c'est le cas, vous avez un gros problème, vous devez revoir votre application parce que cela ne va pas fonctionner, et pourquoi elle raccroche, eh bien, je parie que c'est parce qu'elle manque de mémoire.

+0

Désolé, la requête renvoie uniquement le nombre d'enregistrements satisfaisant aux critères, donc nous ne récupérons pas tous les enregistrements dans la mémoire. C'est la requête elle-même qui prend du temps. Étant donné que c'est un travail par lots, nous nous attendons à ce que cela prenne du temps. Mais une fois que l'instruction préparée est générée, nous ne récupérons pas les comptes même après l'exécution normale ou la requête dans le crapaud (10 minutes). – vijay

0

Avez-vous activé la sortie SQL pour Hibernate? Vous devez set hibernate.show_sql to true pour ce faire. Une fois cela fait, comparez le SQL généré avec celui que vous avez utilisé dans TOAD. Sont-ils exactement le même ou pas?

Je vais me risquer à deviner ici et dire qu'ils ne sont pas parce qu'une fois SQL est généré Hibernate ne fait rien de fantaisie - la connexion est prise à partir d'un pool; Une instruction préparée est créée et exécutée - elle ne devrait donc pas être différente de JDBC.

Ainsi, la question la plus probable est de savoir comment votre HQL peut être optimisé. Si vous avez besoin d'aide pour cela, vous devrez publier le HQL en question ainsi que les mappages/schémas de table appropriés. Exécuter l'explication sur la requête aiderait aussi bien.

+0

Merci pour la suggestion, je cours la même question dans TOAD qui a été générée par Hibernate. – vijay

+0

Pouvez-vous poster la question? HQL et SQL? Et le code où vous l'utilisez dans Hibernate? J'ai le plus de mal à imaginer ce qui prendrait Hibernate plus longtemps pour exécuter la même requête **. – ChssPly76

+0

merci de répondre, j'ai un objet Criteria qui convertit en requête SQL. La requête est un nombre d'objets correspondant à un critère. Quand j'exécute le programme dans un environnement de développement qui a environ 50 000 enregistrements en DB, j'obtiens le résultat. Mais quand je cours le même programme dans Perf. env qui a comme 10M enregistre la requête ne revient jamais. Bien que l'exécution de la même requête de TOAD donne des résultats. Ma requête est quelque chose comme ça. – vijay

Questions connexes