par Mark Nielsen L´auteur: L'auteur travaille à Computeur Underground Inc, en tant qu'expert Linux. Il adore faire des choses ridicules et élaborer des projets ridicules, parce que... Eh! Les ordinateurs sont SUPPOSES être cools. Mark travaille aussi à ZING, www.genericbooks.com où il s'est proposé comme volontaire pour promouvoir le logiciel libre, la libre circulation des sources ainsi que toute la littérature correspondante. Sommaire: |
Résumé:
Cet article montre comment accélérer une base de données PostgreSQL en utilisant la RAM.
Bon, qu'est ce que la RAM? Comment pouvons nous l'utiliser de manière à accélérer un serveur de données tel que PostgreSQL?
La RAM est en fin de compte de la mémoire que vous utilisez comme un disque dur. Chaque fois que vous vous en servez, vous court-circuitez l'enregistrement sur votre disque dur. En fait, quoique vous fassiez en utilisant la RAM, cela sera beaucoup plus rapide car l'accès au disque dur est plus lent. Mais son inconvénient majeur réside dans le fait que les changements effectués sur le serveur de la base de données seront entièrement perdus si vous reboutez votre ordinateur.
Pour le serveur de données, PostgreSQL, si vous chargez toutes les bases de données dans la mémoire, vous allez augmenter la rapidité d'exécution.
Pour monter le répertoire /Test sur un point de montage d'un disque de la RAM, il faut faire:
mkdir -p /Test mkfs -t ext2 /dev/ram0 mount /dev/ram0 /Test
Si cela ne marche pas, c'est que vous n'avez pas compilé le noyau avec
l'option supportant la RAM.
Pour la configuration du noyau, il faut sélectionner comme option: CONFIG_BLK_DEV_RAM.
Les commandes ci-dessus ne vous permettent que d'avoir un peu moins de 4Mb de RAM pour le point de montage. Jetez un coup d'oeil à l'article "Ramdisk" pour voir comment obtenir 50Mb.
L'idéal serait que vous ayez 2 serveurs de bases de données. Le premier où vous ferez vos modifications. Le deuxième serait une copie placée dans la RAM. Pour ce faire, vous utiliserez des commandes comme "pg_dump" ou "pg_dumpall"
REMARQUE: Nous supposons que vous avez mis dans votre fichier lilo.conf, l'option pour avoir un disque de RAM plus gros que le serveur de la base de données. Si vous avez besoin de connaître la taille approximative, passez la commande "cd /var/lib/pgsql ; du"Malgré tout, pour avoir votre serveur PostgreSQL courant installé dans le répertoire "/var/lib/pgsql" et pour qu'il soit monté sur la RAM vous devez taper:
###Arrêt du serveur PostgreSQL courant /etc/rc.d/init.d/postgres stop ###Changement de nom du répertoire pgsql mv /var/lib/pgsql /var/lib/pgsql_main
###Création d'un répertoire pour monter la RAM mkdir -p /var/lib/pgsql_memory
###Changement de propriétaire pour le répertoire pgsql_memory ###Le nouveau est postgre chown postgre /var/lib/pgsql_memory ###création du lien sur le nom initial /var/lib/pgsql ln -s /var/lib/pgsql_memory /var/lib/pgsql
###Formatage du disque de la RAM mkfs -t ext2 /dev/ram0 ###Montage du disque sur le répertoire de Postgresql mount /dev/ram0 /var/lib/pgsql_memory
###Recopie de tout le répertoire principal dans la RAM tar -C /var/lib/pgsql_main -cp . | tar -C /var/lib/pgsql_memory -xp ###Démarrage du serveur courant Postgresql /etc/rc.d/init.d/postgres start
J'ai essayé de tester la rapidité avec ou sans PostgreSQL dans la RAM. Il est parfois 50% plus rapide, d'autre fois non.
J'ai remarqué que, lorsque le système met des données dans la mémoire cache, le gain n'est pas énorme: approximativement 10 ou 20%. Lorsqu'il y a beaucoup de données isolées qui doivent recherchées dans la base (de données), les performances croissent incroyablement.
Le plus grand avantage avec l'astuce de la RAM consiste dans le fait de forcer la base de données à rester en mémoire en évitant d'utiliser le disque dur. Si vous n'employez pas cette méthode, inévitablement, les données vont sortir de la RAM, il vous faudra alors, au moment de les réutiliser, les recharger à partir du disque dur.
Site Web maintenu par l´équipe d´édition LinuxFocus
© Mark Nielsen LinuxFocus 1999 |
1999-11-15, generated by lfparser version 0.7