mardi 1 octobre 2013

Purger la Transaction Log de SQL Server 2005

Il arrive des cas ou on doit purger la log des transactions SQL rapidement : disque saturé à cause d'updates massifs.
Voici comment effacer le fichier en urgence (peut fonctionner au delà de la version 2005, pas testé)

-- Database : nom de la base de  données
-- Logfile_name : nom du fichier log défini dans les propriétés de la base

USE Database
GO
DBCC SHRINKFILE(Logfile_name, 1)
BACKUP LOG Database WITH TRUNCATE_ONLY
DBCC SHRINKFILE(Logfile_name, 1)
GO

Enregistrer les résultats d'un scénario Jmeter dans une base MySQL

Dit comme cela ce n'a pas beaucoup d'intérêt, mais si on veut détourner JMeter de sa vocation première pour faire du monitoring de sites web ou de webservices... ça peut être utile !

L'idée est de remplacer le listener habituel par un script beanshell, à chaque itération le script va être executé et on va donc enregistrer le résultat de l'échantillon en base.

A noter que cette manip nécessite quand même "l'installation" du driver jdbc correspondant à votre version de MySQL dans JMeter (dans le dossier /lib de jmeter, normalement il est chargé automatiquement).

Voici le script :
//superformance.blogspot.com
import org.apache.jmeter.util.JMeterUtils;

import org.apache.jmeter.samplers.SampleResult;

import org.apache.jmeter.assertions.AssertionResult;



import java.sql.DriverManager;

import org.hsqldb.jdbcDriver;

import java.sql.SQLException;

import java.sql.*;



db_url = "jdbc:mysql://localhost/jmeter";

driver = "com.mysql.jdbc.Driver";

user = "jmeter";

password = "jmeter";



Class.forName(driver);

Connection con = DriverManager.getConnection(db_url,user,password);

try {



   long newlong = sampleResult.getStartTime();

   String str = Long.toString(newlong);

   String str3 = str.substring(0,(str.length()-3));

   long lts = Long.parseLong(str3);  



   PreparedStatement pstmt = con.prepareStatement("INSERT INTO test (name ,host ,resp_code ,resp_time, request_time, stamp, resp_size ) VALUES (?, ?, ?, ?,FROM_UNIXTIME(?),?, ? ) ");

   pstmt.setString(1, sampleResult.getSampleLabel() );

   pstmt.setString(2, sampleResult.getURL().getHost());

   pstmt.setString(3, sampleResult.getResponseCode() );

   pstmt.setLong(4, sampleResult.getTime() );

   pstmt.setLong(5,lts );



   pstmt.setLong(6,sampleResult.getStartTime() );

   pstmt.setInt(7,sampleResult.getBytes() );



   int i = pstmt.executeUpdate();

   print(i);

}

catch ( e ) {

   e.printStackTrace();

}

catch (SQLException s) {

  print(s.getSQLState());

}

finally {

  con.close();

}