MySQL 6.0, le moteur Falcon pour MySQL

Abonnements, magazines... Notre catalogue complet au bas de cette page.

MySQL AB travaille d'arrache-pied sur un moteur de table transactionnel maison. Depuis avril 2007, Falcon est même devenu le fer de lance de la version 6.0 de MySQL. Rapide, simple à utiliser, adapté pour le Web, et, bien sûr, transactionnel, Falcon est un moteur de stockage pour MySQL : il s'insère dans le serveur de base de données comme MyISAM ou InnoDB. Falcon est un projet distinct de FireBird, mais a été bâti sur l'expérience de son auteur pour tirer les meilleures performances.

Falcon mode d’emploi

La philosophie du moteur est d'éviter autant que possible d'utiliser le disque. Au fond, son but n'est pas d'accélérer les opérations avec le disque, mais de les supprimer purement et simplement, pour utiliser à la place des systèmes de cache habiles, en mémoire. Jim Starkey note que les processeurs et la mémoire ont fait des progrès importants depuis les années 70, mais que les disques n'ont pas suivi.
Les données sont mises en cache en mémoire. Jim Starkey appelle cela le cache de ligne, à ne pas confondre avec le cache de requête : ce dernier enregistre les résultats des requêtes fréquentes pour les servir plus vite. Ici, le cache de ligne, qui est distinct du cache de requête, mais travaillera finalement avec lui, enregistre des lignes en mémoire. Ces lignes sont alors réutilisées dès qu'une requête les sollicite. Falcon est assez habile pour rechercher les lignes dont il a besoin en mémoire, puis sur le disque. Une requête peut donc tirer une partie des lignes déjà chargées par une requête précédente, avant de commencer à solliciter le disque. Ce système fonctionne pour les sélections comme pour les modifications : les lignes qui sont conservées en mémoire sont capables d'entretenir des versions différentes. Cela permet aux transactions de travailler de manière indépendante, aux UPDATE de s'exécuter simultanément, sans poser de verrou de table, ni même de ligne. Jim Starkey appelle cette technique 'Multi-Version Concurency Control'. Cette approche permet d'obtenir un très haut niveau de simultanéité dans l'exécution des commandes SQL, aussi bien en lecture qu'en écriture. Pour gérer ce cache, Falcon dispose de deux paramètres, sur les trois disponibles pour le configurer : falcon_min_memor y et falcon_max_memory. Le moteur va utiliser tout ce qu'il peut de mémoire pour stocker les lignes et leurs versions. Lorsque la limite supérieure est atteinte, un thread parallèle entre en jeu, et fait le tri entre les lignes qui sont souvent utilisées, et les autres. Ce nettoyage de la mémoire fonctionne sur le même critère que pour le cache de requêtes, mais il est beaucoup moins fréquent : au lieu de faire de la place pour de nouvelles données quand elles se présentent, Falcon fait un grand nettoyage de temps en temps. Dès qu'il s'approche de falcon_max_memory, il tente de réduire sa consommation à falcon_min_memory. Cette technique de gestion du cache porte le nom de scavenging, ou vidange en français. D'un autre côté, Falcon conserve une seule version des données sur le disque. Cela renforce considérablement leur sécurité et leur intégrité. Pour cela, les données sont écrites sur le disque avec une technique d'écriture prudente, qui laisse l'espace de table toujours cohérent.

S'ABONNER