MyISAM utilise un système de lock appelé "table locking", qui bloque les lectures dans la globalité d'une table en cas d'insertion, afin de garantir la cohérence des résultats.
La fonctionnalité "concurrent insert" de MySQL permet de contourner cet effet, en permettant d'avoir des lectures et écritures simultanées sous certaines conditions.
Il y a trois modes de concurrent insert possible au niveau de MySQL (2 pour MySQL 4.1 et < ), controllés par la variable concurrent_insert :
- 0 — Concurrent Insert desactivé
- 1 — Un concurrent insert peut survenir uniquement s'il n'y a pas d'enregitrement marqué comme étant effacés (mode par defaut)
- 2 — Un concurrent insert peut survenir même s'il des enregistrement sont marqués comme étant effacés (MySQL 5.0 et > seulement)
Passer la variable de 1 à 2 avec MySQL permet d'augmenter encore les performances pour les tables ayant beaucoup d'effacement / insertion concurrent, mais introduit de la fragmentation, MySQL ne "rebouchant" plus les trous causés par les effacements. Il est donc bon de planifier des "OPTIMIZE TABLE" regulièrement, pour défragmenter ces tables.
Pour les anglophones interessés par le fonctionnement interne de MySQL lors d'un concurrent insert, je vous recommande le très instructif article suivant, écrit par Jay Pipes, qui travaille chez MySQL en tant "North American Community Relations Manager" :
http://www.jpipes.com/index.php?/a [...] art-I.html
Message édité par joce le 30-09-2007 à 21:29:45
---------------
Life must be a preparation for the translation into another dimension.