vendredi 26 juin 2009

Est-ce que vous voulez connaitre ce que fait votre application coté base de données : employer un espion (open source)

Vous faites partie d’une équipe TMA ?

Vous avez hérité d’une application, suite au départ de votre collègue vers d’autres fonctions ?

Vous cherchez à cerner connaitre les requêtes lancés par JBPM ou Quartz, …

Et vous cherchez à cerner les causes de mauvais fonctionnement de votre application

La réponse est simple :

Utiliser un « mouchard » pour découvrir les requêtes SQL lancées par l’application vers la base de données.

L’installation est très simple

1) télécharge p6spy.jar ( le jar date de 2003, depuis il n’a pas évolué)

http://www.p6spy.com/survey.html

2) le fichier p6spy.jar doit être ajouté dans le classpath de l’application : pour une application Tomcat cela revient à mettre dans /web-inf/lib

3) Le fichier spy.properties doit être mis dans le même endroit que p6spy.jar.

a. dans la configuration de JDBC driver de l’application

i. changer le nom de driver réele par celui de p6spy.jar com.p6spy.engine.spy.P6SpyDriver

ii. mettre le « vraie » driver dans ce fichier realdriver=org.postgresql.Driver

Exemple avec JDBC Template de Spring

<bean id="dataSource"

class="org.springframework.jdbc.datasource.DriverManagerDataSource">

<property name="driverClassName">

<value>com.p6spy.engine.spy.P6SpyDriver</value>

</property>

<property name="url">

<value>jdbc:postgresql://localhost/jsf</value>

</property>

<property name="username">

<value>jsf</value>

</property>

<!-- Make sure <value> tags are on same line - if they're not,

authentication will fail -->

<property name="password">

<value>password</value>

</property>

</bean>

Le résultat est immédiat

Lancer l’application

Un fichier spy.log sera crée dans le répertoire de base de l’application

Le log est de type

current time|execution time|category|statement SQL String|effective SQL string

1245846292012|15|0|statement||

select count(*) from client

1245846292012|-1||resultset|

select count(*) from client

|count = 0

1245846292090|0|1|statement||select label from article where id=1

1245846292090|-1||resultset|select label from article where id=1 |label = 1

1245846292168|0|2|statement||select * from client

Nous avons même le temps d’exécution en ms, ce qui permettra d’évaluer les temps de réponse …

Mais ceci est une autre histoire

Log File Format

The log file format of spy.log follows:

current time|execution time|category|statement SQL String|effective SQL string

  • current time—The current time is obtained through System.getCurrentTimeMillis() and represents the number of milliseconds that have passed since January 1, 1970 00:00:00.000 GMT. (Refer to the J2SE documentation for further details on System.getCurrentTimeMillis().) To change the format, use the dateformat property described in Common Property File Settings.
  • execution time—The time it takes for a particular method to execute. (This is not the total cost for the SQL statement.) For example, a statement SELECT * FROM MYTABLE WHERE THISCOL = ? might be executed as a prepared statement, in which the .execute() function will be measured. This is recorded as the statement category. Further, as you call .next() on the ResultSet, each .next() call is recorded in the result category.
  • category—You can manage your log by including and excluding categories, which is described in Common Property File Settings.
  • statement SQL string—This is the SQL string passed to the statement object. If it is a prepared statement, it is the prepared statement that existed prior to the parameters being set. To see the complete statement, refer to effective SQL string.
  • effective SQL string—If you are not using a prepared statement, this contains no value. Otherwise, it fills in the values of the Prepared Statement so you can see the effective SQL statement that is passed to the database. Of course, the database still sees the prepared statement, but this string is a convenient way to see the actual values being sent to the database

0 commentaires :

Enregistrer un commentaire

Architecte SOA & Professionnel Open Source Headline Animator

 
Khaled BEN DRISS
Cloud Computing, SOA et Web 2.0 : Des sujets techniques sur SOA et l'Open Source : de Java & .Net, PHP5, Symfony, à SaaS / PaaS en passant par Azure, google appengine, le BPM, la Modélisation et d'autres sujets du coté du serveur et cloud computing.