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.
Database
dimanche, novembre 15 2009
Paquet debian pour pgtune
Par Rodolphe Quiédeville le dimanche, novembre 15 2009, 18:46
vendredi, octobre 30 2009
Plugin munin pour mysql-proxy
Par Rodolphe Quiédeville le vendredi, octobre 30 2009, 17:51
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
Par Rodolphe Quiédeville le jeudi, octobre 29 2009, 09:57
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
Par Rodolphe Quiédeville le vendredi, octobre 23 2009, 23:35
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 ?
Par Rodolphe Quiédeville le lundi, octobre 12 2009, 16:25
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
Par Rodolphe Quiédeville le samedi, octobre 3 2009, 18:28
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
Par Rodolphe Quiédeville le vendredi, septembre 25 2009, 10:54
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 ?

