S'abonner au Flux RSS

dimanche, novembre 15 2009

Paquet debian pour pgtune

Le paquet debian pour pgtune est finit et uploadé sur les serveurs FTP. Vous pouvez suivre son évolution au travers du bug report ITP #553975. La file d'inclusion de nouveaux paquets est assez chargée ces temps-ci, cela va peut-être prendre plusieurs jours pour voir le paquet apparaître dans SID. Je laisse le paquet disponible dans mentors le temps de son inclusion.

vendredi, octobre 30 2009

Plugin munin pour mysql-proxy

Première version d'un plugin pour munin afin de suivre le nombre de connexion sur un proxy MySQL. Je profite de la publication de ce nouveau plugin pour tester github.

La page du plugin : http://github.com/rodo/mungins/tree/master/mysql-proxy/

jeudi, octobre 29 2009

pgpool-II 2.2.5 dans Debian

La dernière version de pgpool-II, la 2.2.5 vient d'être intégrée dans debian experimental, vous pouvez suivre son évolution au travers de la page du package tracking system dédiée.

vendredi, octobre 23 2009

Intégrer memcached et mysql

Je vais décrire ici une technique pour mettre en cache mémoire, à l'aide de memcached les données d'une base mysql sans modifier le code applicatif. La technique consiste à utiliser mysql-proxy et la librairie lua mysql-proxy-cache. Cette description se base sur une Debian Lenny.

On débute par l'installation de memcached

aptitude install memcached

Ensuite nous allons installer les paquets nécessaire pour satisfaire les dépendances de la librairie.

aptitude install lua5.1 liblua5.1-md5-0 liblua5.1-socket2 luarocks

La librairie luamemcached n'est pas actuellement dans les repository officiel mais il existe néanmoins un paquet debian.

wget http://luaforge.net/frs/download.php/4041/liblua5.1-memcached0.deb
dpkg -i liblua5.1-memcached0.deb

Pour la librairie mysql-proxy-cache qui nous intéresse ici nous pouvons la récupérer par git ou directement à l'adresse http://github.com/clofresh/mysql-proxy-cache/raw/master/mysql-proxy-cache.lua.

A partir de ce point nous considérons que le fichier lua a été sauvegardé dans /usr/share/mysql-proxy/mysql-proxy-cache.lua

Modifions maintenant le fichier de configuration de mysql-proxy pour que celui-ci se lance au démarrage et qu'il intègre la nouvelle librairie, la configuration se fait dans /etc/default/mysql-proxy.

ENABLED="true"
OPTIONS="--proxy-lua-script=/usr/share/mysql-proxy/mysql-proxy-cache.lua"

Il reste à démarrer mysql-proxy avec le script d'init standard

/etc/init.d/mysql-proxy start

C'est désormais opérationnel, par défaut les résultats seront cachés pour une durée de 30 secondes. Le cache n'est pas dynamique dans le sens ou une donnée écrite ne sera pas rendue immédiatement, mais seulement au bout de 30 secondes, prenez garde donc si vous augmentez cette valeur.

Pour vérifier que memcached est bien actif, vous pouvez vous connecter en telnet sur son port d'écoute (11211) et taper la commande stats, vous obtiendrez quelque chose comme :

stats
STAT pid 2539
STAT uptime 21318
STAT time 1256336412
STAT version 1.2.2
STAT pointer_size 32
STAT rusage_user 0.040002
STAT rusage_system 0.120007
STAT curr_items 3
STAT total_items 15
STAT bytes 50447
STAT curr_connections 2
STAT total_connections 651
STAT connection_structures 17
STAT cmd_get 1450
STAT cmd_set 15
STAT get_hits 1435
STAT get_misses 15
STAT evictions 0
STAT bytes_read 151263
STAT bytes_written 45156032
STAT limit_maxbytes 67108864
STAT threads 1

Happy hacking !

lundi, octobre 12 2009

Cage ou package ?

Dans ma lancée sur les backports, j'ai rejoins le projet pkg-postgresql de packaging des utilitaires dédiés à PostgreSQL. Je vais pour commencer m'attaquer au packaging de pgpool-II qui a quelques versions stables de retard. À ce jour la dernière version dans sid est numéroté 1.3.2 quand la dernière version stable publiée est la 2.2.5.

samedi, octobre 3 2009

Backport lenny de pgbouncer

Nouveau backport d'un outil lié à PostgreSQL, pgbouncer est un gestionnaire de pool de connexion fortement utile sur les systèmes à nombreuses connexions répétitives.

