Sélectionner 1 de DUAL: MySQL

en regardant mon journal de requêtes, je vois un motif étrange pour lequel je n'ai pas d'explication.

après pratiquement chaque requête, j'ai"select 1 from DUAL".

Je n'ai aucune idée d'où cela vient, et je ne fais certainement pas la requête explicitement.

le log ressemble à ceci:

    10 Query       SELECT some normal query
    10 Query       select 1 from DUAL
    10 Query       SELECT some normal query
    10 Query       select 1 from DUAL
    10 Query       SELECT some normal query
    10 Query       select 1 from DUAL
    10 Query       SELECT some normal query
    10 Query       select 1 from DUAL
    10 Query       SELECT some normal query
    10 Query       select 1 from DUAL
    ...etc...

quelqu'un a-t-il déjà rencontré ce problème?

MySQL Version: 5.0.51

Pilote: Java 6 application à l'aide de JDBC. mysql-connector-java-5.1.6-bin.jar

Pool de connexion: commons-dbcp 1.2.2

le validationQuery a été défini à" select 1 from DUAL " (évidemment) et apparemment le pool de connexion par défaut testOnBorrow et testOnReturn à true quand une requête de validation est non-null.

une autre question que cela soulève pour moi est de savoir si oui ou Non Je j'ai besoin de pour avoir une requête de validation, ou si je peux peut-être obtenir un boost performance en le désactivant ou au moins en réduisant la fréquence avec laquelle il est utilisé. Malheureusement, le développeur qui écrit notre "gestionnaire de base de données" n'est plus avec nous, donc je ne peux pas lui demander de se justifier pour moi. Toute contribution serait appréciée. Je vais fouiller L'API et google pendant un moment et faire un rapport si je trouve quelque chose d'intéressant.

modifier: ajouté plus d'informations

Edit 2: informations ajoutées qui ont été demandées dans la bonne réponse pour quiconque trouve ce plus tard

12
demandé sur skaffman 2009-05-28 00:42:47

3 réponses

cela pourrait provenir du pool de connexion que votre application utilise. Nous utilisons une simple requête pour tester la connexion.

vient de jeter un coup d'oeil rapide dans la source de mysql-connector-j et il ne vient pas de là.

la cause la plus probable est le pool de connexion.

Commun des pools de connexion:

commons-dbcp possède une propriété de configuration validationQuery , cette combiné avec testOnBorrow et testOnReturn pourrait causer les déclarations que vous voyez.

c3p0 a preferredTestQuery , testConnectionOnCheckin , testConnectionOnCheckout et idleConnectionTestPeriod

pour ce que ça vaut, j'ai tendance à configurer le test de connexion et le checkout/borrow même si cela signifie un peu plus de bavardage réseau.

24
répondu Gareth Davis 2009-05-28 07:03:10

j'ai effectué 100 inserts/deltes et testé sur le DBCP et le C3PO.

DBCP :: testOnBorrow = true affecte le temps de réponse de plus de 4 plis.

C3P0:: testconnection oncheckout = vrai impacte le temps de réponse de plus de 3 plis.

Voici les résultats : DBCP-BasicDataSource

temps moyen pour 100 transactions ( inscrire l'opération ) testOnBorrow=false:: 219.01 MS testOnBorrow=true:: 1071.56 ms

temps moyen pour 100 transactions ( supprimer opration ) testOnBorrow=false:: 223.4 ms testOnBorrow=true:: 1067.51 ms

C3PO-ComboPooledDataSource Temps moyen pour 100 transactions (inscrire l'opération ) testconnection oncheckout = false:: 220.08 ms testconnection oncheckout=true:: 661.44 ms

temps moyen pour 100 transactions ( supprimer opration ) testconnection oncheckout = false:: 216.52 ms testconnection oncheckout=true:: 648.29 ms

Conculsion: Setting testOnBorrow=true in DBCP or testconnection oncheckout = true in C3PO impacts the performance by 3-4 folds. Est-il un autre paramètre qui permet d'améliorer les performances.

- Durga Prasad

5
répondu Durga Prasad 2010-02-18 11:20:45

la table "dual" / nom d'objet est une construction Oracle, que MySQL prend en charge pour la compatibilité - ou pour fournir une cible pour les requêtes qui n'ont pas de cible mais les gens veulent que l'on se sent tout chaud et flou. Par exemple:

select curdate()

peut être

select curdate() from dual

Quelqu'un pourrait vous renifler pour voir si vous dirigez Oracle.

1
répondu Cody Caughlan 2009-05-27 20:48:59