Seule dépendance de pgbouncer, la libevent en version 1.4 qui n'est pas pas non plus packagée dans Lenny, j'en ai donc réalisé également un backport disponible toujours au même endroit. Pour ceux qui ne connaissent pas pgbouncer et souhaiteraient appronfondir le sujet je leur conseille la lecture du hors-série 44 de GNU/Linux magazine dédiée à PostgreSQL.

Première étape, installons la libevent

wget http://rodolphe.quiedeville.org/backports/lenny/i386/libevent-1.4-2_1.4.12-stable-1_i386.deb
dpkg -i libevent-1.4-2_1.4.12-stable-1_i386.deb

Outre libevent pgbouncer à d'autres dépendances qu'il vaut mieux s'assurer d'avoir sur sa machine avant d'installer le paquet.

aptitude install postgresql-common lsb-base libgcc1 libc6

Ceci étant fait il ne nous reste plus qu'à installer le paquet pgbouncer

wget http://rodolphe.quiedeville.org/backports/lenny/i386/pgbouncer_1.3.1-1_i386.deb
dpkg -i pgbouncer_1.3.1-1_i386.deb

Voilà pgbouncer d'installé sur votre distribution stable favorite, il est à noter que par défaut pgbouncer n'est pas lancé, il faut au préalable modifier le fichier /etc/default/pgbouncer comme indiqué par le warning lors de l'installation du paquet.

vendredi, septembre 25 2009

Backport du paquet postgresl-8.3-plr

Partant d'un besoin de calculs statistiques sur des données stockées dans postgresql j'ai été ammené à intégrer le langage R dans notre SI, travaillant avec PostgreSQL sous Debian j'ai cherché le paquet idoine pour me faciliter l'intégration, celui-ci n'existant que dans Squeeze j'ai backporté le paquet postgresql-8.3-plr pour Lenny que je mets à disposition ici. Le paquet original est basé sur le travail Joseph E Conway à l'origine de PL/R

Je profite de ce billet pour décrire l'intégration complète de PL/R dans PostgreSQL.

On y va, première étape récupérer le paquet pour Lenny

wget http://rodolphe.quiedeville.org/backports/lenny/i386/postgresql-8.3-plr_8.3.0.8-1_i386.deb

On procède à l'installation en ayant au préalable installé les dépendances du paquet qui sont r-base-core, postgresql-8.3, et libc6 (>= 2.7-1), toutes satisfaites dans Lenny à ce jour. J'ose imaginer que vous avez déjà postgresql-8.3 et la libc6 d'installée ;-)

heke:/usr/src# dpkg -i postgresql-8.3-plr_8.3.0.8-1_i386.deb
Selecting previously deselected package postgresql-8.3-plr.                             
(Reading database ... 42279 files and directories currently installed.)                 
Unpacking postgresql-8.3-plr (from postgresql-8.3-plr_8.3.0.8-1_i386.deb) ...           
Setting up postgresql-8.3-plr (1:8.3.0.8-1) ...

L'installation du paquet étant fait nous allons maintenant intégrer ce nouveau langage dans notre base et créer une première fonction d'aggrégat pour calculer la médiane. Pour cela nous allons avoir besoin de deux nouvelles fonctions que sont plr_array_accum et median, nous travaillerons en double precision. Vous pouvez télécharger le fichier de commande SQL plr.sql qui crée les fonctions pour tous les types numériques courants.

CREATE FUNCTION plr_array_accum (_float8, float8)
       RETURNS float8[]
       AS '$libdir/plr','plr_array_accum'
       LANGUAGE 'C';

CREATE FUNCTION r_median(_float8)
       RETURNS float
       AS 'median(arg1)'
       LANGUAGE 'plr';

CREATE AGGREGATE median (
       sfunc = plr_array_accum,
       basetype = float8,
       stype = _float8,
       finalfunc = r_median
);

Ceci étant fait nous allons maintenant créer une table avec un jeu de test.

CREATE TABLE foo (
    bar double precision
);   

et le jeu de test

INSERT INTO foo (bar) VALUES (5);
INSERT INTO foo (bar) VALUES (48);
INSERT INTO foo (bar) VALUES (110);
INSERT INTO foo (bar) VALUES (36);

Nous allons maintenant pouvoir calculer la médiane de bar aussi simplement que son maximum ou la somme en utilisant la nouvelle fonction d'agrégat median

test=# SELECT median(bar) from foo ;
 median
--------
     42
(1 row)

Un tel résultat ne peut-être qu'exact, non ?